From c7963f4046189350d38b57d1f5320e51ff4b45b3 Mon Sep 17 00:00:00 2001 From: Eric Wieser Date: Mon, 8 Aug 2022 19:01:35 +0000 Subject: [PATCH] chore(data/mv_polynomial/basic): generalize lemmas about evaluation at zero (#15929) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds unapplied versions of the simp lemmas so that they apply more generally, and adds missing versions for `mv_polynomial.eval` and `mv_polynomial.eval₂`. --- src/data/mv_polynomial/basic.lean | 36 ++++++++++++++----- .../witt_vector/structure_polynomial.lean | 4 +-- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/data/mv_polynomial/basic.lean b/src/data/mv_polynomial/basic.lean index d582c50ef4506..94e124fe2681a 100644 --- a/src/data/mv_polynomial/basic.lean +++ b/src/data/mv_polynomial/basic.lean @@ -1122,26 +1122,44 @@ by { ext i, simp } φ (aeval g p) = (eval₂_hom (φ.comp (algebra_map R S₁)) (λ i, φ (g i)) p) := by { rw ← comp_eval₂_hom, refl } -@[simp] lemma eval₂_hom_zero (f : R →+* S₂) (p : mv_polynomial σ R) : +@[simp] lemma eval₂_hom_zero (f : R →+* S₂) : + eval₂_hom f (0 : σ → S₂) = f.comp constant_coeff := +by { ext; simp } + +@[simp] lemma eval₂_hom_zero' (f : R →+* S₂) : + eval₂_hom f (λ _, 0 : σ → S₂) = f.comp constant_coeff := +eval₂_hom_zero f + +lemma eval₂_hom_zero_apply (f : R →+* S₂) (p : mv_polynomial σ R) : eval₂_hom f (0 : σ → S₂) p = f (constant_coeff p) := -begin - suffices : eval₂_hom f (0 : σ → S₂) = f.comp constant_coeff, - from ring_hom.congr_fun this p, - ext; simp -end +ring_hom.congr_fun (eval₂_hom_zero f) p -@[simp] lemma eval₂_hom_zero' (f : R →+* S₂) (p : mv_polynomial σ R) : +lemma eval₂_hom_zero'_apply (f : R →+* S₂) (p : mv_polynomial σ R) : eval₂_hom f (λ _, 0 : σ → S₂) p = f (constant_coeff p) := -eval₂_hom_zero f p +eval₂_hom_zero_apply f p + +@[simp] lemma eval₂_zero_apply (f : R →+* S₂) (p : mv_polynomial σ R) : + eval₂ f (0 : σ → S₂) p = f (constant_coeff p) := +eval₂_hom_zero_apply _ _ + +@[simp] lemma eval₂_zero'_apply (f : R →+* S₂) (p : mv_polynomial σ R) : + eval₂ f (λ _, 0 : σ → S₂) p = f (constant_coeff p) := +eval₂_zero_apply f p @[simp] lemma aeval_zero (p : mv_polynomial σ R) : aeval (0 : σ → S₁) p = algebra_map _ _ (constant_coeff p) := -eval₂_hom_zero (algebra_map R S₁) p +eval₂_hom_zero_apply (algebra_map R S₁) p @[simp] lemma aeval_zero' (p : mv_polynomial σ R) : aeval (λ _, 0 : σ → S₁) p = algebra_map _ _ (constant_coeff p) := aeval_zero p +@[simp] lemma eval_zero : eval (0 : σ → R) = constant_coeff := +eval₂_hom_zero _ + +@[simp] lemma eval_zero' : eval (λ _, 0 : σ → R) = constant_coeff := +eval₂_hom_zero _ + lemma aeval_monomial (g : σ → S₁) (d : σ →₀ ℕ) (r : R) : aeval g (monomial d r) = algebra_map _ _ r * d.prod (λ i k, g i ^ k) := eval₂_hom_monomial _ _ _ _ diff --git a/src/ring_theory/witt_vector/structure_polynomial.lean b/src/ring_theory/witt_vector/structure_polynomial.lean index ad89d24cb533f..c4e1630ad99a9 100644 --- a/src/ring_theory/witt_vector/structure_polynomial.lean +++ b/src/ring_theory/witt_vector/structure_polynomial.lean @@ -345,12 +345,12 @@ lemma constant_coeff_witt_structure_rat_zero (Φ : mv_polynomial idx ℚ) : constant_coeff (witt_structure_rat p Φ 0) = constant_coeff Φ := by simp only [witt_structure_rat, bind₁, map_aeval, X_in_terms_of_W_zero, constant_coeff_rename, constant_coeff_witt_polynomial, aeval_X, constant_coeff_comp_algebra_map, - eval₂_hom_zero', ring_hom.id_apply] + eval₂_hom_zero'_apply, ring_hom.id_apply] lemma constant_coeff_witt_structure_rat (Φ : mv_polynomial idx ℚ) (h : constant_coeff Φ = 0) (n : ℕ) : constant_coeff (witt_structure_rat p Φ n) = 0 := -by simp only [witt_structure_rat, eval₂_hom_zero', h, bind₁, map_aeval, constant_coeff_rename, +by simp only [witt_structure_rat, eval₂_hom_zero'_apply, h, bind₁, map_aeval, constant_coeff_rename, constant_coeff_witt_polynomial, constant_coeff_comp_algebra_map, ring_hom.id_apply, constant_coeff_X_in_terms_of_W]