Skip to content
Closed
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
b4f9cfa
Update Basic.lean
BryceT233 Mar 12, 2026
68a0821
Update Antidiagonal.lean
BryceT233 Mar 12, 2026
99673c7
Update Option.lean
BryceT233 Mar 12, 2026
48f6fb6
Update Option.lean
BryceT233 Mar 12, 2026
0bc3868
Update Basic.lean
BryceT233 Mar 15, 2026
4cef804
Merge branch 'leanprover-community:master' into MvPowerSeries_Equiv_prep
BryceT233 Mar 15, 2026
e40238f
Update Basic.lean
BryceT233 Mar 15, 2026
84340f0
Merge branch 'leanprover-community:master' into MvPowerSeries_Equiv_prep
BryceT233 Mar 23, 2026
74bf0ef
fix
BryceT233 Mar 23, 2026
21959ee
fix
BryceT233 Mar 23, 2026
08b3dca
apply suggestions
BryceT233 Mar 27, 2026
a82c3b2
Apply suggestions from code review
BryceT233 Mar 27, 2026
38170e7
fix
BryceT233 Mar 27, 2026
9342d42
fix
BryceT233 Mar 27, 2026
5a319ba
fix
BryceT233 Mar 27, 2026
99df4b2
Merge branch 'leanprover-community:master' into MvPowerSeries_Equiv_prep
BryceT233 Mar 27, 2026
ae7823f
Update Basic.lean
BryceT233 Mar 29, 2026
091894a
Update Option.lean
BryceT233 Mar 29, 2026
ff9a3b4
test
BryceT233 Mar 30, 2026
74570e1
Merge branch 'leanprover-community:master' into MvPowerSeries_Equiv_prep
BryceT233 Mar 30, 2026
2937e66
test
BryceT233 Mar 30, 2026
0365345
test
BryceT233 Mar 30, 2026
8a47bbe
test
BryceT233 Mar 30, 2026
e7c6165
test
BryceT233 Mar 31, 2026
4598ceb
test
BryceT233 Mar 31, 2026
b399c57
Merge branch 'leanprover-community:master' into MvPowerSeries_Equiv_prep
BryceT233 Mar 31, 2026
0d8df65
Add files via upload
BryceT233 Apr 1, 2026
c538dad
Update Basic.lean
BryceT233 Apr 1, 2026
78b287c
Update Option.lean
BryceT233 Apr 1, 2026
605092f
Merge branch 'leanprover-community:master' into MvPowerSeries_Equiv_prep
BryceT233 Apr 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions Mathlib/Data/Finsupp/Antidiagonal.lean
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,19 @@ theorem image_prodMap_embDomain_antidiagonal {β : Type*} [DecidableEq β] (f :
· rw [embDomain_comapDomain ((mem_range_embDomain_iff ..).mp
(isLowerSet_range_embDomain f (le_iff_exists_add'.mpr ⟨u, h.symm⟩) (by simp)))]

open Finset in
theorem image_sumElim_product_antidiagonal {β : Type*} [DecidableEq β]
{x : α →₀ ℕ} {y : β →₀ ℕ} : image (fun ((x, y), z, w) ↦
(x.sumElim z, y.sumElim w)) (antidiagonal x ×ˢ antidiagonal y) =
antidiagonal (x.sumElim y) := by
symm; ext ⟨u, v⟩
simp only [mem_antidiagonal, mem_image, mem_product, Prod.mk.injEq, Prod.exists]
refine ⟨fun h ↦ ⟨u.comapDomain Sum.inl Sum.inl_injective.injOn,
v.comapDomain Sum.inl Sum.inl_injective.injOn, u.comapDomain Sum.inr Sum.inr_injective.injOn,
v.comapDomain Sum.inr Sum.inr_injective.injOn, ⟨?_, ?_⟩, comapDomain_sumElim_comapDomain ..,
comapDomain_sumElim_comapDomain ..⟩, fun ⟨a, b, a', b', h1, h2, h3⟩ ↦ ?_⟩
· rw [← comapDomain_add_of_injective Sum.inl_injective, h, comapDomain_sumInl_sumElim]
· rw [← comapDomain_add_of_injective Sum.inr_injective, h, comapDomain_sumInr_sumElim]
rw [← h2, ← h3, sumElim_add, h1.left, h1.right]

end Finsupp
34 changes: 34 additions & 0 deletions Mathlib/Data/Finsupp/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -1041,6 +1041,40 @@ lemma prod_sumElim {ι₁ ι₂ α M : Type*} [Zero α] [CommMonoid M]
(f₁.sumElim f₂).prod g = f₁.prod (g ∘ Sum.inl) * f₂.prod (g ∘ Sum.inr) := by
simp [Finsupp.prod, Finset.prod_disjSum]

@[simp]
lemma comapDomain_sumInl_sumElim (f : α →₀ γ) (g : β →₀ γ) :
comapDomain Sum.inl (f.sumElim g) Sum.inl_injective.injOn = f := by
ext; simp

@[simp]
lemma comapDomain_sumInr_sumElim (f : α →₀ γ) (g : β →₀ γ) :
comapDomain Sum.inr (f.sumElim g) Sum.inr_injective.injOn = g := by
ext; simp

@[simp]
lemma embDomain_embeddingInr (b : β →₀ γ) :
embDomain Function.Embedding.inr b = sumElim (0 : α →₀ γ) b := by
ext (_ | _)
· simp [embDomain_notin_range]
· rw [coe_sumElim, coe_zero, Sum.elim_inr, ← Function.Embedding.inr_apply, embDomain_apply_self]

@[simp]
lemma embDomain_embeddingInl (a : α →₀ γ) :
embDomain Function.Embedding.inl a = sumElim a (0 : β →₀ γ) := by
ext (_ | _)
· rw [coe_sumElim, coe_zero, Sum.elim_inl, ← Function.Embedding.inl_apply, embDomain_apply_self]
· simp [embDomain_notin_range]

@[simp]
lemma comapDomain_sumElim_comapDomain (c : α ⊕ β →₀ γ) :
(comapDomain Sum.inl c Sum.inl_injective.injOn).sumElim
(comapDomain Sum.inr c Sum.inr_injective.injOn) = c := by
ext (_ | _) <;> simp

lemma sumElim_add [AddZeroClass M] (a b : α →₀ M) (c d : β →₀ M) :
a.sumElim c + b.sumElim d = (a + b).sumElim (c + d) := by
ext (_ | _) <;> simp

/-- The equivalence between `(α ⊕ β) →₀ γ` and `(α →₀ γ) × (β →₀ γ)`.

This is the `Finsupp` version of `Equiv.sum_arrow_equiv_prod_arrow`. -/
Expand Down
4 changes: 4 additions & 0 deletions Mathlib/Data/Finsupp/Option.lean
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,10 @@ theorem sum_option_index_smul [Semiring R] [AddCommMonoid M] [Module R M] (f : O
(f.sum fun o r => r • b o) = f none • b none + f.some.sum fun a r => r • b (Option.some a) :=
f.sum_option_index _ (fun _ => zero_smul _ _) fun _ _ _ => add_smul _ _ _

lemma optionElim_add [AddZeroClass M] (a b : α →₀ M) (i j : M) :
a.optionElim i + b.optionElim j = (a + b).optionElim (i + j) := by
ext x; cases x <;> simp

end Option

end Finsupp
Loading