-
Notifications
You must be signed in to change notification settings - Fork 347
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore(Data/Finsupp): split off extensionality from
Defs.lean
These results depend on `Submonoid`, while nothing else in `Finsupp` does. So let's move them to their own file.
- Loading branch information
1 parent
6d297a4
commit c571ad9
Showing
4 changed files
with
74 additions
and
45 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
/- | ||
Copyright (c) 2017 Johannes Hölzl. All rights reserved. | ||
Released under Apache 2.0 license as described in the file LICENSE. | ||
Authors: Johannes Hölzl, Kim Morrison | ||
-/ | ||
import Mathlib.Algebra.Group.Submonoid.Basic | ||
import Mathlib.Data.Finsupp.Defs | ||
|
||
/-! | ||
# Extensionality for maps on `Finsupp` | ||
This file contains some extensionality principles for maps on `Finsupp`. | ||
These have been moved to their own file to avoid depending on submonoids when defining `Finsupp`. | ||
## Main results | ||
* `Finsupp.add_closure_setOf_eq_single`: `Finsupp` is generated by all the `single`s | ||
* `Finsupp.addHom_ext`: additive homomorphisms that are equal on each `single` are equal everywhere | ||
-/ | ||
|
||
variable {α M N : Type*} | ||
|
||
namespace Finsupp | ||
|
||
variable [AddZeroClass M] | ||
|
||
@[simp] | ||
theorem add_closure_setOf_eq_single : | ||
AddSubmonoid.closure { f : α →₀ M | ∃ a b, f = single a b } = ⊤ := | ||
top_unique fun x _hx => | ||
Finsupp.induction x (AddSubmonoid.zero_mem _) fun a b _f _ha _hb hf => | ||
AddSubmonoid.add_mem _ (AddSubmonoid.subset_closure <| ⟨a, b, rfl⟩) hf | ||
|
||
/-- If two additive homomorphisms from `α →₀ M` are equal on each `single a b`, | ||
then they are equal. -/ | ||
theorem addHom_ext [AddZeroClass N] ⦃f g : (α →₀ M) →+ N⦄ | ||
(H : ∀ x y, f (single x y) = g (single x y)) : f = g := by | ||
refine AddMonoidHom.eq_of_eqOn_denseM add_closure_setOf_eq_single ?_ | ||
rintro _ ⟨x, y, rfl⟩ | ||
apply H | ||
|
||
/-- If two additive homomorphisms from `α →₀ M` are equal on each `single a b`, | ||
then they are equal. | ||
We formulate this using equality of `AddMonoidHom`s so that `ext` tactic can apply a type-specific | ||
extensionality lemma after this one. E.g., if the fiber `M` is `ℕ` or `ℤ`, then it suffices to | ||
verify `f (single a 1) = g (single a 1)`. -/ | ||
@[ext high] | ||
theorem addHom_ext' [AddZeroClass N] ⦃f g : (α →₀ M) →+ N⦄ | ||
(H : ∀ x, f.comp (singleAddHom x) = g.comp (singleAddHom x)) : f = g := | ||
addHom_ext fun x => DFunLike.congr_fun (H x) | ||
|
||
theorem mulHom_ext [MulOneClass N] ⦃f g : Multiplicative (α →₀ M) →* N⦄ | ||
(H : ∀ x y, f (Multiplicative.ofAdd <| single x y) = g (Multiplicative.ofAdd <| single x y)) : | ||
f = g := | ||
MonoidHom.ext <| | ||
DFunLike.congr_fun <| by | ||
have := @addHom_ext α M (Additive N) _ _ | ||
(MonoidHom.toAdditive'' f) (MonoidHom.toAdditive'' g) H | ||
ext | ||
rw [DFunLike.ext_iff] at this | ||
apply this | ||
|
||
@[ext] | ||
theorem mulHom_ext' [MulOneClass N] {f g : Multiplicative (α →₀ M) →* N} | ||
(H : ∀ x, f.comp (AddMonoidHom.toMultiplicative (singleAddHom x)) = | ||
g.comp (AddMonoidHom.toMultiplicative (singleAddHom x))) : | ||
f = g := | ||
mulHom_ext fun x => DFunLike.congr_fun (H x) | ||
|
||
end Finsupp |