Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit e1e7190

Browse files
committed
feat(data/polynomial/div): add X_sub_C_dvd_sub_C_eval (#19120)
1 parent fd4551c commit e1e7190

1 file changed

Lines changed: 16 additions & 1 deletion

File tree

src/data/polynomial/div.lean

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,11 +395,26 @@ lemma mul_div_by_monic_eq_iff_is_root : (X - C a) * (p /ₘ (X - C a)) = p ↔ i
395395
by conv {to_rhs, rw ← mod_by_monic_add_div p (monic_X_sub_C a)};
396396
rw [mod_by_monic_X_sub_C_eq_C_eval, h, C_0, zero_add]⟩
397397

398-
lemma dvd_iff_is_root : (X - C a) ∣ p ↔ is_root p a :=
398+
lemma dvd_iff_is_root : X - C a ∣ p ↔ is_root p a :=
399399
⟨λ h, by rwa [← dvd_iff_mod_by_monic_eq_zero (monic_X_sub_C _),
400400
mod_by_monic_X_sub_C_eq_C_eval, ← C_0, C_inj] at h,
401401
λ h, ⟨(p /ₘ (X - C a)), by rw mul_div_by_monic_eq_iff_is_root.2 h⟩⟩
402402

403+
lemma X_sub_C_dvd_sub_C_eval : X - C a ∣ p - C (p.eval a) :=
404+
by rw [dvd_iff_is_root, is_root, eval_sub, eval_C, sub_self]
405+
406+
lemma mem_span_C_X_sub_C_X_sub_C_iff_eval_eval_eq_zero {b : R[X]} {P : R[X][X]} :
407+
P ∈ (ideal.span {C (X - C a), X - C b} : ideal R[X][X]) ↔ (P.eval b).eval a = 0 :=
408+
begin
409+
rw [ideal.mem_span_pair],
410+
split; intro h,
411+
{ rcases h with ⟨_, _, rfl⟩,
412+
simp only [eval_C, eval_X, eval_add, eval_sub, eval_mul, add_zero, mul_zero, sub_self] },
413+
{ cases dvd_iff_is_root.mpr h with p hp,
414+
cases @X_sub_C_dvd_sub_C_eval _ b _ P with q hq,
415+
exact ⟨C p, q, by rw [mul_comm, mul_comm q, eq_add_of_sub_eq' hq, hp, C_mul]⟩ }
416+
end
417+
403418
lemma mod_by_monic_X (p : R[X]) : p %ₘ X = C (p.eval 0) :=
404419
by rw [← mod_by_monic_X_sub_C_eq_C_eval, C_0, sub_zero]
405420

0 commit comments

Comments
 (0)