Multiplicative and additive equivs #
In this file we define two extensions of Equiv
called AddEquiv
and MulEquiv
, which are
datatypes representing isomorphisms of AddMonoid
s/AddGroup
s and Monoid
s/Group
s.
Notations #
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
Make a ZeroHom
inverse from the bijective inverse of a ZeroHom
Equations
- ZeroHom.inverse f g h₁ = { toFun := g, map_zero' := (_ : g 0 = 0) }
Instances For
Makes a OneHom
inverse from the bijective inverse of a OneHom
Equations
- OneHom.inverse f g h₁ = { toFun := g, map_one' := (_ : g 1 = 1) }
Instances For
Makes an additive inverse from a bijection which preserves addition.
Equations
- AddHom.inverse f g h₁ h₂ = { toFun := g, map_add' := (_ : ∀ (x y : N), g (x + y) = g x + g y) }
Instances For
Makes a multiplicative inverse from a bijection which preserves multiplication.
Equations
- MulHom.inverse f g h₁ h₂ = { toFun := g, map_mul' := (_ : ∀ (x y : N), g (x * y) = g x * g y) }
Instances For
The inverse of a bijective AddMonoidHom
is an AddMonoidHom
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The inverse of a bijective MonoidHom
is a MonoidHom
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
- toFun : A → B
- invFun : B → A
- left_inv : Function.LeftInverse s.invFun s.toFun
- right_inv : Function.RightInverse s.invFun s.toFun
- map_add' : ∀ (x y : A), Equiv.toFun s.toEquiv (x + y) = Equiv.toFun s.toEquiv x + Equiv.toFun s.toEquiv y
The proposition that the function preserves addition
AddEquiv α β
is the type of an equiv α ≃ β
which preserves addition.
Instances For
- coe : F → A → B
- inv : F → B → A
- left_inv : ∀ (e : F), Function.LeftInverse (EquivLike.inv e) (EquivLike.coe e)
- right_inv : ∀ (e : F), Function.RightInverse (EquivLike.inv e) (EquivLike.coe e)
- coe_injective' : ∀ (e g : F), EquivLike.coe e = EquivLike.coe g → EquivLike.inv e = EquivLike.inv g → e = g
Preserves addition.
AddEquivClass F A B
states that F
is a type of addition-preserving morphisms.
You should extend this class when you extend AddEquiv
.
Instances
The AddHom
underlying an AddEquiv
.
Equations
- AddEquiv.toAddHom self = { toFun := self.toFun, map_add' := (_ : ∀ (x y : A), Equiv.toFun self.toEquiv (x + y) = Equiv.toFun self.toEquiv x + Equiv.toFun self.toEquiv y) }
Instances For
- toFun : M → N
- invFun : N → M
- left_inv : Function.LeftInverse s.invFun s.toFun
- right_inv : Function.RightInverse s.invFun s.toFun
- map_mul' : ∀ (x y : M), Equiv.toFun s.toEquiv (x * y) = Equiv.toFun s.toEquiv x * Equiv.toFun s.toEquiv y
The proposition that the function preserves multiplication
MulEquiv α β
is the type of an equiv α ≃ β
which preserves multiplication.
Instances For
The MulHom
underlying a MulEquiv
.
Equations
- MulEquiv.toMulHom self = { toFun := self.toFun, map_mul' := (_ : ∀ (x y : M), Equiv.toFun self.toEquiv (x * y) = Equiv.toFun self.toEquiv x * Equiv.toFun self.toEquiv y) }
Instances For
- coe : F → A → B
- inv : F → B → A
- left_inv : ∀ (e : F), Function.LeftInverse (EquivLike.inv e) (EquivLike.coe e)
- right_inv : ∀ (e : F), Function.RightInverse (EquivLike.inv e) (EquivLike.coe e)
- coe_injective' : ∀ (e g : F), EquivLike.coe e = EquivLike.coe g → EquivLike.inv e = EquivLike.inv g → e = g
Preserves multiplication.
MulEquivClass F A B
states that F
is a type of multiplication-preserving morphisms.
You should extend this class when you extend MulEquiv
.
Instances
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
Equations
- AddEquivClass.instAddHomClass F = AddHomClass.mk (_ : ∀ (f : F) (a b : M), ↑f (a + b) = ↑f a + ↑f b)
Equations
- MulEquivClass.instMulHomClass F = MulHomClass.mk (_ : ∀ (f : F) (a b : M), ↑f (a * b) = ↑f a * ↑f b)
Equations
- AddEquivClass.instAddMonoidHomClass F = let src := AddEquivClass.instAddHomClass F; AddMonoidHomClass.mk (_ : ∀ (e : F), ↑e 0 = 0)
Equations
- MulEquivClass.instMonoidHomClass F = let src := MulEquivClass.instMulHomClass F; MonoidHomClass.mk (_ : ∀ (e : F), ↑e 1 = 1)
Equations
- MulEquivClass.toZeroHomClass F = ZeroHomClass.mk (_ : ∀ (e : F), ↑e 0 = 0)
Equations
- MulEquivClass.toMonoidWithZeroHomClass F = let src := MulEquivClass.instMonoidHomClass F; let src_1 := MulEquivClass.toZeroHomClass F; MonoidWithZeroHomClass.mk (_ : ∀ (f : F), ↑f 0 = 0)
Turn an element of a type F
satisfying AddEquivClass F α β
into an actual
AddEquiv
. This is declared as the default coercion from F
to α ≃+ β
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Turn an element of a type F
satisfying MulEquivClass F α β
into an actual
MulEquiv
. This is declared as the default coercion from F
to α ≃* β
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Any type satisfying AddEquivClass
can be cast into AddEquiv
via
AddEquivClass.toAddEquiv
.
Equations
- instCoeTCAddEquiv = { coe := AddEquivClass.toAddEquiv }
Any type satisfying MulEquivClass
can be cast into MulEquiv
via
MulEquivClass.toMulEquiv
.
Equations
- instCoeTCMulEquiv = { coe := MulEquivClass.toMulEquiv }
Equations
- AddEquiv.instAddEquivClassAddEquiv = AddEquivClass.mk (_ : ∀ (f : M ≃+ N) (x y : M), Equiv.toFun f.toEquiv (x + y) = Equiv.toFun f.toEquiv x + Equiv.toFun f.toEquiv y)
Equations
- MulEquiv.instMulEquivClassMulEquiv = MulEquivClass.mk (_ : ∀ (f : M ≃* N) (x y : M), Equiv.toFun f.toEquiv (x * y) = Equiv.toFun f.toEquiv x * Equiv.toFun f.toEquiv y)
The identity map is an additive isomorphism.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The identity map is a multiplicative isomorphism.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- AddEquiv.instInhabitedAddEquiv = { default := AddEquiv.refl M }
Equations
- MulEquiv.instInhabitedMulEquiv = { default := MulEquiv.refl M }
See Note [custom simps projection]
Equations
Instances For
See Note [custom simps projection]
Equations
Instances For
Monoids #
An additive isomorphism of additive monoids sends 0
to 0
(and is hence an additive monoid isomorphism).
A multiplicative isomorphism of monoids sends 1
to 1
(and is hence a monoid isomorphism).
A bijective AddSemigroup
homomorphism is an isomorphism
Equations
- One or more equations did not get rendered due to their size.
Instances For
A bijective Semigroup
homomorphism is an isomorphism
Equations
- One or more equations did not get rendered due to their size.
Instances For
Extract the forward direction of an additive equivalence as an addition-preserving function.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Extract the forward direction of a multiplicative equivalence as a multiplication-preserving function.
Equations
- One or more equations did not get rendered due to their size.
Instances For
An additive analogue of Equiv.arrowCongr
,
where the equivalence between the targets is additive.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A multiplicative analogue of Equiv.arrowCongr
,
where the equivalence between the targets is multiplicative.
Equations
- One or more equations did not get rendered due to their size.
Instances For
An additive analogue of Equiv.arrowCongr
,
for additive maps from an additive monoid to a commutative additive monoid.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A multiplicative analogue of Equiv.arrowCongr
,
for multiplicative maps from a monoid to a commutative monoid.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A family of additive equivalences Π j, (Ms j ≃+ Ns j)
generates an additive equivalence between Π j, Ms j
and Π j, Ns j
.
This is the AddEquiv
version of Equiv.piCongrRight
, and the dependent version of
AddEquiv.arrowCongr
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A family of multiplicative equivalences Π j, (Ms j ≃* Ns j)
generates a
multiplicative equivalence between Π j, Ms j
and Π j, Ns j
.
This is the MulEquiv
version of Equiv.piCongrRight
, and the dependent version of
MulEquiv.arrowCongr
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A family indexed by a nonempty subsingleton type is equivalent to the element at the single index.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A family indexed by a nonempty subsingleton type is equivalent to the element at the single index.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Groups #
An additive equivalence of additive groups preserves negation.
A multiplicative equivalence of groups preserves inversion.
An additive equivalence of additive groups preserves subtractions.
A multiplicative equivalence of groups preserves division.
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
- One or more equations did not get rendered due to their size.
Instances For
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
- One or more equations did not get rendered due to their size.
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
- One or more equations did not get rendered due to their size.
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
- One or more equations did not get rendered due to their size.
Instances For
Negation on an AddGroup
is a permutation of the underlying type.
Equations
- Equiv.neg G = Function.Involutive.toPerm Neg.neg (_ : Function.Involutive Neg.neg)
Instances For
Inversion on a Group
or GroupWithZero
is a permutation of the underlying type.
Equations
- Equiv.inv G = Function.Involutive.toPerm Inv.inv (_ : Function.Involutive Inv.inv)