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

Commit f69db8c

Browse files
committed
feat(data/mv_polynomial/basic): add and generalize some lemmas from finsupp and monoid_algebra (#18855)
Most of these changes generalize from `distrib_mul_action` to `smul_zero_class`. The new lemmas are all just proved using corresponding lemmas on the underlying types. Co-authored-by: Hagb (Junyu Guo 郭俊余) <hagb_green@qq.com>
1 parent ec45280 commit f69db8c

File tree

3 files changed

+28
-14
lines changed

3 files changed

+28
-14
lines changed

src/algebra/monoid_algebra/basic.lean

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,24 +1130,24 @@ instance [monoid R] [semiring k] [distrib_mul_action R k] :
11301130
distrib_mul_action R (add_monoid_algebra k G) :=
11311131
finsupp.distrib_mul_action G k
11321132

1133-
instance [monoid R] [semiring k] [distrib_mul_action R k] [has_faithful_smul R k] [nonempty G] :
1133+
instance [semiring k] [smul_zero_class R k] [has_faithful_smul R k] [nonempty G] :
11341134
has_faithful_smul R (add_monoid_algebra k G) :=
11351135
finsupp.has_faithful_smul
11361136

11371137
instance [semiring R] [semiring k] [module R k] : module R (add_monoid_algebra k G) :=
11381138
finsupp.module G k
11391139

1140-
instance [monoid R] [monoid S] [semiring k] [distrib_mul_action R k] [distrib_mul_action S k]
1140+
instance [semiring k] [smul_zero_class R k] [smul_zero_class S k]
11411141
[has_smul R S] [is_scalar_tower R S k] :
11421142
is_scalar_tower R S (add_monoid_algebra k G) :=
11431143
finsupp.is_scalar_tower G k
11441144

1145-
instance [monoid R] [monoid S] [semiring k] [distrib_mul_action R k] [distrib_mul_action S k]
1145+
instance [semiring k] [smul_zero_class R k] [smul_zero_class S k]
11461146
[smul_comm_class R S k] :
11471147
smul_comm_class R S (add_monoid_algebra k G) :=
11481148
finsupp.smul_comm_class G k
11491149

1150-
instance [monoid R] [semiring k] [distrib_mul_action R k] [distrib_mul_action Rᵐᵒᵖ k]
1150+
instance [semiring k] [smul_zero_class R k] [smul_zero_class Rᵐᵒᵖ k]
11511151
[is_central_scalar R k] :
11521152
is_central_scalar R (add_monoid_algebra k G) :=
11531153
finsupp.is_central_scalar G k

src/data/finsupp/basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1306,7 +1306,7 @@ instance [semiring R] [add_comm_monoid M] [module R M] : module R (α →₀ M)
13061306

13071307
variables {α M} {R}
13081308

1309-
lemma support_smul {_ : monoid R} [add_monoid M] [distrib_mul_action R M] {b : R} {g : α →₀ M} :
1309+
lemma support_smul [add_monoid M] [smul_zero_class R M] {b : R} {g : α →₀ M} :
13101310
(b • g).support ⊆ g.support :=
13111311
λ a, by { simp only [smul_apply, mem_support_iff, ne.def], exact mt (λ h, h.symm ▸ smul_zero _) }
13121312

src/data/mv_polynomial/basic.lean

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -102,24 +102,27 @@ instance [monoid R] [comm_semiring S₁] [distrib_mul_action R S₁] :
102102
distrib_mul_action R (mv_polynomial σ S₁) :=
103103
add_monoid_algebra.distrib_mul_action
104104

105-
instance [monoid R] [comm_semiring S₁] [distrib_mul_action R S₁] [has_faithful_smul R S₁] :
105+
instance [comm_semiring S₁] [smul_zero_class R S₁] : smul_zero_class R (mv_polynomial σ S₁) :=
106+
add_monoid_algebra.smul_zero_class
107+
108+
instance [comm_semiring S₁] [smul_zero_class R S₁] [has_faithful_smul R S₁] :
106109
has_faithful_smul R (mv_polynomial σ S₁) :=
107110
add_monoid_algebra.has_faithful_smul
108111

109112
instance [semiring R] [comm_semiring S₁] [module R S₁] : module R (mv_polynomial σ S₁) :=
110113
add_monoid_algebra.module
111114

112-
instance [monoid R] [monoid S₁] [comm_semiring S₂]
113-
[has_smul R S₁] [distrib_mul_action R S₂] [distrib_mul_action S₁ S₂] [is_scalar_tower R S₁ S₂] :
115+
instance [comm_semiring S₂]
116+
[has_smul R S₁] [smul_zero_class R S₂] [smul_zero_class S₁ S₂] [is_scalar_tower R S₁ S₂] :
114117
is_scalar_tower R S₁ (mv_polynomial σ S₂) :=
115118
add_monoid_algebra.is_scalar_tower
116119

117-
instance [monoid R] [monoid S₁][comm_semiring S₂]
118-
[distrib_mul_action R S₂] [distrib_mul_action S₁ S₂] [smul_comm_class R S₁ S₂] :
120+
instance [comm_semiring S₂]
121+
[smul_zero_class R S₂] [smul_zero_class S₁ S₂] [smul_comm_class R S₁ S₂] :
119122
smul_comm_class R S₁ (mv_polynomial σ S₂) :=
120123
add_monoid_algebra.smul_comm_class
121124

122-
instance [monoid R] [comm_semiring S₁] [distrib_mul_action R S₁] [distrib_mul_action Rᵐᵒᵖ S₁]
125+
instance [comm_semiring S₁] [smul_zero_class R S₁] [smul_zero_class Rᵐᵒᵖ S₁]
123126
[is_central_scalar R S₁] :
124127
is_central_scalar R (mv_polynomial σ S₁) :=
125128
add_monoid_algebra.is_central_scalar
@@ -218,6 +221,9 @@ lemma smul_eq_C_mul (p : mv_polynomial σ R) (a : R) : a • p = C a * p := C_mu
218221
lemma C_eq_smul_one : (C a : mv_polynomial σ R) = a • 1 :=
219222
by rw [← C_mul', mul_one]
220223

224+
lemma smul_monomial {S₁ : Type*} [smul_zero_class S₁ R] (r : S₁) :
225+
r • monomial s a = monomial s (r • a) := finsupp.smul_single _ _ _
226+
221227
lemma X_injective [nontrivial R] : function.injective (X : σ → mv_polynomial σ R) :=
222228
(monomial_left_injective one_ne_zero).comp (finsupp.single_left_injective one_ne_zero)
223229

@@ -422,7 +428,7 @@ by rw [X_pow_eq_monomial, support_monomial, if_neg (one_ne_zero' R)]
422428

423429
@[simp] lemma support_zero : (0 : mv_polynomial σ R).support = ∅ := rfl
424430

425-
lemma support_smul [distrib_mul_action R S₁] {a : R} {f : mv_polynomial σ S₁} :
431+
lemma support_smul {S₁ : Type*} [smul_zero_class S₁ R] {a : S₁} {f : mv_polynomial σ R} :
426432
(a • f).support ⊆ f.support :=
427433
finsupp.support_smul
428434

@@ -463,7 +469,7 @@ lemma ext_iff (p q : mv_polynomial σ R) :
463469
@[simp] lemma coeff_add (m : σ →₀ ℕ) (p q : mv_polynomial σ R) :
464470
coeff m (p + q) = coeff m p + coeff m q := add_apply p q m
465471

466-
@[simp] lemma coeff_smul {S₁ : Type*} [monoid S₁] [distrib_mul_action S₁ R]
472+
@[simp] lemma coeff_smul {S₁ : Type*} [smul_zero_class S₁ R]
467473
(m : σ →₀ ℕ) (c : S₁) (p : mv_polynomial σ R) :
468474
coeff m (c • p) = c • coeff m p := smul_apply c p m
469475

@@ -557,6 +563,10 @@ add_monoid_algebra.support_mul_single p _ (by simp) _
557563
(X s * p).support = p.support.map (add_left_embedding (single s 1)) :=
558564
add_monoid_algebra.support_single_mul p _ (by simp) _
559565

566+
@[simp] lemma support_smul_eq {S₁ : Type*} [semiring S₁] [module S₁ R] [no_zero_smul_divisors S₁ R]
567+
{a : S₁} (h : a ≠ 0) (p : mv_polynomial σ R) : (a • p).support = p.support :=
568+
finsupp.support_smul_eq h
569+
560570
lemma support_sdiff_support_subset_support_add [decidable_eq σ] (p q : mv_polynomial σ R) :
561571
p.support \ q.support ⊆ (p + q).support :=
562572
begin
@@ -626,6 +636,9 @@ lemma ne_zero_iff {p : mv_polynomial σ R} :
626636
p ≠ 0 ↔ ∃ d, coeff d p ≠ 0 :=
627637
by { rw [ne.def, eq_zero_iff], push_neg, }
628638

639+
@[simp] lemma support_eq_empty {p : mv_polynomial σ R} : p.support = ∅ ↔ p = 0 :=
640+
finsupp.support_eq_empty
641+
629642
lemma exists_coeff_ne_zero {p : mv_polynomial σ R} (h : p ≠ 0) :
630643
∃ d, coeff d p ≠ 0 :=
631644
ne_zero_iff.mp h
@@ -675,7 +688,8 @@ variables (R)
675688
by simp [constant_coeff_eq]
676689
variables {R}
677690

678-
@[simp] lemma constant_coeff_smul [distrib_mul_action R S₁] (a : R) (f : mv_polynomial σ S₁) :
691+
@[simp] lemma constant_coeff_smul {R : Type*} [smul_zero_class R S₁]
692+
(a : R) (f : mv_polynomial σ S₁) :
679693
constant_coeff (a • f) = a • constant_coeff f := rfl
680694

681695
lemma constant_coeff_monomial [decidable_eq σ] (d : σ →₀ ℕ) (r : R) :

0 commit comments

Comments
 (0)