Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.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 VariablesN.Sectioncontents.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
forallxy : 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
forallxy : 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.1end =
match nat_distance_sig x y with
| inl s => s.1
| inr s => s.1end
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.Endcontents.(* 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: forallxy : 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: forallxy : 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: forallxy : N, Decidable (x ≤ y)
forallxy : N,
{z : N & x + z = 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: forallxy : N, Decidable (x ≤ y) x, y: N
({z : N & plus x z = y} + {z : N & plus y z = 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: forallxy : N, Decidable (x ≤ y) x, y: N E: x ≤ y
({z : N & plus x z = y} + {z : N & plus y z = 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: forallxy : N, Decidable (x ≤ y) x, y: N E: ~ (x ≤ y)
({z : N & plus x z = y} + {z : N & plus y z = 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: forallxy : N, Decidable (x ≤ y) x, y: N E: x ≤ y
({z : N & plus x z = y} + {z : N & plus y z = 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: forallxy : 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: forallxy : N, Decidable (x ≤ y) x, y: N E: x ≤ 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: forallxy : N, Decidable (x ≤ y) x, y: N E: ~ (x ≤ y)
({z : N & plus x z = y} + {z : N & plus y z = 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: forallxy : 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: forallxy : 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 & plus x z = y} + {z : N & plus y z = 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 & plus x z = y} + {z : N & plus y z = 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 & plus x z = y} + {z : N & plus y z = 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 & plus x z = y} + {z : N & plus y z = 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 & plus x z = y} + {z : N & plus y z = 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