mathlib3documentation

algebra.group.with_one.defs

Adjoining a zero/one to semigroups and related algebraic structures #

THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.

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)

Implementation notes #

At various points in this file, id \$ is used in at the start of a proof field in a structure. This ensures that the generated _proof_1 lemmas are stated in terms of the algebraic operations and not option.map, as the latter does not typecheck once with_zero/with_one is irreducible.

@[irreducible]
def with_one (α : Type u_1) :
Type u_1

Add an extra element 1 to a type

Equations
Instances for with_one
@[irreducible]
def with_zero (α : Type u_1) :
Type u_1

Add an extra element 0 to a type

Equations
Instances for with_zero
@[protected, instance]
Equations
@[protected, instance]
def with_one.has_repr {α : Type u} [has_repr α] :
Equations
@[protected, instance]
def with_zero.has_repr {α : Type u} [has_repr α] :
Equations
@[protected, instance]
Equations
@[protected, instance]
Equations
@[protected, instance]
def with_one.has_one {α : Type u} :
Equations
@[protected, instance]
def with_zero.has_zero {α : Type u} :
Equations
@[protected, instance]
Equations
@[protected, instance]
def with_one.has_mul {α : Type u} [has_mul α] :
Equations
@[protected, instance]
def with_one.has_inv {α : Type u} [has_inv α] :
Equations
@[protected, instance]
def with_zero.has_neg {α : Type u} [has_neg α] :
Equations
@[protected, instance]
Equations
@[protected, instance]
Equations
@[protected, instance]
def with_one.inv_one_class {α : Type u} [has_inv α] :
Equations
@[protected, instance]
def with_zero.neg_zero_class {α : Type u} [has_neg α] :
Equations
@[protected, instance]
def with_one.inhabited {α : Type u} :
Equations
@[protected, instance]
def with_zero.inhabited {α : Type u} :
Equations
@[protected, instance]
def with_one.nontrivial {α : Type u} [nonempty α] :
@[protected, instance]
def with_zero.nontrivial {α : Type u} [nonempty α] :
@[protected, instance]
def with_zero.has_coe_t {α : Type u} :
(with_zero α)
Equations
@[protected, instance]
def with_one.has_coe_t {α : Type u} :
(with_one α)
Equations
def with_zero.rec_zero_coe {α : Type u} {C : Sort u_1} (h₁ : C 0) (h₂ : Π (a : α), C a) (n : with_zero α) :
C n

Recursor for with_zero using the preferred forms 0 and ↑a.

Equations
• = option.rec h₁ h₂
def with_one.rec_one_coe {α : Type u} {C : Sort u_1} (h₁ : C 1) (h₂ : Π (a : α), C a) (n : with_one α) :
C n

Recursor for with_one using the preferred forms 1 and ↑a.

Equations
• h₂ = option.rec h₁ h₂
def with_zero.unzero {α : Type u} {x : with_zero α} (hx : x 0) :
α

Deconstruct a x : with_zero α to the underlying value in α, given a proof that x ≠ 0.

Equations
• = hx
def with_one.unone {α : Type u} {x : with_one α} (hx : x 1) :
α

Deconstruct a x : with_one α to the underlying value in α, given a proof that x ≠ 1.

Equations
• = hx
@[simp]
theorem with_zero.unzero_coe {α : Type u} {x : α} (hx : x 0) :
@[simp]
theorem with_one.unone_coe {α : Type u} {x : α} (hx : x 1) :
= x
@[simp]
theorem with_zero.coe_unzero {α : Type u} {x : with_zero α} (hx : x 0) :
@[simp]
theorem with_one.coe_unone {α : Type u} {x : with_one α} (hx : x 1) :
theorem with_one.some_eq_coe {α : Type u} {a : α} :
theorem with_zero.some_eq_coe {α : Type u} {a : α} :
@[simp]
theorem with_zero.coe_ne_zero {α : Type u} {a : α} :
a 0
@[simp]
theorem with_one.coe_ne_one {α : Type u} {a : α} :
a 1
@[simp]
theorem with_one.one_ne_coe {α : Type u} {a : α} :
1 a
@[simp]
theorem with_zero.zero_ne_coe {α : Type u} {a : α} :
0 a
theorem with_one.ne_one_iff_exists {α : Type u} {x : with_one α} :
x 1 (a : α), a = x
theorem with_zero.ne_zero_iff_exists {α : Type u} {x : with_zero α} :
x 0 (a : α), a = x
@[protected, instance]
def with_zero.can_lift {α : Type u} :
α coe (λ (a : , a 0)
Equations
@[protected, instance]
def with_one.can_lift {α : Type u} :
can_lift (with_one α) α coe (λ (a : with_one α), a 1)
Equations
@[simp, norm_cast]
theorem with_one.coe_inj {α : Type u} {a b : α} :
a = b a = b
@[simp, norm_cast]
theorem with_zero.coe_inj {α : Type u} {a b : α} :
a = b a = b
@[protected]
theorem with_one.cases_on {α : Type u} {P : Prop} (x : with_one α) :
P 1 ( (a : α), P a) P x
@[protected]
theorem with_zero.cases_on {α : Type u} {P : Prop} (x : with_zero α) :
P 0 ( (a : α), P a) P x
@[protected, instance]
Equations
@[protected, instance]
def with_one.mul_one_class {α : Type u} [has_mul α] :
Equations
@[protected, instance]
def with_zero.add_monoid {α : Type u}  :
Equations
@[protected, instance]
def with_one.monoid {α : Type u} [semigroup α] :
Equations
@[protected, instance]
def with_zero.add_comm_monoid {α : Type u}  :
Equations
@[protected, instance]
def with_one.comm_monoid {α : Type u}  :
Equations
@[simp, norm_cast]
theorem with_one.coe_mul {α : Type u} [has_mul α] (a b : α) :
(a * b) = a * b
@[simp, norm_cast]
theorem with_zero.coe_add {α : Type u} [has_add α] (a b : α) :
(a + b) = a + b
@[simp, norm_cast]
theorem with_one.coe_inv {α : Type u} [has_inv α] (a : α) :
@[simp, norm_cast]
theorem with_zero.coe_neg {α : Type u} [has_neg α] (a : α) :
@[protected, instance]
def with_zero.has_one {α : Type u} [one : has_one α] :
Equations
@[simp, norm_cast]
theorem with_zero.coe_one {α : Type u} [has_one α] :
1 = 1
@[protected, instance]
def with_zero.mul_zero_class {α : Type u} [has_mul α] :
Equations
@[simp, norm_cast]
theorem with_zero.coe_mul {α : Type u} [has_mul α] {a b : α} :
(a * b) = a * b
@[protected, instance]
def with_zero.no_zero_divisors {α : Type u} [has_mul α] :
@[protected, instance]
Equations
@[protected, instance]
def with_zero.comm_semigroup {α : Type u}  :
Equations
@[protected, instance]
Equations
@[protected, instance]
def with_zero.nat.has_pow {α : Type u} [has_one α] [ ] :
Equations
@[simp, norm_cast]
theorem with_zero.coe_pow {α : Type u} [has_one α] [ ] {a : α} (n : ) :
(a ^ n) = a ^ n
@[protected, instance]
def with_zero.monoid_with_zero {α : Type u} [monoid α] :
Equations
@[protected, instance]
Equations
@[protected, instance]
def with_zero.has_inv {α : Type u} [has_inv α] :

Given an inverse operation on α there is an inverse operation on with_zero α sending 0 to 0

Equations
@[simp, norm_cast]
theorem with_zero.coe_inv {α : Type u} [has_inv α] (a : α) :
@[simp]
theorem with_zero.inv_zero {α : Type u} [has_inv α] :
0⁻¹ = 0
@[protected, instance]
Equations
@[protected, instance]
def with_zero.inv_one_class {α : Type u}  :
Equations
@[protected, instance]
def with_zero.has_div {α : Type u} [has_div α] :
Equations
@[norm_cast]
theorem with_zero.coe_div {α : Type u} [has_div α] (a b : α) :
(a / b) = a / b
@[protected, instance]
def with_zero.int.has_pow {α : Type u} [has_one α] [ ] :
Equations
@[simp, norm_cast]
theorem with_zero.coe_zpow {α : Type u} {a : α} (n : ) :
(a ^ n) = a ^ n
@[protected, instance]
def with_zero.div_inv_monoid {α : Type u}  :
Equations
@[protected, instance]
Equations
@[protected, instance]
def with_zero.division_monoid {α : Type u}  :
Equations
@[protected, instance]
Equations
@[protected, instance]
def with_zero.group_with_zero {α : Type u} [group α] :

if G is a group then with_zero G is a group with zero.

Equations
@[protected, instance]
Equations
@[protected, instance]
Equations
@[protected, instance]
def with_zero.semiring {α : Type u} [semiring α] :
Equations