Skip to content

Commit

Permalink
chore(data/mv_polynomial/basic): generalize lemmas about evaluation a…
Browse files Browse the repository at this point in the history
…t zero (#15929)

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₂`.
  • Loading branch information
eric-wieser committed Aug 8, 2022
1 parent 1eb1aff commit c7963f4
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 11 deletions.
36 changes: 27 additions & 9 deletions src/data/mv_polynomial/basic.lean
Expand Up @@ -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 _ _ _ _
Expand Down
4 changes: 2 additions & 2 deletions src/ring_theory/witt_vector/structure_polynomial.lean
Expand Up @@ -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]

Expand Down

0 comments on commit c7963f4

Please sign in to comment.