Skip to content

Commit 2016a40

Browse files
committed
feat: When Finsupp.prod is nonzero (#8844)
Also replace `Finsupp.nonzero_iff_exists` by a more general lemma.
1 parent 1003870 commit 2016a40

File tree

7 files changed

+86
-67
lines changed

7 files changed

+86
-67
lines changed

Mathlib/Algebra/BigOperators/Finsupp.lean

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,15 @@ theorem prod_eq_single {f : α →₀ M} (a : α) {g : α → M → N}
224224

225225
end SumProd
226226

227+
section CommMonoidWithZero
228+
variable [Zero α] [CommMonoidWithZero β] [Nontrivial β] [NoZeroDivisors β]
229+
{f : ι →₀ α} (a : α) {g : ι → α → β}
230+
231+
@[simp]
232+
lemma prod_eq_zero_iff : f.prod g = 0 ↔ ∃ i ∈ f.support, g i (f i) = 0 := Finset.prod_eq_zero_iff
233+
lemma prod_ne_zero_iff : f.prod g ≠ 0 ↔ ∀ i ∈ f.support, g i (f i) ≠ 0 := Finset.prod_ne_zero_iff
234+
235+
end CommMonoidWithZero
227236
end Finsupp
228237

229238
@[to_additive]

Mathlib/Data/DFinsupp/Basic.lean

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ theorem ext_iff {f g : Π₀ i, β i} : f = g ↔ ∀ i, f i = g i :=
109109
FunLike.ext_iff
110110
#align dfinsupp.ext_iff DFinsupp.ext_iff
111111

112+
lemma ne_iff {f g : Π₀ i, β i} : f ≠ g ↔ ∃ i, f i ≠ g i := FunLike.ne_iff
113+
112114
@[deprecated FunLike.coe_injective]
113115
theorem coeFn_injective : @Function.Injective (Π₀ i, β i) (∀ i, β i) (⇑) :=
114116
FunLike.coe_injective
@@ -120,14 +122,10 @@ instance : Zero (Π₀ i, β i) :=
120122
instance : Inhabited (Π₀ i, β i) :=
121123
0
122124

123-
@[simp]
124-
theorem coe_mk' (f : ∀ i, β i) (s) : ⇑(⟨f, s⟩ : Π₀ i, β i) = f :=
125-
rfl
125+
@[simp, norm_cast] lemma coe_mk' (f : ∀ i, β i) (s) : ⇑(⟨f, s⟩ : Π₀ i, β i) = f := rfl
126126
#align dfinsupp.coe_mk' DFinsupp.coe_mk'
127127

128-
@[simp]
129-
theorem coe_zero : ⇑(0 : Π₀ i, β i) = 0 :=
130-
rfl
128+
@[simp, norm_cast] lemma coe_zero : ⇑(0 : Π₀ i, β i) = 0 := rfl
131129
#align dfinsupp.coe_zero DFinsupp.coe_zero
132130

133131
theorem zero_apply (i : ι) : (0 : Π₀ i, β i) i = 0 :=
@@ -239,7 +237,7 @@ theorem add_apply [∀ i, AddZeroClass (β i)] (g₁ g₂ : Π₀ i, β i) (i :
239237
rfl
240238
#align dfinsupp.add_apply DFinsupp.add_apply
241239

242-
@[simp]
240+
@[simp, norm_cast]
243241
theorem coe_add [∀ i, AddZeroClass (β i)] (g₁ g₂ : Π₀ i, β i) : ⇑(g₁ + g₂) = g₁ + g₂ :=
244242
rfl
245243
#align dfinsupp.coe_add DFinsupp.coe_add
@@ -268,7 +266,7 @@ theorem nsmul_apply [∀ i, AddMonoid (β i)] (b : ℕ) (v : Π₀ i, β i) (i :
268266
rfl
269267
#align dfinsupp.nsmul_apply DFinsupp.nsmul_apply
270268

271-
@[simp]
269+
@[simp, norm_cast]
272270
theorem coe_nsmul [∀ i, AddMonoid (β i)] (b : ℕ) (v : Π₀ i, β i) : ⇑(b • v) = b • ⇑v :=
273271
rfl
274272
#align dfinsupp.coe_nsmul DFinsupp.coe_nsmul
@@ -293,7 +291,7 @@ def evalAddMonoidHom [∀ i, AddZeroClass (β i)] (i : ι) : (Π₀ i, β i) →
293291
instance addCommMonoid [∀ i, AddCommMonoid (β i)] : AddCommMonoid (Π₀ i, β i) :=
294292
FunLike.coe_injective.addCommMonoid _ coe_zero coe_add fun _ _ => coe_nsmul _ _
295293

296-
@[simp]
294+
@[simp, norm_cast]
297295
theorem coe_finset_sum {α} [∀ i, AddCommMonoid (β i)] (s : Finset α) (g : α → Π₀ i, β i) :
298296
⇑(∑ a in s, g a) = ∑ a in s, ⇑(g a) :=
299297
map_sum coeFnAddMonoidHom g s
@@ -312,9 +310,7 @@ theorem neg_apply [∀ i, AddGroup (β i)] (g : Π₀ i, β i) (i : ι) : (-g) i
312310
rfl
313311
#align dfinsupp.neg_apply DFinsupp.neg_apply
314312

315-
@[simp]
316-
theorem coe_neg [∀ i, AddGroup (β i)] (g : Π₀ i, β i) : ⇑(-g) = -g :=
317-
rfl
313+
@[simp, norm_cast] lemma coe_neg [∀ i, AddGroup (β i)] (g : Π₀ i, β i) : ⇑(-g) = -g := rfl
318314
#align dfinsupp.coe_neg DFinsupp.coe_neg
319315

320316
instance [∀ i, AddGroup (β i)] : Sub (Π₀ i, β i) :=
@@ -324,7 +320,7 @@ theorem sub_apply [∀ i, AddGroup (β i)] (g₁ g₂ : Π₀ i, β i) (i : ι)
324320
rfl
325321
#align dfinsupp.sub_apply DFinsupp.sub_apply
326322

327-
@[simp]
323+
@[simp, norm_cast]
328324
theorem coe_sub [∀ i, AddGroup (β i)] (g₁ g₂ : Π₀ i, β i) : ⇑(g₁ - g₂) = g₁ - g₂ :=
329325
rfl
330326
#align dfinsupp.coe_sub DFinsupp.coe_sub
@@ -339,7 +335,7 @@ theorem zsmul_apply [∀ i, AddGroup (β i)] (b : ℤ) (v : Π₀ i, β i) (i :
339335
rfl
340336
#align dfinsupp.zsmul_apply DFinsupp.zsmul_apply
341337

342-
@[simp]
338+
@[simp, norm_cast]
343339
theorem coe_zsmul [∀ i, AddGroup (β i)] (b : ℤ) (v : Π₀ i, β i) : ⇑(b • v) = b • ⇑v :=
344340
rfl
345341
#align dfinsupp.coe_zsmul DFinsupp.coe_zsmul
@@ -362,7 +358,7 @@ theorem smul_apply [Monoid γ] [∀ i, AddMonoid (β i)] [∀ i, DistribMulActio
362358
rfl
363359
#align dfinsupp.smul_apply DFinsupp.smul_apply
364360

365-
@[simp]
361+
@[simp, norm_cast]
366362
theorem coe_smul [Monoid γ] [∀ i, AddMonoid (β i)] [∀ i, DistribMulAction γ (β i)] (b : γ)
367363
(v : Π₀ i, β i) : ⇑(b • v) = b • ⇑v :=
368364
rfl
@@ -850,9 +846,7 @@ def update : Π₀ i, β i :=
850846

851847
variable (j : ι)
852848

853-
@[simp]
854-
theorem coe_update : (f.update i b : ∀ i : ι, β i) = Function.update f i b :=
855-
rfl
849+
@[simp, norm_cast] lemma coe_update : (f.update i b : ∀ i : ι, β i) = Function.update f i b := rfl
856850
#align dfinsupp.coe_update DFinsupp.coe_update
857851

858852
@[simp]
@@ -1893,6 +1887,16 @@ theorem prod_eq_prod_fintype [Fintype ι] [∀ i, Zero (β i)] [∀ (i : ι) (x
18931887
#align dfinsupp.prod_eq_prod_fintype DFinsupp.prod_eq_prod_fintype
18941888
#align dfinsupp.sum_eq_sum_fintype DFinsupp.sum_eq_sum_fintype
18951889

1890+
section CommMonoidWithZero
1891+
variable [Π i, Zero (β i)] [CommMonoidWithZero γ] [Nontrivial γ] [NoZeroDivisors γ]
1892+
[Π i, DecidableEq (β i)] {f : Π₀ i, β i} {g : Π i, β i → γ}
1893+
1894+
@[simp]
1895+
lemma prod_eq_zero_iff : f.prod g = 0 ↔ ∃ i ∈ f.support, g i (f i) = 0 := Finset.prod_eq_zero_iff
1896+
lemma prod_ne_zero_iff : f.prod g ≠ 0 ↔ ∀ i ∈ f.support, g i (f i) ≠ 0 := Finset.prod_ne_zero_iff
1897+
1898+
end CommMonoidWithZero
1899+
18961900
/--
18971901
When summing over an `AddMonoidHom`, the decidability assumption is not needed, and the result is
18981902
also an `AddMonoidHom`.
@@ -2281,14 +2285,14 @@ variable [∀ i, Zero (β i)] [∀ (i) (x : β i), Decidable (x ≠ 0)]
22812285
#align monoid_hom.map_dfinsupp_prod map_dfinsupp_prodₓ
22822286
#align add_monoid_hom.map_dfinsupp_sum map_dfinsupp_sumₓ
22832287

2284-
@[to_additive]
2288+
@[to_additive (attr := simp, norm_cast)]
22852289
theorem coe_dfinsupp_prod [Monoid R] [CommMonoid S] (f : Π₀ i, β i) (g : ∀ i, β i → R →* S) :
22862290
⇑(f.prod g) = f.prod fun a b => ⇑(g a b) :=
22872291
coe_finset_prod _ _
22882292
#align monoid_hom.coe_dfinsupp_prod MonoidHom.coe_dfinsupp_prod
22892293
#align add_monoid_hom.coe_dfinsupp_sum AddMonoidHom.coe_dfinsupp_sum
22902294

2291-
@[to_additive (attr := simp)]
2295+
@[to_additive]
22922296
theorem dfinsupp_prod_apply [Monoid R] [CommMonoid S] (f : Π₀ i, β i) (g : ∀ i, β i → R →* S)
22932297
(r : R) : (f.prod g) r = f.prod fun a b => (g a b) r :=
22942298
finset_prod_apply _ _ _
@@ -2318,13 +2322,13 @@ theorem map_dfinsupp_sumAddHom [AddCommMonoid R] [AddCommMonoid S] [∀ i, AddZe
23182322
FunLike.congr_fun (comp_liftAddHom h g) f
23192323
#align add_monoid_hom.map_dfinsupp_sum_add_hom AddMonoidHom.map_dfinsupp_sumAddHom
23202324

2321-
@[simp]
23222325
theorem dfinsupp_sumAddHom_apply [AddZeroClass R] [AddCommMonoid S] [∀ i, AddZeroClass (β i)]
23232326
(f : Π₀ i, β i) (g : ∀ i, β i →+ R →+ S) (r : R) :
23242327
(sumAddHom g f) r = sumAddHom (fun i => (eval r).comp (g i)) f :=
23252328
map_dfinsupp_sumAddHom (eval r) f g
23262329
#align add_monoid_hom.dfinsupp_sum_add_hom_apply AddMonoidHom.dfinsupp_sumAddHom_apply
23272330

2331+
@[simp, norm_cast]
23282332
theorem coe_dfinsupp_sumAddHom [AddZeroClass R] [AddCommMonoid S] [∀ i, AddZeroClass (β i)]
23292333
(f : Π₀ i, β i) (g : ∀ i, β i →+ R →+ S) :
23302334
⇑(sumAddHom g f) = sumAddHom (fun i => (coeFn R S).comp (g i)) f :=

Mathlib/Data/DFinsupp/Order.lean

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,25 +34,27 @@ section Zero
3434
variable [∀ i, Zero (α i)]
3535

3636
section LE
37-
38-
variable [∀ i, LE (α i)]
37+
variable [∀ i, LE (α i)] {f g : Π₀ i, α i}
3938

4039
instance : LE (Π₀ i, α i) :=
4140
fun f g ↦ ∀ i, f i ≤ g i⟩
4241

43-
theorem le_def {f g : Π₀ i, α i} : f ≤ g ↔ ∀ i, f i ≤ g i :=
44-
Iff.rfl
42+
lemma le_def : f ≤ g ↔ ∀ i, f i ≤ g i := Iff.rfl
4543
#align dfinsupp.le_def DFinsupp.le_def
4644

45+
@[simp, norm_cast] lemma coe_le_coe : ⇑f ≤ g ↔ f ≤ g := Iff.rfl
46+
4747
/-- The order on `DFinsupp`s over a partial order embeds into the order on functions -/
4848
def orderEmbeddingToFun : (Π₀ i, α i) ↪o ∀ i, α i where
4949
toFun := FunLike.coe
5050
inj' := FunLike.coe_injective
5151
map_rel_iff' := by rfl
5252
#align dfinsupp.order_embedding_to_fun DFinsupp.orderEmbeddingToFun
5353

54+
@[simp, norm_cast]
55+
lemma coe_orderEmbeddingToFun : ⇑(orderEmbeddingToFun (α := α)) = FunLike.coe := rfl
56+
5457
-- Porting note: we added implicit arguments here in #3414.
55-
@[simp]
5658
theorem orderEmbeddingToFun_apply {f : Π₀ i, α i} {i : ι} :
5759
(@orderEmbeddingToFun ι α _ _ f) i = f i :=
5860
rfl
@@ -61,16 +63,20 @@ theorem orderEmbeddingToFun_apply {f : Π₀ i, α i} {i : ι} :
6163
end LE
6264

6365
section Preorder
64-
65-
variable [∀ i, Preorder (α i)]
66+
variable [∀ i, Preorder (α i)] {f g : Π₀ i, α i}
6667

6768
instance : Preorder (Π₀ i, α i) :=
6869
{ (inferInstance : LE (DFinsupp α)) with
6970
le_refl := fun f i ↦ le_rfl
7071
le_trans := fun f g h hfg hgh i ↦ (hfg i).trans (hgh i) }
7172

72-
theorem coeFn_mono : Monotone (FunLike.coe : (Π₀ i, α i) → ∀ i, α i) := fun _ _ ↦ le_def.1
73-
#align dfinsupp.coe_fn_mono DFinsupp.coeFn_mono
73+
lemma lt_def : f < g ↔ f ≤ g ∧ ∃ i, f i < g i := Pi.lt_def
74+
@[simp, norm_cast] lemma coe_lt_coe : ⇑f < g ↔ f < g := Iff.rfl
75+
76+
lemma coe_mono : Monotone ((⇑) : (Π₀ i, α i) → ∀ i, α i) := fun _ _ ↦ id
77+
#align dfinsupp.coe_fn_mono DFinsupp.coe_mono
78+
79+
lemma coe_strictMono : Monotone ((⇑) : (Π₀ i, α i) → ∀ i, α i) := fun _ _ ↦ id
7480

7581
end Preorder
7682

@@ -85,7 +91,9 @@ instance [∀ i, SemilatticeInf (α i)] : SemilatticeInf (Π₀ i, α i) :=
8591
inf_le_right := fun _ _ _ ↦ inf_le_right
8692
le_inf := fun _ _ _ hf hg i ↦ le_inf (hf i) (hg i) }
8793

88-
@[simp]
94+
@[simp, norm_cast]
95+
lemma coe_inf [∀ i, SemilatticeInf (α i)] (f g : Π₀ i, α i) : f ⊓ g = ⇑f ⊓ g := rfl
96+
8997
theorem inf_apply [∀ i, SemilatticeInf (α i)] (f g : Π₀ i, α i) (i : ι) : (f ⊓ g) i = f i ⊓ g i :=
9098
zipWith_apply _ _ _ _ _
9199
#align dfinsupp.inf_apply DFinsupp.inf_apply
@@ -97,7 +105,9 @@ instance [∀ i, SemilatticeSup (α i)] : SemilatticeSup (Π₀ i, α i) :=
97105
le_sup_right := fun _ _ _ ↦ le_sup_right
98106
sup_le := fun _ _ _ hf hg i ↦ sup_le (hf i) (hg i) }
99107

100-
@[simp]
108+
@[simp, norm_cast]
109+
lemma coe_sup [∀ i, SemilatticeSup (α i)] (f g : Π₀ i, α i) : f ⊔ g = ⇑f ⊔ g := rfl
110+
101111
theorem sup_apply [∀ i, SemilatticeSup (α i)] (f g : Π₀ i, α i) (i : ι) : (f ⊔ g) i = f i ⊔ g i :=
102112
zipWith_apply _ _ _ _ _
103113
#align dfinsupp.sup_apply DFinsupp.sup_apply
@@ -210,7 +220,7 @@ theorem tsub_apply (f g : Π₀ i, α i) (i : ι) : (f - g) i = f i - g i :=
210220
zipWith_apply _ _ _ _ _
211221
#align dfinsupp.tsub_apply DFinsupp.tsub_apply
212222

213-
@[simp]
223+
@[simp, norm_cast]
214224
theorem coe_tsub (f g : Π₀ i, α i) : ⇑(f - g) = f - g := by
215225
ext i
216226
exact tsub_apply f g i

Mathlib/Data/Finsupp/Basic.lean

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1300,7 +1300,7 @@ def sumElim {α β γ : Type*} [Zero γ] (f : α →₀ γ) (g : β →₀ γ) :
13001300
simpa
13011301
#align finsupp.sum_elim Finsupp.sumElim
13021302

1303-
@[simp]
1303+
@[simp, norm_cast]
13041304
theorem coe_sumElim {α β γ : Type*} [Zero γ] (f : α →₀ γ) (g : β →₀ γ) :
13051305
⇑(sumElim f g) = Sum.elim f g :=
13061306
rfl
@@ -1485,7 +1485,7 @@ Throughout this section, some `Monoid` and `Semiring` arguments are specified wi
14851485
`[]`. See note [implicit instance arguments].
14861486
-/
14871487

1488-
@[simp]
1488+
@[simp, norm_cast]
14891489
theorem coe_smul [Zero M] [SMulZeroClass R M] (b : R) (v : α →₀ M) : ⇑(b • v) = b • ⇑v :=
14901490
rfl
14911491
#align finsupp.coe_smul Finsupp.coe_smul
@@ -1507,6 +1507,9 @@ instance faithfulSMul [Nonempty α] [Zero M] [SMulZeroClass R M] [FaithfulSMul R
15071507
eq_of_smul_eq_smul fun m : M => by simpa using FunLike.congr_fun (h (single a m)) a
15081508
#align finsupp.faithful_smul Finsupp.faithfulSMul
15091509

1510+
instance instSMulWithZero [Zero R] [Zero M] [SMulWithZero R M] : SMulWithZero R (α →₀ M) where
1511+
zero_smul f := by ext i; exact zero_smul _ _
1512+
15101513
variable (α M)
15111514

15121515
instance distribSMul [AddZeroClass M] [DistribSMul R M] : DistribSMul R (α →₀ M) where

Mathlib/Data/Finsupp/Defs.lean

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ theorem ext_iff {f g : α →₀ M} : f = g ↔ ∀ a, f a = g a :=
140140
FunLike.ext_iff
141141
#align finsupp.ext_iff Finsupp.ext_iff
142142

143+
lemma ne_iff {f g : α →₀ M} : f ≠ g ↔ ∃ a, f a ≠ g a := FunLike.ne_iff
144+
143145
@[deprecated FunLike.coe_fn_eq]
144146
theorem coeFn_inj {f g : α →₀ M} : (f : α → M) = g ↔ f = g :=
145147
FunLike.coe_fn_eq
@@ -155,7 +157,7 @@ theorem congr_fun {f g : α →₀ M} (h : f = g) (a : α) : f a = g a :=
155157
FunLike.congr_fun h _
156158
#align finsupp.congr_fun Finsupp.congr_fun
157159

158-
@[simp]
160+
@[simp, norm_cast]
159161
theorem coe_mk (f : α → M) (s : Finset α) (h : ∀ a, a ∈ s ↔ f a ≠ 0) : ⇑(⟨s, f, h⟩ : α →₀ M) = f :=
160162
rfl
161163
#align finsupp.coe_mk Finsupp.coe_mk
@@ -164,9 +166,7 @@ instance zero : Zero (α →₀ M) :=
164166
⟨⟨∅, 0, fun _ => ⟨fun h ↦ (not_mem_empty _ h).elim, fun H => (H rfl).elim⟩⟩⟩
165167
#align finsupp.has_zero Finsupp.zero
166168

167-
@[simp]
168-
theorem coe_zero : ⇑(0 : α →₀ M) = 0 :=
169-
rfl
169+
@[simp, norm_cast] lemma coe_zero : ⇑(0 : α →₀ M) = 0 := rfl
170170
#align finsupp.coe_zero Finsupp.coe_zero
171171

172172
theorem zero_apply {a : α} : (0 : α →₀ M) a = 0 :=
@@ -219,9 +219,7 @@ theorem support_nonempty_iff {f : α →₀ M} : f.support.Nonempty ↔ f ≠ 0
219219
simp only [Finsupp.support_eq_empty, Finset.nonempty_iff_ne_empty, Ne.def]
220220
#align finsupp.support_nonempty_iff Finsupp.support_nonempty_iff
221221

222-
theorem nonzero_iff_exists {f : α →₀ M} : f ≠ 0 ↔ ∃ a : α, f a ≠ 0 := by
223-
simp [← Finsupp.support_eq_empty, Finset.eq_empty_iff_forall_not_mem]
224-
#align finsupp.nonzero_iff_exists Finsupp.nonzero_iff_exists
222+
#align finsupp.nonzero_iff_exists Finsupp.ne_iff
225223

226224
theorem card_support_eq_zero {f : α →₀ M} : card f.support = 0 ↔ f = 0 := by simp
227225
#align finsupp.card_support_eq_zero Finsupp.card_support_eq_zero
@@ -556,7 +554,7 @@ def update (f : α →₀ M) (a : α) (b : M) : α →₀ M where
556554
simp [ha]
557555
#align finsupp.update Finsupp.update
558556

559-
@[simp]
557+
@[simp, norm_cast]
560558
theorem coe_update [DecidableEq α] : (f.update a b : α → M) = Function.update f a b := by
561559
delta update Function.update
562560
ext
@@ -977,9 +975,7 @@ instance add : Add (α →₀ M) :=
977975
⟨zipWith (· + ·) (add_zero 0)⟩
978976
#align finsupp.has_add Finsupp.add
979977

980-
@[simp]
981-
theorem coe_add (f g : α →₀ M) : ⇑(f + g) = f + g :=
982-
rfl
978+
@[simp, norm_cast] lemma coe_add (f g : α →₀ M) : ⇑(f + g) = f + g := rfl
983979
#align finsupp.coe_add Finsupp.coe_add
984980

985981
theorem add_apply (g₁ g₂ : α →₀ M) (a : α) : (g₁ + g₂) a = g₁ a + g₂ a :=
@@ -1237,9 +1233,7 @@ instance neg [NegZeroClass G] : Neg (α →₀ G) :=
12371233
⟨mapRange Neg.neg neg_zero⟩
12381234
#align finsupp.has_neg Finsupp.neg
12391235

1240-
@[simp]
1241-
theorem coe_neg [NegZeroClass G] (g : α →₀ G) : ⇑(-g) = -g :=
1242-
rfl
1236+
@[simp, norm_cast] lemma coe_neg [NegZeroClass G] (g : α →₀ G) : ⇑(-g) = -g := rfl
12431237
#align finsupp.coe_neg Finsupp.coe_neg
12441238

12451239
theorem neg_apply [NegZeroClass G] (g : α →₀ G) (a : α) : (-g) a = -g a :=
@@ -1260,9 +1254,7 @@ instance sub [SubNegZeroMonoid G] : Sub (α →₀ G) :=
12601254
⟨zipWith Sub.sub (sub_zero _)⟩
12611255
#align finsupp.has_sub Finsupp.sub
12621256

1263-
@[simp]
1264-
theorem coe_sub [SubNegZeroMonoid G] (g₁ g₂ : α →₀ G) : ⇑(g₁ - g₂) = g₁ - g₂ :=
1265-
rfl
1257+
@[simp, norm_cast] lemma coe_sub [SubNegZeroMonoid G] (g₁ g₂ : α →₀ G) : ⇑(g₁ - g₂) = g₁ - g₂ := rfl
12661258
#align finsupp.coe_sub Finsupp.coe_sub
12671259

12681260
theorem sub_apply [SubNegZeroMonoid G] (g₁ g₂ : α →₀ G) (a : α) : (g₁ - g₂) a = g₁ a - g₂ a :=

0 commit comments

Comments
 (0)