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

Commit dd8bf2c

Browse files
committed
feat(data/polynomial/eval): easy lemmas + speedup (#4596)
1 parent 7fff35f commit dd8bf2c

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

src/data/polynomial/algebra_map.lean

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,6 @@ lemma eval_comp : (p.comp q).eval a = p.eval (q.eval a) := eval₂_comp _
8888
instance : is_semiring_hom (λ q : polynomial R, q.comp p) :=
8989
by unfold comp; apply_instance
9090

91-
@[simp] lemma mul_comp : (p * q).comp r = p.comp r * q.comp r := eval₂_mul _ _
92-
9391
end comp
9492

9593
end comm_semiring

src/data/polynomial/eval.lean

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ p.sum (λ e a, f a * x ^ e)
3737

3838
lemma eval₂_eq_sum {f : R →+* S} {x : S} : p.eval₂ f x = p.sum (λ e a, f a * x ^ e) := rfl
3939

40+
lemma eval₂_congr {R S : Type*} [semiring R] [semiring S]
41+
{f g : R →+* S} {s t : S} {φ ψ : polynomial R} :
42+
f = g → s = t → φ = ψ → eval₂ f s φ = eval₂ g t ψ :=
43+
by rintro rfl rfl rfl; refl
44+
4045
@[simp] lemma eval₂_zero : (0 : polynomial R).eval₂ f x = 0 :=
4146
finsupp.sum_zero_index
4247

@@ -286,6 +291,16 @@ by rw [← C_1, C_comp]
286291

287292
@[simp] lemma add_comp : (p + q).comp r = p.comp r + q.comp r := eval₂_add _ _
288293

294+
@[simp] lemma mul_comp {R : Type*} [comm_semiring R] (p q r : polynomial R) :
295+
(p * q).comp r = p.comp r * q.comp r := eval₂_mul _ _
296+
297+
lemma comp_assoc {R : Type*} [comm_semiring R] (φ ψ χ : polynomial R) :
298+
(φ.comp ψ).comp χ = φ.comp (ψ.comp χ) :=
299+
begin
300+
apply polynomial.induction_on φ;
301+
{ intros, simp only [add_comp, mul_comp, C_comp, X_comp, pow_succ', ← mul_assoc, *] at * }
302+
end
303+
289304
end comp
290305

291306
section map
@@ -528,7 +543,7 @@ end map
528543
end comm_semiring
529544

530545
section ring
531-
variables [ring R] {p q : polynomial R}
546+
variables [ring R] {p q r : polynomial R}
532547

533548
-- @[simp]
534549
-- lemma C_eq_int_cast (n : ℤ) : C ↑n = (n : polynomial R) :=
@@ -569,6 +584,9 @@ eval₂_sub _
569584
lemma root_X_sub_C : is_root (X - C a) b ↔ a = b :=
570585
by rw [is_root.def, eval_sub, eval_X, eval_C, sub_eq_zero_iff_eq, eq_comm]
571586

587+
@[simp] lemma neg_comp : (-p).comp q = -p.comp q := eval₂_neg _
588+
589+
@[simp] lemma sub_comp : (p - q).comp r = p.comp r - q.comp r := eval₂_sub _
572590

573591
end ring
574592

0 commit comments

Comments
 (0)