Multiplicative and additive equivs #
In this file we define two extensions of Equiv called AddEquiv and MulEquiv, which are
datatypes representing isomorphisms of AddMonoids/AddGroups and Monoids/Groups.
Main definitions #
≃*(MulEquiv),≃+(AddEquiv): bundled equivalences that preserve multiplication/addition (and are therefore monoid and group isomorphisms).MulEquivClass,AddEquivClass: classes for types containing bundled equivalences that preserve multiplication/addition.
Notation #
The extended equivs all have coercions to functions, and the coercions are the canonical notation when treating the isomorphisms as maps.
Tags #
Equiv, MulEquiv, AddEquiv
AddEquiv α β is the type of an equiv α ≃ β which preserves addition.
- toFun : A → B
- invFun : B → A
- left_inv : Function.LeftInverse self.invFun self.toFun
- right_inv : Function.RightInverse self.invFun self.toFun
Instances For
MulEquiv α β is the type of an equiv α ≃ β which preserves multiplication.
- toFun : M → N
- invFun : N → M
- left_inv : Function.LeftInverse self.invFun self.toFun
- right_inv : Function.RightInverse self.invFun self.toFun
Instances For
Notation for a MulEquiv.
Equations
- «term_≃*_» = Lean.ParserDescr.trailingNode `«term_≃*_» 25 25 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ≃* ") (Lean.ParserDescr.cat `term 26))
Instances For
Notation for an AddEquiv.
Equations
- «term_≃+_» = Lean.ParserDescr.trailingNode `«term_≃+_» 25 25 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ≃+ ") (Lean.ParserDescr.cat `term 26))
Instances For
Alias of EmbeddingLike.map_eq_one_iff.
Alias of EmbeddingLike.map_ne_one_iff.
Turn an element of a type F satisfying MulEquivClass F α β into an actual
MulEquiv. This is declared as the default coercion from F to α ≃* β.
Instances For
Turn an element of a type F satisfying AddEquivClass F α β into an actual
AddEquiv. This is declared as the default coercion from F to α ≃+ β.
Instances For
Any type satisfying MulEquivClass can be cast into MulEquiv via
MulEquivClass.toMulEquiv.
Equations
Any type satisfying AddEquivClass can be cast into AddEquiv via
AddEquivClass.toAddEquiv.
Equations
simp-normal form of toFun_eq_coe.
The identity map is a multiplicative isomorphism.
Equations
- MulEquiv.refl M = { toEquiv := Equiv.refl M, map_mul' := ⋯ }
Instances For
The identity map is an additive isomorphism.
Equations
- AddEquiv.refl M = { toEquiv := Equiv.refl M, map_add' := ⋯ }
Instances For
Equations
- MulEquiv.instInhabited = { default := MulEquiv.refl M }
Equations
- AddEquiv.instInhabited = { default := AddEquiv.refl M }
See Note [custom simps projection]
Equations
Instances For
See Note [custom simps projection]
Equations
Instances For
MulEquiv.symm defines an equivalence between α ≃* β and β ≃* α.
Equations
- MulEquiv.symmEquiv P Q = { toFun := MulEquiv.symm, invFun := MulEquiv.symm, left_inv := ⋯, right_inv := ⋯ }
Instances For
AddEquiv.symm defines an equivalence between α ≃+ β and β ≃+ α
Equations
- AddEquiv.symmEquiv P Q = { toFun := AddEquiv.symm, invFun := AddEquiv.symm, left_inv := ⋯, right_inv := ⋯ }
Instances For
Equiv.cast (congrArg _ h) as a MulEquiv.
Note that unlike Equiv.cast, this takes an equality of indices rather than an equality of types,
to avoid having to deal with an equality of the algebraic structure itself.
Equations
- MulEquiv.cast h = { toEquiv := Equiv.cast ⋯, map_mul' := ⋯ }
Instances For
Equiv.cast (congrArg _ h) as an AddEquiv.
Note that unlike Equiv.cast, this takes an equality of indices rather than an equality of types,
to avoid having to deal with an equality of the algebraic structure itself.
Equations
- AddEquiv.cast h = { toEquiv := Equiv.cast ⋯, map_add' := ⋯ }
Instances For
Monoids #
A multiplicative isomorphism of monoids sends 1 to 1 (and is hence a monoid isomorphism).
An additive isomorphism of additive monoids sends 0 to 0
(and is hence an additive monoid isomorphism).
A bijective Semigroup homomorphism is an isomorphism
Equations
- MulEquiv.ofBijective f hf = { toEquiv := Equiv.ofBijective (⇑f) hf, map_mul' := ⋯ }
Instances For
A bijective AddSemigroup homomorphism is an isomorphism
Equations
- AddEquiv.ofBijective f hf = { toEquiv := Equiv.ofBijective (⇑f) hf, map_add' := ⋯ }
Instances For
Extract the forward direction of a multiplicative equivalence as a multiplication-preserving function.
Equations
- h.toMonoidHom = { toFun := h.toFun, map_one' := ⋯, map_mul' := ⋯ }
Instances For
Extract the forward direction of an additive equivalence as an addition-preserving function.
Equations
- h.toAddMonoidHom = { toFun := h.toFun, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Groups #
A multiplicative equivalence of groups preserves inversion.
An additive equivalence of additive groups preserves negation.
A multiplicative equivalence of groups preserves division.
An additive equivalence of additive groups preserves subtractions.
Given a pair of multiplicative homomorphisms f, g such that g.comp f = id and
f.comp g = id, returns a multiplicative equivalence with toFun = f and invFun = g. This
constructor is useful if the underlying type(s) have specialized ext lemmas for multiplicative
homomorphisms.
Equations
- f.toMulEquiv g h₁ h₂ = { toFun := ⇑f, invFun := ⇑g, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯ }
Instances For
Given a pair of additive homomorphisms f, g such that g.comp f = id and
f.comp g = id, returns an additive equivalence with toFun = f and invFun = g. This
constructor is useful if the underlying type(s) have specialized ext lemmas for additive
homomorphisms.
Equations
- f.toAddEquiv g h₁ h₂ = { toFun := ⇑f, invFun := ⇑g, left_inv := ⋯, right_inv := ⋯, map_add' := ⋯ }
Instances For
Given a pair of monoid homomorphisms f, g such that g.comp f = id and f.comp g = id,
returns a multiplicative equivalence with toFun = f and invFun = g. This constructor is
useful if the underlying type(s) have specialized ext lemmas for monoid homomorphisms.
Equations
- f.toMulEquiv g h₁ h₂ = { toFun := ⇑f, invFun := ⇑g, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯ }
Instances For
Given a pair of additive monoid homomorphisms f, g such that g.comp f = id
and f.comp g = id, returns an additive equivalence with toFun = f and invFun = g. This
constructor is useful if the underlying type(s) have specialized ext lemmas for additive
monoid homomorphisms.
Equations
- f.toAddEquiv g h₁ h₂ = { toFun := ⇑f, invFun := ⇑g, left_inv := ⋯, right_inv := ⋯, map_add' := ⋯ }