Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import HoTT.Classes.interfaces.abstract_algebra HoTT.Classes.interfaces.orders HoTT.Classes.theory.naturals. Generalizable Variables N. Section contents. Context `{Funext} `{Univalence}. Context `{Naturals N}. (* Add Ring N : (rings.stdlib_semiring_theory N). *) (* NatDistance instances are all equivalent, because their behavior is fully determined by the specification. *)
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N

forall x y : N, nat_distance x y = nat_distance x y
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N

forall x y : N, nat_distance x y = nat_distance x y
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y: N

nat_distance x y = nat_distance x y
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y: N

match nat_distance_sig x y with | inl s => s.1 | inr s => s.1 end = match nat_distance_sig x y with | inl s => s.1 | inr s => s.1 end
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y, z1: N
E1: x + z1 = y
z2: N
E2: x + z2 = y

z1 = z2
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y, z1: N
E1: x + z1 = y
z2: N
E2: y + z2 = x
z1 = z2
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y, z1: N
E1: y + z1 = x
z2: N
E2: x + z2 = y
z1 = z2
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y, z1: N
E1: y + z1 = x
z2: N
E2: y + z2 = x
z1 = z2
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y, z1: N
E1: x + z1 = y
z2: N
E2: x + z2 = y

z1 = z2
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y, z1: N
E1: x + z1 = y
z2: N
E2: x + z2 = y

x + z1 = x + z2
path_via y.
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y, z1: N
E1: x + z1 = y
z2: N
E2: y + z2 = x

z1 = z2
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y, z1, z2: N
E1: y + (z2 + z1) = y + 0
E2: y + z2 = x

z1 = z2
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y, z1, z2: N
E1: z2 + z1 = 0
E2: y + z2 = x

z1 = z2
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y, z1, z2: N
E1: ((z2 = 0) * (z1 = 0))%type
E2: y + z2 = x

z1 = z2
destruct E1;path_via 0.
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y, z1: N
E1: y + z1 = x
z2: N
E2: x + z2 = y

z1 = z2
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y, z1, z2: N
E1: x + (z2 + z1) = x + 0
E2: x + z2 = y

z1 = z2
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y, z1, z2: N
E1: z2 + z1 = 0
E2: x + z2 = y

z1 = z2
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y, z1, z2: N
E1: ((z2 = 0) * (z1 = 0))%type
E2: x + z2 = y

z1 = z2
destruct E1;path_via 0.
H: Funext
H0: Univalence
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H1: Naturals N
a, b: NatDistance N
x, y, z1: N
E1: y + z1 = x
z2: N
E2: y + z2 = x

z1 = z2
apply (left_cancellation plus y);path_via x. Qed. End contents. (* An existing instance of [CutMinus] allows to create an instance of [NatDistance] *)
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
TrivialApart0: TrivialApart N
cm: CutMinus N
CutMinusSpec0: CutMinusSpec N cm
H0: forall x y : N, Decidable (x ≤ y)

NatDistance N
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
TrivialApart0: TrivialApart N
cm: CutMinus N
CutMinusSpec0: CutMinusSpec N cm
H0: forall x y : N, Decidable (x ≤ y)

NatDistance N
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
TrivialApart0: TrivialApart N
cm: CutMinus N
CutMinusSpec0: CutMinusSpec N cm
H0: forall x y : N, Decidable (x ≤ y)

forall x y : N, ({z : N & (x + z)%mc = y} + {z : N & (y + z)%mc = x})%type
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
TrivialApart0: TrivialApart N
cm: CutMinus N
CutMinusSpec0: CutMinusSpec N cm
H0: forall x y : N, Decidable (x ≤ y)
x, y: N

({z : N & (x + z)%mc = y} + {z : N & (y + z)%mc = x})%type
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
TrivialApart0: TrivialApart N
cm: CutMinus N
CutMinusSpec0: CutMinusSpec N cm
H0: forall x y : N, Decidable (x ≤ y)
x, y: N
E: x ≤ y

({z : N & (x + z)%mc = y} + {z : N & (y + z)%mc = x})%type
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
TrivialApart0: TrivialApart N
cm: CutMinus N
CutMinusSpec0: CutMinusSpec N cm
H0: forall x y : N, Decidable (x ≤ y)
x, y: N
E: ~ (x ≤ y)
({z : N & (x + z)%mc = y} + {z : N & (y + z)%mc = x})%type
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
TrivialApart0: TrivialApart N
cm: CutMinus N
CutMinusSpec0: CutMinusSpec N cm
H0: forall x y : N, Decidable (x ≤ y)
x, y: N
E: x ≤ y

({z : N & (x + z)%mc = y} + {z : N & (y + z)%mc = x})%type
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
TrivialApart0: TrivialApart N
cm: CutMinus N
CutMinusSpec0: CutMinusSpec N cm
H0: forall x y : N, Decidable (x ≤ y)
x, y: N
E: x ≤ y

{z : N & x + z = y}
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
TrivialApart0: TrivialApart N
cm: CutMinus N
CutMinusSpec0: CutMinusSpec N cm
H0: forall x y : N, Decidable (x ≤ y)
x, y: N
E: x ≤ y

x + (y ∸ x) = y
rewrite rings.plus_comm;apply cut_minus_le;trivial.
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
TrivialApart0: TrivialApart N
cm: CutMinus N
CutMinusSpec0: CutMinusSpec N cm
H0: forall x y : N, Decidable (x ≤ y)
x, y: N
E: ~ (x ≤ y)

({z : N & (x + z)%mc = y} + {z : N & (y + z)%mc = x})%type
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
TrivialApart0: TrivialApart N
cm: CutMinus N
CutMinusSpec0: CutMinusSpec N cm
H0: forall x y : N, Decidable (x ≤ y)
x, y: N
E: ~ (x ≤ y)

{z : N & y + z = x}
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
TrivialApart0: TrivialApart N
cm: CutMinus N
CutMinusSpec0: CutMinusSpec N cm
H0: forall x y : N, Decidable (x ≤ y)
x, y: N
E: ~ (x ≤ y)

y + (x ∸ y) = x
rewrite rings.plus_comm;apply cut_minus_le, orders.le_flip;trivial. Defined. (* Using the preceding instance we can make an instance for arbitrary models of the naturals by translation into [nat] on which we already have a [CutMinus] instance. *)
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N

NatDistance N
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N

NatDistance N
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
x, y: N

({z : N & (x + z)%mc = y} + {z : N & (y + z)%mc = x})%type
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
x, y: N
n: nat
E: naturals_to_semiring N nat x + n = naturals_to_semiring N nat y

({z : N & (x + z)%mc = y} + {z : N & (y + z)%mc = x})%type
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
x, y: N
n: nat
E: naturals_to_semiring N nat y + n = naturals_to_semiring N nat x
({z : N & (x + z)%mc = y} + {z : N & (y + z)%mc = x})%type
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
x, y: N
n: nat
E: naturals_to_semiring N nat x + n = naturals_to_semiring N nat y

({z : N & (x + z)%mc = y} + {z : N & (y + z)%mc = x})%type
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
x, y: N
n: nat
E: naturals_to_semiring N nat x + n = naturals_to_semiring N nat y

{z : N & x + z = y}
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
x, y: N
n: nat
E: naturals_to_semiring N nat x + n = naturals_to_semiring N nat y

x + naturals_to_semiring nat N n = y
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
x, y: N
n: nat
E: naturals_to_semiring N nat x + n = naturals_to_semiring N nat y

x + naturals_to_semiring nat N n = naturals_to_semiring nat N (naturals_to_semiring N nat x + n)
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
x, y: N
n: nat
E: naturals_to_semiring N nat x + n = naturals_to_semiring N nat y

x + naturals_to_semiring nat N n = x + naturals_to_semiring nat N n
split.
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
x, y: N
n: nat
E: naturals_to_semiring N nat y + n = naturals_to_semiring N nat x

({z : N & (x + z)%mc = y} + {z : N & (y + z)%mc = x})%type
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
x, y: N
n: nat
E: naturals_to_semiring N nat y + n = naturals_to_semiring N nat x

{z : N & y + z = x}
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
x, y: N
n: nat
E: naturals_to_semiring N nat y + n = naturals_to_semiring N nat x

y + naturals_to_semiring nat N n = x
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
x, y: N
n: nat
E: naturals_to_semiring N nat y + n = naturals_to_semiring N nat x

y + naturals_to_semiring nat N n = naturals_to_semiring nat N (naturals_to_semiring N nat y + n)
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
x, y: N
n: nat
E: naturals_to_semiring N nat y + n = naturals_to_semiring N nat x

y + naturals_to_semiring nat N n = y + naturals_to_semiring nat N n
split. Defined.