Adjoining a zero/one to semigroups and related algebraic structures #
This file contains different results about adjoining an element to an algebraic structure which then
behaves like a zero or a one. An example is adjoining a one to a semigroup to obtain a monoid. That
this provides an example of an adjunction is proved in algebra.category.Mon.adjunctions
.
Another result says that adjoining to a group an element zero
gives a group_with_zero
. For more
information about these structures (which are not that standard in informal mathematics, see
algebra.group_with_zero.basic
)
Add an extra element 1
to a type
Add an extra element 0
to a type
Instances for with_zero
- with_one.with_zero.has_repr
- with_zero.has_repr
- with_zero.monad
- with_zero.has_zero
- with_zero.has_add
- with_zero.has_neg
- with_zero.has_involutive_neg
- with_zero.inhabited
- with_zero.nontrivial
- with_zero.has_coe_t
- with_zero.can_lift
- with_zero.add_zero_class
- with_zero.add_monoid
- with_zero.add_comm_monoid
- with_zero.has_one
- with_zero.mul_zero_class
- with_zero.no_zero_divisors
- with_zero.semigroup_with_zero
- with_zero.comm_semigroup
- with_zero.mul_zero_one_class
- with_zero.nat.has_pow
- with_zero.monoid_with_zero
- with_zero.comm_monoid_with_zero
- with_zero.has_inv
- with_zero.has_involutive_inv
- with_zero.has_div
- with_zero.int.has_pow
- with_zero.div_inv_monoid
- with_zero.division_monoid
- with_zero.division_comm_monoid
- with_zero.group_with_zero
- with_zero.comm_group_with_zero
- with_zero.add_monoid_with_one
- with_zero.semiring
- with_zero.preorder
- with_zero.partial_order
- with_zero.order_bot
- with_zero.lattice
- with_zero.linear_order
- with_zero.covariant_class_mul_le
- with_zero.contravariant_class_mul_lt
- with_zero.ordered_comm_monoid
- with_zero.has_exists_add_of_le
- with_zero.canonically_ordered_add_monoid
- with_zero.canonically_linear_ordered_add_monoid
- with_zero.linear_ordered_comm_monoid_with_zero
- with_zero.linear_ordered_comm_group_with_zero
- function_field.valued_Fqt_infty
- is_dedekind_domain.height_one_spectrum.valued_adic_completion
Equations
- with_one.with_zero.has_repr = {repr := λ (o : with_zero α), with_one.with_zero.has_repr._match_1 o}
- with_one.with_zero.has_repr._match_1 (option.some a) = "↑" ++ repr a
- with_one.with_zero.has_repr._match_1 option.none = "0"
Equations
- with_one.has_repr = {repr := λ (o : with_one α), with_one.has_repr._match_1 o}
- with_one.has_repr._match_1 (option.some a) = "↑" ++ repr a
- with_one.has_repr._match_1 option.none = "1"
Equations
- with_zero.has_repr = {repr := λ (o : with_zero α), with_zero.has_repr._match_1 o}
- with_zero.has_repr._match_1 option.none = "1"
- with_zero.has_repr._match_1 (option.some a) = "↑" ++ repr a
Equations
Equations
Equations
- with_one.has_one = {one := option.none α}
Equations
- with_zero.has_zero = {zero := option.none α}
Equations
Equations
Equations
- with_one.has_inv = {inv := λ (a : with_one α), option.map has_inv.inv a}
Equations
- with_zero.has_neg = {neg := λ (a : with_zero α), option.map has_neg.neg a}
Equations
Equations
Equations
- with_one.inhabited = {default := 1}
Equations
- with_zero.inhabited = {default := 0}
Equations
- with_zero.has_coe_t = {coe := option.some α}
Equations
- with_one.has_coe_t = {coe := option.some α}
Recursor for with_zero
using the preferred forms 0
and ↑a
.
Equations
- with_zero.rec_zero_coe h₁ h₂ = option.rec h₁ h₂
Recursor for with_one
using the preferred forms 1
and ↑a
.
Equations
- with_one.rec_one_coe h₁ h₂ = option.rec h₁ h₂
Deconstruct a x : with_zero α
to the underlying value in α
, given a proof that x ≠ 0
.
Equations
- with_zero.unzero hx = with_bot.unbot x hx
Deconstruct a x : with_one α
to the underlying value in α
, given a proof that x ≠ 1
.
Equations
- with_one.unone hx = with_bot.unbot x hx
Equations
- with_zero.can_lift = {coe := coe coe_to_lift, cond := λ (a : with_zero α), a ≠ 0, prf := _}
Equations
- with_one.can_lift = {coe := coe coe_to_lift, cond := λ (a : with_one α), a ≠ 1, prf := _}
Equations
- with_zero.add_zero_class = {zero := 0, add := has_add.add with_zero.has_add, zero_add := _, add_zero := _}
Equations
- with_one.mul_one_class = {one := 1, mul := has_mul.mul with_one.has_mul, one_mul := _, mul_one := _}
Equations
- with_zero.add_monoid = {add := add_zero_class.add with_zero.add_zero_class, add_assoc := _, zero := add_zero_class.zero with_zero.add_zero_class, zero_add := _, add_zero := _, nsmul := nsmul_rec (add_zero_class.to_has_add (with_zero α)), nsmul_zero' := _, nsmul_succ' := _}
Equations
- with_one.monoid = {mul := mul_one_class.mul with_one.mul_one_class, mul_assoc := _, one := mul_one_class.one with_one.mul_one_class, one_mul := _, mul_one := _, npow := npow_rec (mul_one_class.to_has_mul (with_one α)), npow_zero' := _, npow_succ' := _}
Equations
- with_zero.add_comm_monoid = {add := add_monoid.add with_zero.add_monoid, add_assoc := _, zero := add_monoid.zero with_zero.add_monoid, zero_add := _, add_zero := _, nsmul := add_monoid.nsmul with_zero.add_monoid, nsmul_zero' := _, nsmul_succ' := _, add_comm := _}
Equations
- with_one.comm_monoid = {mul := monoid.mul with_one.monoid, mul_assoc := _, one := monoid.one with_one.monoid, one_mul := _, mul_one := _, npow := monoid.npow with_one.monoid, npow_zero' := _, npow_succ' := _, mul_comm := _}
coe
as a bundled morphism
Equations
- with_zero.coe_add_hom = {to_fun := coe coe_to_lift, map_add' := _}
coe
as a bundled morphism
Equations
- with_one.coe_mul_hom = {to_fun := coe coe_to_lift, map_mul' := _}
Lift an add_semigroup homomorphism f
to a bundled add_monoid homorphism.
Lift a semigroup homomorphism f
to a bundled monoid homorphism.
A version of equiv.option_congr
for with_zero
.
Equations
- e.with_zero_congr = {to_fun := ⇑(with_zero.map e.to_add_hom), inv_fun := ⇑(with_zero.map e.symm.to_add_hom), left_inv := _, right_inv := _, map_add' := _}
A version of equiv.option_congr
for with_one
.
Equations
- e.with_one_congr = {to_fun := ⇑(with_one.map e.to_mul_hom), inv_fun := ⇑(with_one.map e.symm.to_mul_hom), left_inv := _, right_inv := _, map_mul' := _}
Equations
- with_zero.has_one = {one := ↑1}
Equations
- with_zero.mul_zero_class = {mul := λ (o₁ o₂ : with_zero α), option.bind o₁ (λ (a : α), option.map (λ (b : α), a * b) o₂), zero := 0, zero_mul := _, mul_zero := _}
Equations
Equations
Equations
- with_zero.mul_zero_one_class = {one := 1, mul := mul_zero_class.mul with_zero.mul_zero_class, one_mul := _, mul_one := _, zero := mul_zero_class.zero with_zero.mul_zero_class, zero_mul := _, mul_zero := _}
Equations
- with_zero.nat.has_pow = {pow := λ (x : with_zero α) (n : ℕ), with_zero.nat.has_pow._match_1 x n}
- with_zero.nat.has_pow._match_1 (option.some x) n = ↑(x ^ n)
- with_zero.nat.has_pow._match_1 option.none (n + 1) = 0
- with_zero.nat.has_pow._match_1 option.none 0 = 1
Equations
- with_zero.monoid_with_zero = {mul := mul_zero_one_class.mul with_zero.mul_zero_one_class, mul_assoc := _, one := mul_zero_one_class.one with_zero.mul_zero_one_class, one_mul := _, mul_one := _, npow := λ (n : ℕ) (x : with_zero α), x ^ n, npow_zero' := _, npow_succ' := _, zero := mul_zero_one_class.zero with_zero.mul_zero_one_class, zero_mul := _, mul_zero := _}
Equations
- with_zero.comm_monoid_with_zero = {mul := monoid_with_zero.mul with_zero.monoid_with_zero, mul_assoc := _, one := monoid_with_zero.one with_zero.monoid_with_zero, one_mul := _, mul_one := _, npow := monoid_with_zero.npow with_zero.monoid_with_zero, npow_zero' := _, npow_succ' := _, mul_comm := _, zero := monoid_with_zero.zero with_zero.monoid_with_zero, zero_mul := _, mul_zero := _}
Given an inverse operation on α
there is an inverse operation
on with_zero α
sending 0
to 0
Equations
- with_zero.has_inv = {inv := λ (a : with_zero α), option.map has_inv.inv a}
Equations
Equations
- with_zero.has_div = {div := λ (o₁ o₂ : with_zero α), option.bind o₁ (λ (a : α), option.map (λ (b : α), a / b) o₂)}
Equations
- with_zero.int.has_pow = {pow := λ (x : with_zero α) (n : ℤ), with_zero.int.has_pow._match_1 x n}
- with_zero.int.has_pow._match_1 (option.some x) n = ↑(x ^ n)
- with_zero.int.has_pow._match_1 option.none -[1+ n] = 0
- with_zero.int.has_pow._match_1 option.none (int.of_nat n.succ) = 0
- with_zero.int.has_pow._match_1 option.none (int.of_nat 0) = 1
Equations
- with_zero.div_inv_monoid = {mul := monoid_with_zero.mul with_zero.monoid_with_zero, mul_assoc := _, one := monoid_with_zero.one with_zero.monoid_with_zero, one_mul := _, mul_one := _, npow := monoid_with_zero.npow with_zero.monoid_with_zero, npow_zero' := _, npow_succ' := _, inv := has_inv.inv with_zero.has_inv, div := has_div.div with_zero.has_div, div_eq_mul_inv := _, zpow := λ (n : ℤ) (x : with_zero α), x ^ n, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _}
Equations
- with_zero.division_monoid = {mul := div_inv_monoid.mul with_zero.div_inv_monoid, mul_assoc := _, one := div_inv_monoid.one with_zero.div_inv_monoid, one_mul := _, mul_one := _, npow := div_inv_monoid.npow with_zero.div_inv_monoid, npow_zero' := _, npow_succ' := _, inv := div_inv_monoid.inv with_zero.div_inv_monoid, div := div_inv_monoid.div with_zero.div_inv_monoid, div_eq_mul_inv := _, zpow := div_inv_monoid.zpow with_zero.div_inv_monoid, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, inv_inv := _, mul_inv_rev := _, inv_eq_of_mul := _}
Equations
- with_zero.division_comm_monoid = {mul := division_monoid.mul with_zero.division_monoid, mul_assoc := _, one := division_monoid.one with_zero.division_monoid, one_mul := _, mul_one := _, npow := division_monoid.npow with_zero.division_monoid, npow_zero' := _, npow_succ' := _, inv := division_monoid.inv with_zero.division_monoid, div := division_monoid.div with_zero.division_monoid, div_eq_mul_inv := _, zpow := division_monoid.zpow with_zero.division_monoid, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, inv_inv := _, mul_inv_rev := _, inv_eq_of_mul := _, mul_comm := _}
if G
is a group then with_zero G
is a group with zero.
Equations
- with_zero.group_with_zero = {mul := monoid_with_zero.mul with_zero.monoid_with_zero, mul_assoc := _, one := monoid_with_zero.one with_zero.monoid_with_zero, one_mul := _, mul_one := _, npow := monoid_with_zero.npow with_zero.monoid_with_zero, npow_zero' := _, npow_succ' := _, zero := monoid_with_zero.zero with_zero.monoid_with_zero, zero_mul := _, mul_zero := _, inv := div_inv_monoid.inv with_zero.div_inv_monoid, div := div_inv_monoid.div with_zero.div_inv_monoid, div_eq_mul_inv := _, zpow := div_inv_monoid.zpow with_zero.div_inv_monoid, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, exists_pair_ne := _, inv_zero := _, mul_inv_cancel := _}
Equations
- with_zero.comm_group_with_zero = {mul := group_with_zero.mul with_zero.group_with_zero, mul_assoc := _, one := group_with_zero.one with_zero.group_with_zero, one_mul := _, mul_one := _, npow := group_with_zero.npow with_zero.group_with_zero, npow_zero' := _, npow_succ' := _, mul_comm := _, zero := group_with_zero.zero with_zero.group_with_zero, zero_mul := _, mul_zero := _, inv := group_with_zero.inv with_zero.group_with_zero, div := group_with_zero.div with_zero.group_with_zero, div_eq_mul_inv := _, zpow := group_with_zero.zpow with_zero.group_with_zero, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, exists_pair_ne := _, inv_zero := _, mul_inv_cancel := _}
Equations
- with_zero.add_monoid_with_one = {nat_cast := λ (n : ℕ), ite (n = 0) 0 ↑(n.cast), add := add_monoid.add with_zero.add_monoid, add_assoc := _, zero := add_monoid.zero with_zero.add_monoid, zero_add := _, add_zero := _, nsmul := add_monoid.nsmul with_zero.add_monoid, nsmul_zero' := _, nsmul_succ' := _, one := 1, nat_cast_zero := _, nat_cast_succ := _}
Equations
- with_zero.semiring = {add := add_monoid_with_one.add with_zero.add_monoid_with_one, add_assoc := _, zero := add_monoid_with_one.zero with_zero.add_monoid_with_one, zero_add := _, add_zero := _, nsmul := add_monoid_with_one.nsmul with_zero.add_monoid_with_one, nsmul_zero' := _, nsmul_succ' := _, add_comm := _, mul := mul_zero_class.mul with_zero.mul_zero_class, left_distrib := _, right_distrib := _, zero_mul := _, mul_zero := _, mul_assoc := _, one := add_monoid_with_one.one with_zero.add_monoid_with_one, one_mul := _, mul_one := _, nat_cast := add_monoid_with_one.nat_cast with_zero.add_monoid_with_one, nat_cast_zero := _, nat_cast_succ := _, npow := monoid_with_zero.npow with_zero.monoid_with_zero, npow_zero' := _, npow_succ' := _}
Any group is isomorphic to the units of itself adjoined with 0
.
Equations
- with_zero.units_with_zero_equiv = {to_fun := λ (a : (with_zero α)ˣ), with_zero.unzero _, inv_fun := λ (a : α), units.mk0 ↑a with_zero.coe_ne_zero, left_inv := _, right_inv := _, map_mul' := _}