Lifting algebraic data classes along injective/surjective maps #
This file provides definitions that are meant to deal with situations such as the following:
Suppose that G is a group, and H is a type endowed with
One H, Mul H, and Inv H.
Suppose furthermore, that f : G → H is a surjective map
that respects the multiplication, and the unit elements.
Then H satisfies the group axioms.
The relevant definition in this case is Function.Surjective.group.
Dually, there is also Function.Injective.group.
And there are versions for (additive) (commutative) semigroups/monoids.
Note that the nsmul and zsmul hypotheses in the declarations in this file are declared as
∀ x n, f (n • x) = n • f x, with the binders in a slightly unnatural order, as they are
to_additiveized from the versions for ^.
Injective #
A type endowed with * is a semigroup, if it admits an injective map that preserves * to
a semigroup. See note [reducible non-instances].
Equations
- Function.Injective.semigroup f hf mul = { toMul := inst✝¹, mul_assoc := ⋯ }
Instances For
A type endowed with + is an additive semigroup, if it admits an
injective map that preserves + to an additive semigroup.
Equations
- Function.Injective.addSemigroup f hf mul = { toAdd := inst✝¹, add_assoc := ⋯ }
Instances For
A type endowed with * is a commutative magma, if it admits a surjective map that preserves
* from a commutative magma.
Equations
- Function.Injective.commMagma f hf mul = { toMul := inst✝¹, mul_comm := ⋯ }
Instances For
A type endowed with + is an additive commutative semigroup, if it admits
a surjective map that preserves + from an additive commutative semigroup.
Equations
- Function.Injective.addCommMagma f hf mul = { toAdd := inst✝¹, add_comm := ⋯ }
Instances For
A type endowed with * is a commutative semigroup, if it admits an injective map that
preserves * to a commutative semigroup. See note [reducible non-instances].
Equations
- Function.Injective.commSemigroup f hf mul = { toSemigroup := Function.Injective.semigroup f hf mul, mul_comm := ⋯ }
Instances For
A type endowed with + is an additive commutative semigroup,if it admits
an injective map that preserves + to an additive commutative semigroup.
Equations
- Function.Injective.addCommSemigroup f hf mul = { toAddSemigroup := Function.Injective.addSemigroup f hf mul, add_comm := ⋯ }
Instances For
A type has left-cancellative multiplication, if it admits an injective map that
preserves * to another type with left-cancellative multiplication.
A type has left-cancellative addition, if it admits an injective map that
preserves + to another type with left-cancellative addition.
A type has right-cancellative multiplication, if it admits an injective map that
preserves * to another type with right-cancellative multiplication.
A type has right-cancellative addition, if it admits an injective map that
preserves + to another type with right-cancellative addition.
A type has cancellative multiplication, if it admits an injective map that
preserves * to another type with cancellative multiplication.
A type has cancellative addition, if it admits an injective map that
preserves + to another type with cancellative addition.
A type endowed with * is a left cancel semigroup, if it admits an injective map that
preserves * to a left cancel semigroup. See note [reducible non-instances].
Equations
- Function.Injective.leftCancelSemigroup f hf mul = { toSemigroup := Function.Injective.semigroup f hf mul, toIsLeftCancelMul := ⋯ }
Instances For
A type endowed with + is an additive left cancel semigroup, if it admits an
injective map that preserves + to an additive left cancel semigroup.
Equations
- Function.Injective.addLeftCancelSemigroup f hf mul = { toAddSemigroup := Function.Injective.addSemigroup f hf mul, toIsLeftCancelAdd := ⋯ }
Instances For
A type endowed with * is a right cancel semigroup, if it admits an injective map that
preserves * to a right cancel semigroup. See note [reducible non-instances].
Equations
- Function.Injective.rightCancelSemigroup f hf mul = { toSemigroup := Function.Injective.semigroup f hf mul, toIsRightCancelMul := ⋯ }
Instances For
A type endowed with + is an additive right
cancel semigroup, if it admits an injective map that preserves + to an additive right cancel
semigroup.
Equations
- Function.Injective.addRightCancelSemigroup f hf mul = { toAddSemigroup := Function.Injective.addSemigroup f hf mul, toIsRightCancelAdd := ⋯ }
Instances For
A type endowed with 1 and * is a MulOneClass, if it admits an injective map that
preserves 1 and * to a MulOneClass. See note [reducible non-instances].
Equations
- Function.Injective.mulOneClass f hf one mul = { toOne := inst✝¹, toMul := inst✝², one_mul := ⋯, mul_one := ⋯ }
Instances For
A type endowed with 0 and + is an AddZeroClass, if it admits an
injective map that preserves 0 and + to an AddZeroClass.
Equations
- Function.Injective.addZeroClass f hf one mul = { toZero := inst✝¹, toAdd := inst✝², zero_add := ⋯, add_zero := ⋯ }
Instances For
A type endowed with 1 and * is a monoid, if it admits an injective map that preserves 1
and * to a monoid. See note [reducible non-instances].
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 0 and + is an additive monoid, if it admits an
injective map that preserves 0 and + to an additive monoid. See note
[reducible non-instances].
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 1 and * is a left cancel monoid, if it admits an injective map that
preserves 1 and * to a left cancel monoid. See note [reducible non-instances].
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 0 and + is an additive left cancel monoid, if it
admits an injective map that preserves 0 and + to an additive left cancel monoid.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 1 and * is a right cancel monoid, if it admits an injective map that
preserves 1 and * to a right cancel monoid. See note [reducible non-instances].
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 0 and + is an additive left cancel monoid,if it
admits an injective map that preserves 0 and + to an additive left cancel monoid.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 1 and * is a cancel monoid, if it admits an injective map that preserves
1 and * to a cancel monoid. See note [reducible non-instances].
Equations
- Function.Injective.cancelMonoid f hf one mul npow = { toLeftCancelMonoid := Function.Injective.leftCancelMonoid f hf one mul npow, toIsRightCancelMul := ⋯ }
Instances For
A type endowed with 0 and + is an additive left cancel monoid,if it
admits an injective map that preserves 0 and + to an additive left cancel monoid.
Equations
- Function.Injective.addCancelMonoid f hf one mul npow = { toAddLeftCancelMonoid := Function.Injective.addLeftCancelMonoid f hf one mul npow, toIsRightCancelAdd := ⋯ }
Instances For
A type endowed with 1 and * is a commutative monoid, if it admits an injective map that
preserves 1 and * to a commutative monoid. See note [reducible non-instances].
Equations
- Function.Injective.commMonoid f hf one mul npow = { toMonoid := Function.Injective.monoid f hf one mul npow, mul_comm := ⋯ }
Instances For
A type endowed with 0 and + is an additive commutative monoid, if it
admits an injective map that preserves 0 and + to an additive commutative monoid.
Equations
- Function.Injective.addCommMonoid f hf one mul npow = { toAddMonoid := Function.Injective.addMonoid f hf one mul npow, add_comm := ⋯ }
Instances For
A type endowed with 1 and * is a cancel commutative monoid if it admits an injective map
that preserves 1 and * to a cancel commutative monoid. See note [reducible non-instances].
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 0 and + is an additive cancel commutative monoid if it
admits an injective map that preserves 0 and + to an additive cancel commutative monoid.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type has an involutive inversion if it admits a surjective map that preserves ⁻¹ to a type
which has an involutive inversion. See note [reducible non-instances]
Equations
- Function.Injective.involutiveInv f hf inv = { toInv := inst✝¹, inv_inv := ⋯ }
Instances For
A type has an involutive negation if it admits a surjective map that
preserves - to a type which has an involutive negation.
Equations
- Function.Injective.involutiveNeg f hf inv = { toNeg := inst✝¹, neg_neg := ⋯ }
Instances For
A type endowed with 1 and ⁻¹ is a InvOneClass, if it admits an injective map that
preserves 1 and ⁻¹ to a InvOneClass. See note [reducible non-instances].
Equations
- Function.Injective.invOneClass f hf one inv = { toOne := inst✝², toInv := inst✝¹, inv_one := ⋯ }
Instances For
A type endowed with 0 and unary - is an NegZeroClass, if it admits an
injective map that preserves 0 and unary - to an NegZeroClass.
Equations
- Function.Injective.negZeroClass f hf one inv = { toZero := inst✝², toNeg := inst✝¹, neg_zero := ⋯ }
Instances For
A type endowed with 1, *, ⁻¹, and / is a DivInvMonoid if it admits an injective map
that preserves 1, *, ⁻¹, and / to a DivInvMonoid. See note [reducible non-instances].
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 0, +, unary -, and binary - is a
SubNegMonoid if it admits an injective map that preserves 0, +, unary -, and binary - to
a SubNegMonoid. This version takes custom nsmul and zsmul as [SMul ℕ M₁] and [SMul ℤ M₁]
arguments.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 1, *, ⁻¹, and / is a DivInvOneMonoid if it admits an injective
map that preserves 1, *, ⁻¹, and / to a DivInvOneMonoid. See note
[reducible non-instances].
Equations
- Function.Injective.divInvOneMonoid f hf one mul inv div npow zpow = { toDivInvMonoid := Function.Injective.divInvMonoid f hf one mul inv div npow zpow, inv_one := ⋯ }
Instances For
A type endowed with 0, +, unary -, and binary - is a
SubNegZeroMonoid if it admits an injective map that preserves 0, +, unary -, and binary
- to a SubNegZeroMonoid. This version takes custom nsmul and zsmul as [SMul ℕ M₁] and
[SMul ℤ M₁] arguments.
Equations
- Function.Injective.subNegZeroMonoid f hf one mul inv div npow zpow = { toSubNegMonoid := Function.Injective.subNegMonoid f hf one mul inv div npow zpow, neg_zero := ⋯ }
Instances For
A type endowed with 1, *, ⁻¹, and / is a DivisionMonoid if it admits an injective map
that preserves 1, *, ⁻¹, and / to a DivisionMonoid. See note [reducible non-instances]
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 0, +, unary -, and binary -
is a SubtractionMonoid if it admits an injective map that preserves 0, +, unary -, and
binary - to a SubtractionMonoid. This version takes custom nsmul and zsmul as [SMul ℕ M₁]
and [SMul ℤ M₁] arguments.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 1, *, ⁻¹, and / is a DivisionCommMonoid if it admits an
injective map that preserves 1, *, ⁻¹, and / to a DivisionCommMonoid.
See note [reducible non-instances].
Equations
- Function.Injective.divisionCommMonoid f hf one mul inv div npow zpow = { toDivisionMonoid := Function.Injective.divisionMonoid f hf one mul inv div npow zpow, mul_comm := ⋯ }
Instances For
A type endowed with 0, +, unary -, and binary
- is a SubtractionCommMonoid if it admits an injective map that preserves 0, +, unary -,
and binary - to a SubtractionCommMonoid. This version takes custom nsmul and zsmul as
[SMul ℕ M₁] and [SMul ℤ M₁] arguments.
Equations
- Function.Injective.subtractionCommMonoid f hf one mul inv div npow zpow = { toSubtractionMonoid := Function.Injective.subtractionMonoid f hf one mul inv div npow zpow, add_comm := ⋯ }
Instances For
A type endowed with 1, * and ⁻¹ is a group, if it admits an injective map that preserves
1, * and ⁻¹ to a group. See note [reducible non-instances].
Equations
- Function.Injective.group f hf one mul inv div npow zpow = { toDivInvMonoid := Function.Injective.divInvMonoid f hf one mul inv div npow zpow, inv_mul_cancel := ⋯ }
Instances For
A type endowed with 0 and + is an additive group, if it admits an
injective map that preserves 0 and + to an additive group.
Equations
- Function.Injective.addGroup f hf one mul inv div npow zpow = { toSubNegMonoid := Function.Injective.subNegMonoid f hf one mul inv div npow zpow, neg_add_cancel := ⋯ }
Instances For
A type endowed with 1, * and ⁻¹ is a commutative group, if it admits an injective map that
preserves 1, * and ⁻¹ to a commutative group. See note [reducible non-instances].
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 0 and + is an additive commutative group, if it
admits an injective map that preserves 0 and + to an additive commutative group.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Surjective #
A type endowed with * is a semigroup, if it admits a surjective map that preserves * from a
semigroup. See note [reducible non-instances].
Equations
- Function.Surjective.semigroup f hf mul = { toMul := inst✝¹, mul_assoc := ⋯ }
Instances For
A type endowed with + is an additive semigroup, if it admits a
surjective map that preserves + from an additive semigroup.
Equations
- Function.Surjective.addSemigroup f hf mul = { toAdd := inst✝¹, add_assoc := ⋯ }
Instances For
A type endowed with * is a commutative semigroup, if it admits a surjective map that preserves
* from a commutative semigroup. See note [reducible non-instances].
Equations
- Function.Surjective.commMagma f hf mul = { toMul := inst✝¹, mul_comm := ⋯ }
Instances For
A type endowed with + is an additive commutative semigroup, if it admits
a surjective map that preserves + from an additive commutative semigroup.
Equations
- Function.Surjective.addCommMagma f hf mul = { toAdd := inst✝¹, add_comm := ⋯ }
Instances For
A type endowed with * is a commutative semigroup, if it admits a surjective map that preserves
* from a commutative semigroup. See note [reducible non-instances].
Equations
- Function.Surjective.commSemigroup f hf mul = { toSemigroup := Function.Surjective.semigroup f hf mul, mul_comm := ⋯ }
Instances For
A type endowed with + is an additive commutative semigroup, if it admits
a surjective map that preserves + from an additive commutative semigroup.
Equations
- Function.Surjective.addCommSemigroup f hf mul = { toAddSemigroup := Function.Surjective.addSemigroup f hf mul, add_comm := ⋯ }
Instances For
A type endowed with 1 and * is a MulOneClass, if it admits a surjective map that preserves
1 and * from a MulOneClass. See note [reducible non-instances].
Equations
- Function.Surjective.mulOneClass f hf one mul = { toOne := inst✝¹, toMul := inst✝², one_mul := ⋯, mul_one := ⋯ }
Instances For
A type endowed with 0 and + is an AddZeroClass, if it admits a
surjective map that preserves 0 and + to an AddZeroClass.
Equations
- Function.Surjective.addZeroClass f hf one mul = { toZero := inst✝¹, toAdd := inst✝², zero_add := ⋯, add_zero := ⋯ }
Instances For
A type endowed with 1 and * is a monoid, if it admits a surjective map that preserves 1
and * to a monoid. See note [reducible non-instances].
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 0 and + is an additive monoid, if it admits a
surjective map that preserves 0 and + to an additive monoid. This version takes a custom nsmul
as a [SMul ℕ M₂] argument.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 1 and * is a commutative monoid, if it admits a surjective map that
preserves 1 and * from a commutative monoid. See note [reducible non-instances].
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 0 and + is an additive commutative monoid, if it
admits a surjective map that preserves 0 and + to an additive commutative monoid.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type has an involutive inversion if it admits a surjective map that preserves ⁻¹ to a type
which has an involutive inversion. See note [reducible non-instances]
Equations
- Function.Surjective.involutiveInv f hf inv = { toInv := inst✝¹, inv_inv := ⋯ }
Instances For
A type has an involutive negation if it admits a surjective map that
preserves - to a type which has an involutive negation.
Equations
- Function.Surjective.involutiveNeg f hf inv = { toNeg := inst✝¹, neg_neg := ⋯ }
Instances For
A type endowed with 1, *, ⁻¹, and / is a DivInvMonoid if it admits a surjective map
that preserves 1, *, ⁻¹, and / to a DivInvMonoid. See note [reducible non-instances].
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 0, +, unary -, and binary - is a
SubNegMonoid if it admits a surjective map that preserves 0, +, unary -, and binary - to
a SubNegMonoid.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 1, * and ⁻¹ is a group, if it admits a surjective map that preserves
1, * and ⁻¹ to a group. See note [reducible non-instances].
Equations
- Function.Surjective.group f hf one mul inv div npow zpow = { toDivInvMonoid := Function.Surjective.divInvMonoid f hf one mul inv div npow zpow, inv_mul_cancel := ⋯ }
Instances For
A type endowed with 0 and + is an additive group, if it admits a
surjective map that preserves 0 and + to an additive group.
Equations
- Function.Surjective.addGroup f hf one mul inv div npow zpow = { toSubNegMonoid := Function.Surjective.subNegMonoid f hf one mul inv div npow zpow, neg_add_cancel := ⋯ }
Instances For
A type endowed with 1, *, ⁻¹, and / is a commutative group, if it admits a surjective
map that preserves 1, *, ⁻¹, and / from a commutative group. See note
[reducible non-instances].
Equations
- One or more equations did not get rendered due to their size.
Instances For
A type endowed with 0 and + is an additive commutative group, if it
admits a surjective map that preserves 0 and + to an additive commutative group.
Equations
- One or more equations did not get rendered due to their size.