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.implementations.peano_naturals
HoTT.Classes.interfaces.abstract_algebra
HoTT.Classes.interfaces.orders
HoTT.Classes.interfaces.integers
HoTT.Classes.theory.rings
HoTT.Classes.theory.groups
HoTT.Classes.theory.apartness
HoTT.Classes.orders.sum
HoTT.Classes.orders.rings
HoTT.Classes.tactics.ring_tac
HoTT.Classes.theory.naturals.Generalizable VariablesB.Import ring_quote.Quoting.Instances.Local Set Universe Minimization ToSet.ModuleNatPair.ModuleImport PairT.RecordT (N : Type) := C { pos : N ; neg : N }.Arguments C {N} _ _.Arguments pos {N} _.Arguments neg {N} _.Sectioncontents.UniverseUN UNalt.Context (N : Type@{UN}) `{Naturals@{UN UN UN UN UN UN UN UNalt} 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
IsHSet (T 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
IsHSet (T 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
{_ : N & N} <~> T 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 E: {_ : N & N} <~> T N
IsHSet (T 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
{_ : N & N} <~> T N
issig.
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 E: {_ : N & N} <~> T N
IsHSet (T N)
exact (istrunc_equiv_istrunc _ E).Qed.#[export] Instanceinject : Cast N (T N) := funx => C x 0.Definitionequiv := funxy => pos x + neg y = pos y + neg 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
EquivRel equiv
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
EquivRel equiv
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
Reflexive equiv
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
Symmetric equiv
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
Transitive equiv
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
Reflexive equiv
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
forallx : T N, equiv x x
reflexivity.
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
Symmetric equiv
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
forallxy : T N, equiv x y -> equiv y 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
forallxy : T N,
pos x + neg y = pos y + neg x ->
pos y + neg x = pos x + neg y
intros ??;applysymmetry.
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
Transitive equiv
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
forallxyz : T N,
equiv x y -> equiv y z -> equiv x z
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
forallxyz : T N,
pos x + neg y = pos y + neg x ->
pos y + neg z = pos z + neg y ->
pos x + neg z = pos z + neg 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 a, b, c: T N E1: pos a + neg b = pos b + neg a E2: pos b + neg c = pos c + neg b
pos a + neg c = pos c + neg a
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 a, b, c: T N E1: pos a + neg b = pos b + neg a E2: pos b + neg c = pos c + neg b
neg b + (pos a + neg c) = neg b + (pos c + neg a)
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 a, b, c: T N E1: pos a + neg b = pos b + neg a E2: pos b + neg c = pos c + neg b
neg b + pos a + neg c = neg b + (pos c + neg a)
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 a, b, c: T N E1: pos a + neg b = pos b + neg a E2: pos b + neg c = pos c + neg b
pos b + neg a + neg c = neg b + (pos c + neg a)
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 a, b, c: T N E1: pos a + neg b = pos b + neg a E2: pos b + neg c = pos c + neg b
neg a + pos b + neg c = neg b + (pos c + neg a)
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 a, b, c: T N E1: pos a + neg b = pos b + neg a E2: pos b + neg c = pos c + neg b
neg a + (pos b + neg c) = neg b + (pos c + neg a)
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 a, b, c: T N E1: pos a + neg b = pos b + neg a E2: pos b + neg c = pos c + neg b
neg a + (pos c + neg b) = neg b + (pos c + neg a)
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 a, b, c: T N E1: pos a + neg b = pos b + neg a E2: pos b + neg c = pos c + neg b
neg a + (neg b + pos c) = neg b + (pos c + neg a)
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 a, b, c: T N E1: pos a + neg b = pos b + neg a E2: pos b + neg c = pos c + neg b
neg a + neg b + pos c = neg b + (pos c + neg a)
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 a, b, c: T N E1: pos a + neg b = pos b + neg a E2: pos b + neg c = pos c + neg b
neg b + neg a + pos c = neg b + (pos c + neg a)
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 a, b, c: T N E1: pos a + neg b = pos b + neg a E2: pos b + neg c = pos c + neg b
neg b + (neg a + pos c) = neg b + (pos c + neg a)
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 a, b, c: T N E1: pos a + neg b = pos b + neg a E2: pos b + neg c = pos c + neg b
neg b + (pos c + neg a) = neg b + (pos c + neg a)
reflexivity.Qed.Instancepl : Plus (T N) := funxy => C (pos x + pos y) (neg x + neg y).Instanceml : Mult (T N) := funxy =>
C (pos x * pos y + neg x * neg y) (pos x * neg y + neg x * pos y).Instanceopp : Negate (T N) := funx => C (neg x) (pos x).InstanceSR0 : Zero (T N) := C 00.InstanceSR1 : One (T N) := C 10.
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> equiv (q1 + r1) (q2 + r2)
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> equiv (q1 + r1) (q2 + r2)
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
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> equiv (q1 * r1) (q2 * r2)
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> equiv (q1 * r1) (q2 * r2)
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 q1, q2: T N Eq: equiv q1 q2 r1, r2: T N Er: equiv r1 r2
equiv (q1 * r1) (q2 * r2)
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r1, r2: T N Er: pos r1 + neg r2 = pos r2 + neg r1
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 q1, q2: T N E: pos q1 + neg q2 = pos q2 + neg q1
neg q1 + pos q2 = neg q2 + pos q1
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 q1, q2: T N E: pos q1 + neg q2 = pos q2 + neg q1
pos q2 + neg q1 = pos q1 + neg q2
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 q1, q2: T N E: pos q1 + neg q2 = pos q2 + neg q1
pos q1 + neg q2 = pos q2 + neg q1
apply E.Qed.DefinitionTle : Le (T N)
:= funab => pos a + neg b <= pos b + neg a.DefinitionTlt : Lt (T N)
:= funab => pos a + neg b < pos b + neg a.DefinitionTapart : Apart (T N)
:= funab => apart (pos a + neg b) (pos b + neg a).
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
is_mere_relation (T N) Tle
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
is_mere_relation (T N) Tle
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: T N
IsHProp (pos x + neg y ≤ pos y + neg x)
apply full_pseudo_srorder_le_hprop.Qed.
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
is_mere_relation (T N) Tlt
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
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
is_mere_relation (T N) Tapart
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
is_mere_relation (T N) Tapart
intros;unfold Tapart;exact _.Qed.
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> Tle q1 r1 -> Tle q2 r2
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> Tle q1 r1 -> Tle q2 r2
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 pa, na, pb, nb: N Eq: pa + nb = pb + na pc, nc, pd, nd: N Er: pc + nd = pd + nc E: pa + nc ≤ pc + na
pb + nd ≤ pd + nb
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 pa, na, pb, nb: N Eq: pa + nb = pb + na pc, nc, pd, nd: N Er: pc + nd = pd + nc E: pa + nc ≤ pc + na
pb + nd + (pc + na) ≤ pd + nb + (pc + na)
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 pa, na, pb, nb: N Eq: pa + nb = pb + na pc, nc, pd, nd: N Er: pc + nd = pd + nc E: pa + nc ≤ pc + na Erw: pb + nd + (pc + na) = pb + na + (pc + nd)
pb + nd + (pc + na) ≤ pd + nb + (pc + na)
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 pa, na, pb, nb: N Eq: pa + nb = pb + na pc, nc, pd, nd: N Er: pc + nd = pd + nc E: pa + nc ≤ pc + na
pa + nb + (pd + nc) ≤ pd + nb + (pc + na)
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 pa, na, pb, nb: N Eq: pa + nb = pb + na pc, nc, pd, nd: N Er: pc + nd = pd + nc E: pa + nc ≤ pc + na Erw: pa + nb + (pd + nc) = pd + nb + (pa + nc)
pa + nb + (pd + nc) ≤ pd + nb + (pc + na)
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 pa, na, pb, nb: N Eq: pa + nb = pb + na pc, nc, pd, nd: N Er: pc + nd = pd + nc E: pa + nc ≤ pc + na Erw: pa + nb + (pd + nc) = pd + nb + (pa + nc)
pd + nb + (pa + nc) ≤ pd + nb + (pc + na)
apply (order_preserving _), E.Qed.
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> Tle q1 r1 <~> Tle q2 r2
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> Tle q1 r1 <~> Tle q2 r2
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 q1, q2: T N X: equiv q1 q2 r1, r2: T N X0: equiv r1 r2
Tle q1 r1 <~> Tle q2 r2
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 q1, q2: T N X: equiv q1 q2 r1, r2: T N X0: equiv r1 r2
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> Tlt q1 r1 -> Tlt q2 r2
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> Tlt q1 r1 -> Tlt q2 r2
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 pa, na, pb, nb: N Eq: pa + nb = pb + na pc, nc, pd, nd: N Er: pc + nd = pd + nc E: pa + nc < pc + na
pb + nd < pd + nb
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 pa, na, pb, nb: N Eq: pa + nb = pb + na pc, nc, pd, nd: N Er: pc + nd = pd + nc E: pa + nc < pc + na
pb + nd + (pc + na) < pd + nb + (pc + na)
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 pa, na, pb, nb: N Eq: pa + nb = pb + na pc, nc, pd, nd: N Er: pc + nd = pd + nc E: pa + nc < pc + na Erw: pb + nd + (pc + na) = pb + na + (pc + nd)
pb + nd + (pc + na) < pd + nb + (pc + na)
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 pa, na, pb, nb: N Eq: pa + nb = pb + na pc, nc, pd, nd: N Er: pc + nd = pd + nc E: pa + nc < pc + na
pa + nb + (pd + nc) < pd + nb + (pc + na)
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 pa, na, pb, nb: N Eq: pa + nb = pb + na pc, nc, pd, nd: N Er: pc + nd = pd + nc E: pa + nc < pc + na Erw: pa + nb + (pd + nc) = pd + nb + (pa + nc)
pa + nb + (pd + nc) < pd + nb + (pc + na)
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 pa, na, pb, nb: N Eq: pa + nb = pb + na pc, nc, pd, nd: N Er: pc + nd = pd + nc E: pa + nc < pc + na Erw: pa + nb + (pd + nc) = pd + nb + (pa + nc)
pd + nb + (pa + nc) < pd + nb + (pc + na)
apply (strictly_order_preserving _), E.Qed.
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> Tlt q1 r1 <~> Tlt q2 r2
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> Tlt q1 r1 <~> Tlt q2 r2
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 q1, q2: T N X: equiv q1 q2 r1, r2: T N X0: equiv r1 r2
Tlt q1 r1 <~> Tlt q2 r2
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 q1, q2: T N X: equiv q1 q2 r1, r2: T N X0: equiv r1 r2
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
CoTransitive Tapart
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
CoTransitive Tapart
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
forallxy : T N,
Tapart x y ->
forallz : T N, hor (Tapart x z) (Tapart 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
forallxy : T N,
pos x + neg y ≶ pos y + neg x ->
forallz : T N,
hor (pos x + neg z ≶ pos z + neg x)
(pos z + neg y ≶ pos y + neg z)
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 q1, q2: T N Eq: pos q1 + neg q2 ≶ pos q2 + neg q1 r: T N
hor (pos q1 + neg r ≶ pos r + neg q1)
(pos r + neg q2 ≶ pos q2 + neg r)
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 q1, q2, r: T N Eq: neg r + (pos q1 + neg q2)
≶ neg r + (pos q2 + neg q1)
hor (pos q1 + neg r ≶ pos r + neg q1)
(pos r + neg q2 ≶ pos q2 + neg r)
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 q1, q2, r: T N Eq: neg r + (pos q1 + neg q2)
≶ neg r + (pos q2 + neg q1) E: neg r + (pos q1 + neg q2)
≶ pos r + neg q1 + neg q2
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 q1, q2, r: T N Eq: neg r + (pos q1 + neg q2)
≶ neg r + (pos q2 + neg q1) E: pos r + neg q1 + neg q2
≶ neg r + (pos q2 + neg q1)
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 q1, q2, r: T N Eq: neg r + (pos q1 + neg q2)
≶ neg r + (pos q2 + neg q1) E: neg r + (pos q1 + neg q2)
≶ pos r + neg q1 + neg q2
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 q1, q2, r: T N Eq: neg r + (pos q1 + neg q2)
≶ neg r + (pos q2 + neg q1) E: neg r + (pos q1 + neg q2)
≶ pos r + neg q1 + neg q2
pos q1 + neg r ≶ pos r + neg q1
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 q1, q2, r: T N Eq: neg r + (pos q1 + neg q2)
≶ neg r + (pos q2 + neg q1) E: neg r + (pos q1 + neg q2)
≶ pos r + neg q1 + neg q2
pos q1 + neg r + neg q2 ≶ pos r + neg q1 + neg q2
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 q1, q2, r: T N Eq: neg r + (pos q1 + neg q2)
≶ neg r + (pos q2 + neg q1) E: neg r + (pos q1 + neg q2)
≶ pos r + neg q1 + neg q2 Hrw: pos q1 + neg r + neg q2 =
neg r + (pos q1 + neg q2)
pos q1 + neg r + neg q2 ≶ pos r + neg q1 + neg q2
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 q1, q2, r: T N Eq: neg r + (pos q1 + neg q2)
≶ neg r + (pos q2 + neg q1) E: neg r + (pos q1 + neg q2)
≶ pos r + neg q1 + neg q2
neg r + (pos q1 + neg q2) ≶ pos r + neg q1 + neg q2
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 q1, q2, r: T N Eq: neg r + (pos q1 + neg q2)
≶ neg r + (pos q2 + neg q1) E: pos r + neg q1 + neg q2
≶ neg r + (pos q2 + neg q1)
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 q1, q2, r: T N Eq: neg r + (pos q1 + neg q2)
≶ neg r + (pos q2 + neg q1) E: pos r + neg q1 + neg q2
≶ neg r + (pos q2 + neg q1)
pos r + neg q2 ≶ pos q2 + neg r
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 q1, q2, r: T N Eq: neg r + (pos q1 + neg q2)
≶ neg r + (pos q2 + neg q1) E: pos r + neg q1 + neg q2
≶ neg r + (pos q2 + neg q1)
pos r + neg q2 + neg q1 ≶ pos q2 + neg r + neg q1
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 q1, q2, r: T N Eq: neg r + (pos q1 + neg q2)
≶ neg r + (pos q2 + neg q1) E: pos r + neg q1 + neg q2
≶ neg r + (pos q2 + neg q1) Hrw: pos r + neg q2 + neg q1 =
pos r + neg q1 + neg q2
pos r + neg q2 + neg q1 ≶ pos q2 + neg r + neg q1
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 q1, q2, r: T N Eq: neg r + (pos q1 + neg q2)
≶ neg r + (pos q2 + neg q1) E: pos r + neg q1 + neg q2
≶ neg r + (pos q2 + neg q1)
pos r + neg q1 + neg q2 ≶ pos q2 + neg r + neg q1
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 q1, q2, r: T N Eq: neg r + (pos q1 + neg q2)
≶ neg r + (pos q2 + neg q1) E: pos r + neg q1 + neg q2
≶ neg r + (pos q2 + neg q1) Hrw: pos q2 + neg r + neg q1 =
neg r + (pos q2 + neg q1)
pos r + neg q1 + neg q2 ≶ pos q2 + neg r + neg q1
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 q1, q2, r: T N Eq: neg r + (pos q1 + neg q2)
≶ neg r + (pos q2 + neg q1) E: pos r + neg q1 + neg q2
≶ neg r + (pos q2 + neg q1)
pos r + neg q1 + neg q2 ≶ neg r + (pos q2 + neg q1)
trivial.Qed.Existing Instanceapart_cotrans.
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
Symmetric Tapart
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
Symmetric Tapart
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
forallxy : T N, Tapart x y -> Tapart y 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
forallxy : T N,
pos x + neg y ≶ pos y + neg x ->
pos y + neg x ≶ pos x + neg y
intros ??;applysymmetry.Qed.
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> Tapart q1 r1 -> Tapart q2 r2
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> Tapart q1 r1 -> Tapart q2 r2
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr : T N, Tapart q1 r -> Tapart q2 r
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 E: forallq1q2 : T N,
equiv q1 q2 ->
forallr : T N, Tapart q1 r -> Tapart q2 r
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> Tapart q1 r1 -> Tapart q2 r2
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr : T N, Tapart q1 r -> Tapart q2 r
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 q1, q2: T N Eq: equiv q1 q2 r: T N Er: Tapart q1 r
Tapart q2 r
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r: T N Er: pos q1 + neg r ≶ pos r + neg q1
pos q2 + neg r ≶ pos r + neg q2
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r: T N Er: pos q1 + neg r ≶ pos r + neg q1
pos q2 + neg r + neg q1 ≶ pos r + neg q2 + neg q1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r: T N Er: pos q1 + neg r ≶ pos r + neg q1 Hrw: pos q2 + neg r + neg q1 =
pos q2 + neg q1 + neg r
pos q2 + neg r + neg q1 ≶ pos r + neg q2 + neg q1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r: T N Er: pos q1 + neg r ≶ pos r + neg q1
pos q2 + neg q1 + neg r ≶ pos r + neg q2 + neg q1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r: T N Er: pos q1 + neg r ≶ pos r + neg q1
pos q1 + neg q2 + neg r ≶ pos r + neg q2 + neg q1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r: T N Er: pos q1 + neg r ≶ pos r + neg q1 Hrw: pos q1 + neg q2 + neg r =
neg q2 + (pos q1 + neg r)
pos q1 + neg q2 + neg r ≶ pos r + neg q2 + neg q1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r: T N Er: pos q1 + neg r ≶ pos r + neg q1
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 q1, q2: T N Eq: pos q1 + neg q2 = pos q2 + neg q1 r: T N Er: pos q1 + neg r ≶ pos r + neg q1
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 E: forallq1q2 : T N,
equiv q1 q2 ->
forallr : T N, Tapart q1 r -> Tapart q2 r
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> Tapart q1 r1 -> Tapart q2 r2
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 E: forallq1q2 : T N,
equiv q1 q2 ->
forallr : T N, Tapart q1 r -> Tapart q2 r q1, q2: T N Eq: equiv q1 q2 r1, r2: T N Er: equiv r1 r2 E': Tapart q1 r1
Tapart q2 r2
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 E: forallq1q2 : T N,
equiv q1 q2 ->
forallr : T N, Tapart q1 r -> Tapart q2 r q1, q2: T N Eq: equiv q1 q2 r1, r2: T N Er: equiv r1 r2 E': Tapart q1 r1
Tapart q1 r2
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 E: forallq1q2 : T N,
equiv q1 q2 ->
forallr : T N, Tapart q1 r -> Tapart q2 r q1, q2: T N Eq: equiv q1 q2 r1, r2: T N Er: equiv r1 r2 E': Tapart q1 r1
equiv r2 r1
applysymmetry;trivial.Qed.
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> Tapart q1 r1 <~> Tapart q2 r2
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
forallq1q2 : T N,
equiv q1 q2 ->
forallr1r2 : T N,
equiv r1 r2 -> Tapart q1 r1 <~> Tapart q2 r2
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 q1, q2: T N Eq: equiv q1 q2 r1, r2: T N Er: equiv r1 r2
Tapart q1 r1 <~> Tapart q2 r2
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 q1, q2: T N Eq: equiv q1 q2 r1, r2: T N Er: equiv r1 r2
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H0: IsCRing B
T N -> B
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H0: IsCRing B
T N -> B
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H0: IsCRing B p: T N
B
exact (naturals_to_semiring N B (pos p) - naturals_to_semiring N B (neg p)).Defined.
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H0: IsCRing B
forallab : T N, equiv a b -> to_ring a = to_ring b
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H0: IsCRing B
forallab : T N, equiv a b -> to_ring a = to_ring b
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H0: IsCRing B pa, na, pb, nb: N E: pos {| pos := pa; neg := na |} +
neg {| pos := pb; neg := nb |} =
pos {| pos := pb; neg := nb |} +
neg {| pos := pa; neg := na |}
to_ring {| pos := pa; neg := na |} =
to_ring {| pos := pb; neg := nb |}
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H0: IsCRing B pa, na, pb, nb: N E: pa + nb = pb + na
naturals_to_semiring N B pa -
naturals_to_semiring N B na =
naturals_to_semiring N B pb -
naturals_to_semiring N B nb
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H0: IsCRing B pa, na, pb, nb: N E: pa + nb = pb + na
naturals_to_semiring N B na +
naturals_to_semiring N B nb +
(naturals_to_semiring N B pa -
naturals_to_semiring N B na) =
naturals_to_semiring N B na +
naturals_to_semiring N B nb +
(naturals_to_semiring N B pb -
naturals_to_semiring N B nb)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H0: IsCRing B pa, na, pb, nb: N E: pa + nb = pb + na
naturals_to_semiring N B pa +
naturals_to_semiring N B nb =
naturals_to_semiring N B na +
naturals_to_semiring N B nb +
(naturals_to_semiring N B pb -
naturals_to_semiring N B nb)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H0: IsCRing B pa, na, pb, nb: N E: pa + nb = pb + na
naturals_to_semiring N B pa +
naturals_to_semiring N B nb =
naturals_to_semiring N B pb +
naturals_to_semiring N B na
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H0: IsCRing B pa, na, pb, nb: N E: pa + nb = pb + na
naturals_to_semiring N B (pa + nb) =
naturals_to_semiring N B (pb + na)
apply ap,E.Qed.Endto_ring.Endcontents.Arguments equiv {_ _} _ _.Arguments Tle {_ _ _} _ _.Arguments Tlt {_ _ _} _ _.Arguments Tapart {_ _ _} _ _.Arguments to_ring N {_} B {_ _ _ _ _ _} / _.EndPairT.Sectioncontents.UniverseUN UNalt.Context `{Funext} `{Univalence} (N : Type@{UN})
`{Naturals@{UN UN UN UN UN UN UN UNalt} N}.(* Add Ring SR : (rings.stdlib_semiring_theory SR). *)InstanceN_fullpartial : FullPartialOrder Ale Alt
:= fullpseudo_fullpartial@{UN UN UN UN UN UN UN Ularge}.DefinitionZ@{} : Type@{UN} := @quotient _ PairT.equiv@{UN UNalt} _.#[export] InstanceZ_of_pair : Cast (PairT.T N) Z := class_of _.#[export] InstanceZ_of_N : Cast N Z := Compose Z_of_pair (PairT.inject@{UN UNalt} _).DefinitionZ_path {xy} : PairT.equiv x y -> Z_of_pair x = Z_of_pair y
:= related_classes_eq _.Definitionrelated_path {xy} : Z_of_pair x = Z_of_pair y -> PairT.equiv x y
:= classes_eq_related@{UN UN Ularge UN Ularge} _ _ _.DefinitionZ_rect@{i} (P : Z -> Type@{i}) {sP : forallx, IsHSet (P x)}
(dclass : forallx : PairT.T N, P (' x))
(dequiv : forallxyE, (Z_path E) # (dclass x) = (dclass y))
: forallq, P q
:= quotient_ind PairT.equiv P dclass dequiv.DefinitionZ_computeP {sP} dclassdequivx
: @Z_rect P sP dclass dequiv (Z_of_pair x) = dclass x := 1.DefinitionZ_compute_pathP {sP} dclassdequivqr (E : PairT.equiv q r)
: apD (@Z_rect P sP dclass dequiv) (Z_path E) = dequiv q r E
:= quotient_ind_compute_path _ _ _ _ _ _ _ _.
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 P: Z -> Type sP: forallx : Z, IsHProp (P x) dclass: forallx : T N, P (' x)
forallx : Z, P x
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 P: Z -> Type sP: forallx : Z, IsHProp (P x) dclass: forallx : T N, P (' x)
forallx : Z, P x
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 P: Z -> Type sP: forallx : Z, IsHProp (P x) dclass: forallx : T N, P (' x)
forall (xy : T N) (E : equiv x y),
transport P (Z_path E) (dclass x) = dclass y
intros;apply path_ishprop@{i}.Defined.
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 P: Z -> Z -> Type sP: is_mere_relation Z P dclass: forallxy : T N, P (' x) (' y)
forallxy : Z, P 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 P: Z -> Z -> Type sP: is_mere_relation Z P dclass: forallxy : T N, P (' x) (' y)
forallxy : Z, P 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 P: Z -> Z -> Type sP: is_mere_relation Z P dclass: forallxy : T N, P (' x) (' y) x: T N
forally : Z, P (' 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 P: Z -> Z -> Type sP: is_mere_relation Z P dclass: forallxy : T N, P (' x) (' y) x, y: T N
P (' x) (' y)
apply dclass.Defined.
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 P: Z -> Z -> Z -> Type sP: forallxyz : Z, IsHProp (P x y z) dclass: forallxyz : T N, P (' x) (' y) (' z)
forallxyz : Z, P x y z
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 P: Z -> Z -> Z -> Type sP: forallxyz : Z, IsHProp (P x y z) dclass: forallxyz : T N, P (' x) (' y) (' z)
forallxyz : Z, P x y z
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 P: Z -> Z -> Z -> Type sP: forallxyz : Z, IsHProp (P x y z) dclass: forallxyz : T N, P (' x) (' y) (' z) x: Z
IsHProp (forallyz : Z, P x y z)
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 P: Z -> Z -> Z -> Type sP: forallxyz : Z, IsHProp (P x y z) dclass: forallxyz : T N, P (' x) (' y) (' z) x: T N
forallyz : Z, P (' x) y z
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 P: Z -> Z -> Z -> Type sP: forallxyz : Z, IsHProp (P x y z) dclass: forallxyz : T N, P (' x) (' y) (' z) x: Z
IsHProp (forallyz : Z, P x y z)
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 P: Z -> Z -> Z -> Type sP: forallxyz : Z, IsHProp (P x y z) dclass: forallxyz : T N, P (' x) (' y) (' z) x: Z
foralla : Z, IsHProp (forallz : Z, P x a z)
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 P: Z -> Z -> Z -> Type sP: forallxyz : Z, IsHProp (P x y z) dclass: forallxyz : T N, P (' x) (' y) (' z) x, a: Z
IsHProp (forallz : Z, P x a z)
exact istrunc_forall@{UN i j}.Defined.DefinitionZ_rec@{i} {T : Type@{i} } {sT : IsHSet T}
: forall (dclass : PairT.T N -> T)
(dequiv : forallxy, PairT.equiv x y -> dclass x = dclass y),
Z -> T
:= quotient_rec _.DefinitionZ_rec_computeTsTdclassdequivx
: @Z_rec T sT dclass dequiv (' x) = dclass x
:= 1.DefinitionZ_rec2@{i j} {T:Type@{i} } {sT : IsHSet T}
: forall (dclass : PairT.T N -> PairT.T N -> T)
(dequiv : forallx1x2, PairT.equiv x1 x2 -> forally1y2, PairT.equiv y1 y2 ->
dclass x1 y1 = dclass x2 y2),
Z -> Z -> T
:= @quotient_rec2@{UN UN UN j i} _ _ _ _ _ (Build_HSet _).DefinitionZ_rec2_compute {TsT} dclassdequivxy
: @Z_rec2 T sT dclass dequiv (' x) (' y) = dclass x y
:= 1.
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 H2: DecidablePaths N
forallqr : T N, Decidable (' q = ' r)
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 H2: DecidablePaths N
forallqr : T N, Decidable (' q = ' r)
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 H2: DecidablePaths N q, r: T N
Decidable (' q = ' r)
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 H2: DecidablePaths N q, r: T N E: equiv q r
Decidable (' q = ' r)
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 H2: DecidablePaths N q, r: T N E: ~ equiv q r
Decidable (' q = ' r)
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 H2: DecidablePaths N q, r: T N E: equiv q r
Decidable (' q = ' r)
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 H2: DecidablePaths N q, r: T N E: equiv q r
' q = ' r
apply Z_path,E.
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 H2: DecidablePaths N q, r: T N E: ~ equiv q r
Decidable (' q = ' r)
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 H2: DecidablePaths N q, r: T N E: ~ equiv q r
' q <> ' r
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 H2: DecidablePaths N q, r: T N E: ~ equiv q r E': ' q = ' r
Empty
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 H2: DecidablePaths N q, r: T N E: ~ equiv q r E': ' q = ' r
equiv q r
exact (related_path E').Defined.
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 H2: DecidablePaths N
DecidablePaths Z
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 H2: DecidablePaths N
DecidablePaths Z
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 H2: DecidablePaths N
forallxy : Z, Decidable (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 H2: DecidablePaths N
forallxy : T N, Decidable (' x = ' y)
exact dec_Z_of_pair.Defined.(* Relations, operations and constants *)#[export] InstanceZ0 : Zero Z := ' 0.#[export] InstanceZ1 : One Z := ' 1.
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
Plus Z
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
Plus Z
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
forallx1x2 : T N,
equiv x1 x2 ->
forally1y2 : T N,
equiv y1 y2 -> ' pl N x1 y1 = ' pl N x2 y2
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
Mult Z
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
Mult Z
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
forallx1x2 : T N,
equiv x1 x2 ->
forally1y2 : T N,
equiv y1 y2 -> ' ml N x1 y1 = ' ml N x2 y2
intros;apply Z_path;eapply PairT.ml_respects;trivial.Defined.(* Without this, typeclass resolution for e.g. [Monoid Z Z_plus] tries to get it from [SemiRing Z Z_plus ?mult] and fills the evar with the unfolded value, which does case analysis on quotient. *)GlobalTypeclasses Opaque Z_plus Z_mult.DefinitionZ_mult_computeqr : (' q) * (' r) = ' (PairT.ml _ q r)
:= 1.
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
Negate Z
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
Negate Z
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
Z -> Z
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
forallxy : T N, equiv x y -> ' opp N x = ' opp N 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
IsCRing Z
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
IsCRing Z
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
IsHSet Z
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
Associative sg_op
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
LeftIdentity sg_op mon_unit
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
RightIdentity sg_op mon_unit
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
LeftInverse sg_op inv mon_unit
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
RightInverse sg_op inv mon_unit
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
Commutative plus
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
IsHSet Z
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
Associative sg_op
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
LeftIdentity sg_op mon_unit
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
RightIdentity sg_op mon_unit
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
Commutative sg_op
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
LeftDistribute mult plus
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
Associative sg_op
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
LeftIdentity sg_op mon_unit
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
RightIdentity sg_op mon_unit
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
LeftInverse sg_op inv mon_unit
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
RightInverse sg_op inv mon_unit
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
Commutative plus
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
Associative sg_op
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
LeftIdentity sg_op mon_unit
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
RightIdentity sg_op mon_unit
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
Commutative sg_op
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
LeftDistribute mult plus
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
forallxyz : Z, x + (y + z) = x + y + z
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
forally : Z, 0 + y = 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
forallx : Z, x + 0 = x
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
forallx : Z, inv x + x = 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
forallx : Z, x + inv x = 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
forallxy : Z, x + y = y + x
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
forallxyz : Z, x * (y * z) = x * y * z
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
forally : Z, 1 * y = 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
forallx : Z, x * 1 = x
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
forallxy : Z, x * y = y * x
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
forallabc : Z, a * (b + c) = a * b + a * c
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
forallxyz : Z, x + (y + z) = x + y + z
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
forallxyz : T N,
' x + (' y + ' z) = ' x + ' y + ' z
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, c: T N
pos a + (pos b + pos c) + (neg a + neg b + neg c) =
pos a + pos b + pos c + (neg a + (neg b + neg c))
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, c: T N
pos a + pos b + pos c + neg a + neg b + neg c =
pos a + pos b + pos c + neg a + neg b + neg c
reflexivity.
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
forally : Z, 0 + y = 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
forallx : T N, 0 + ' x = ' x
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: T N
0 + pos a + neg a = pos a + (0 + neg a)
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: T N
pos a + neg a = pos a + neg a
reflexivity.
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
forallx : Z, x + 0 = x
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
forallx : T N, ' x + 0 = ' x
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: T N
pos a + 0 + neg a = pos a + (neg a + 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: T N
pos a + neg a = pos a + neg a
reflexivity.
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
forallx : Z, inv x + x = 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
forallx : T N, inv (' x) + ' x = 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: T N
neg a + pos a + 0 = 0 + (pos a + neg a)
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: T N
neg a + pos a = pos a + neg a
apply plus_comm.
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
forallx : Z, x + inv x = 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
forallx : T N, ' x + inv (' x) = 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: T N
pos a + neg a + 0 = 0 + (neg a + pos a)
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: T N
pos a + neg a = neg a + pos a
apply plus_comm.
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
forallxy : Z, x + y = y + x
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
forallxy : T N, ' x + ' y = ' y + ' x
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: T N
pos a + pos b + (neg b + neg a) =
pos b + pos a + (neg a + neg b)
apply ap011;apply plus_comm.
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
forallxyz : Z, x * (y * z) = x * y * z
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
forallxyz : T N,
' x * (' y * ' z) = ' x * ' y * ' z
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 pa, na, pb, nb, pc, nc: N
pa * (pb * pc + nb * nc) + na * (pb * nc + nb * pc) +
((pa * pb + na * nb) * nc + (pa * nb + na * pb) * pc) =
(pa * pb + na * nb) * pc + (pa * nb + na * pb) * nc +
(pa * (pb * nc + nb * pc) + na * (pb * pc + nb * nc))
ring_with_nat.
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
forally : Z, 1 * y = 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
forallx : T N, 1 * ' x = ' x
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 x: T N
1 * pos x + 0 * neg x + neg x =
pos x + (1 * neg x + 0 * pos x)
ring_with_nat.
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
forallx : Z, x * 1 = x
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
forallx : T N, ' x * 1 = ' x
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 x: T N
pos x * 1 + neg x * 0 + neg x =
pos x + (pos x * 0 + neg x * 1)
ring_with_nat.
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
forallxy : Z, x * y = y * x
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
forallxy : T N, ' x * ' y = ' y * ' x
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 x, y: T N
pos x * pos y + neg x * neg y +
(pos y * neg x + neg y * pos x) =
pos y * pos x + neg y * neg x +
(pos x * neg y + neg x * pos y)
ring_with_nat.
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
forallabc : Z, a * (b + c) = a * b + a * c
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
forallxyz : T N,
' x * (' y + ' z) = ' x * ' y + ' x * ' z
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 pa, na, pb, nb, pc, nc: N
pa * (pb + pc) + na * (nb + nc) +
(pa * nb + na * pb + (pa * nc + na * pc)) =
pa * pb + na * nb + (pa * pc + na * nc) +
(pa * (nb + nc) + na * (pb + pc))
ring_with_nat.Qed.(* A final word about inject *)
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
IsSemiRingPreserving (cast N Z)
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
IsSemiRingPreserving (cast N Z)
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
IsSemiGroupPreserving (cast N Z)
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
IsSemiGroupPreserving (cast N Z)
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
IsSemiGroupPreserving (cast N Z)
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 x, y: N
' sg_op x y = sg_op (' 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 x, y: N
equiv (inject N (sg_op x y))
(pl N (inject N x) (inject N 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 x, y: N
pos (inject N (sg_op x y)) +
neg (pl N (inject N x) (inject N y)) =
pos (pl N (inject N x) (inject N y)) +
neg (inject N (sg_op 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 x, y: N
sg_op x y + (0 + 0) = x + y + 0
ring_with_nat.
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
IsSemiGroupPreserving (cast N Z)
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 x, y: N
' sg_op x y = sg_op (' 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 x, y: N
equiv (inject N (sg_op x y))
(ml N (inject N x) (inject N 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 x, y: N
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
IsInjective (cast N Z)
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
IsInjective (cast N Z)
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 x, y: N E: ' x = ' y
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 x, y: N E: equiv (inject N x) (inject N y)
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 x, y: N E: pos (inject N x) + neg (inject N y) =
pos (inject N y) + neg (inject N x)
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 x, y: N E: x + 0 = y + 0
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 x, y: N E: x = y
x = y
trivial.Qed.
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
forallnm : N, ' {| pos := n; neg := m |} = ' n - ' m
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
forallnm : N, ' {| pos := n; neg := m |} = ' n - ' m
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 n, m: N
' {| pos := n; neg := m |} = ' n - ' m
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 n, m: N
n + (0 + m) = n + 0 + m
ring_with_nat.Qed.
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
Z -> Z -> HProp
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
Z -> Z -> HProp
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
forallx1x2 : T N,
equiv x1 x2 ->
forally1y2 : T N,
equiv y1 y2 ->
Build_HProp (Tle x1 y1) = Build_HProp (Tle x2 y2)
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 x1, x2: T N X: equiv x1 x2 y1, y2: T N X0: equiv y1 y2
Build_HProp (Tle x1 y1) = Build_HProp (Tle x2 y2)
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 x1, x2: T N X: equiv x1 x2 y1, y2: T N X0: equiv y1 y2
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 x1, x2: T N X: equiv x1 x2 y1, y2: T N X0: equiv y1 y2
Tle x1 y1 <~> Tle x2 y2
apply (PairT.le_respects _);trivial.Defined.#[export] InstanceZle@{} : Le Z := funxy => Zle_HProp 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
is_mere_relation Z Zle
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
is_mere_relation Z Zle
unfold Zle;exact _.Qed.
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
forallab : T N, (' a ≤ ' b) = Tle a b
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
forallab : T N, (' a ≤ ' b) = Tle a b
intros; exact idpath.Qed.
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
PartialOrder Zle
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
PartialOrder Zle
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
Reflexive le
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
Transitive le
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
AntiSymmetric le
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
Reflexive le
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
forallx : Z, x ≤ x
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
forallx : T N, ' x ≤ ' x
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 x: T N
' x ≤ ' x
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 x: T N
Tle x x
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 x: T N
pos x + neg x ≤ pos x + neg x
reflexivity.
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
Transitive le
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
forallxyz : Z, x ≤ y -> y ≤ z -> x ≤ z
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
forallxyz : T N,
' x ≤ ' y -> ' y ≤ ' z -> ' x ≤ ' z
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 pa, na, pb, nb, pc, nc: N
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 pa, na, pb, nb, pc, nc: N
pa + nb ≤ pb + na ->
pb + nc ≤ pc + nb -> pa + nc ≤ pc + na
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 pa, na, pb, nb, pc, nc: N E1: pa + nb ≤ pb + na E2: pb + nc ≤ pc + nb
pa + nc ≤ pc + na
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 pa, na, pb, nb, pc, nc: N E1: pa + nb ≤ pb + na E2: pb + nc ≤ pc + nb
pa + nc + (nb + pb) ≤ pc + na + (nb + pb)
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 pa, na, pb, nb, pc, nc: N E1: pa + nb ≤ pb + na E2: pb + nc ≤ pc + nb Hrw: pa + nc + (nb + pb) = pa + nb + (pb + nc)
pa + nc + (nb + pb) ≤ pc + na + (nb + pb)
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 pa, na, pb, nb, pc, nc: N E1: pa + nb ≤ pb + na E2: pb + nc ≤ pc + nb
pa + nb + (pb + nc) ≤ pc + na + (nb + pb)
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 pa, na, pb, nb, pc, nc: N E1: pa + nb ≤ pb + na E2: pb + nc ≤ pc + nb Hrw: pc + na + (nb + pb) = pb + na + (pc + nb)
pa + nb + (pb + nc) ≤ pc + na + (nb + pb)
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 pa, na, pb, nb, pc, nc: N E1: pa + nb ≤ pb + na E2: pb + nc ≤ pc + nb
pa + nb + (pb + nc) ≤ pb + na + (pc + nb)
apply plus_le_compat;trivial.
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
AntiSymmetric le
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
forallxy : Z, x ≤ y -> y ≤ x -> 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
forallxy : T N, ' x ≤ ' y -> ' y ≤ ' x -> ' 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 pa, na, pb, nb: N
pa + nb ≤ pb + na ->
pb + na ≤ pa + nb ->
' {| pos := pa; neg := na |} =
' {| pos := pb; neg := nb |}
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 pa, na, pb, nb: N E1: pa + nb ≤ pb + na E2: pb + na ≤ pa + nb
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
OrderEmbedding (cast N Z)
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
OrderEmbedding (cast N Z)
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
forallxy : N, x ≤ y -> ' 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
forallxy : N, ' x ≤ ' y -> 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
forallxy : N, x ≤ y -> ' 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 x, y: N X: x ≤ y
' 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 x, y: N X: x ≤ y
Tle (inject N x) (inject N 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 x, y: N X: x ≤ y
pos (inject N x) + neg (inject N y)
≤ pos (inject N y) + neg (inject N x)
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 x, y: N X: x ≤ y
x + 0 ≤ y + 0
rewrite2!plus_0_r;trivial.
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
forallxy : N, ' x ≤ ' y -> 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 x, y: N
' x ≤ ' y -> 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 x, y: N
Tle (inject N x) (inject N y) -> 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 x, y: N
pos (inject N x) + neg (inject N y)
≤ pos (inject N y) + neg (inject N x) -> 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 x, y: N
x + 0 ≤ y + 0 -> x ≤ y
rewrite2!plus_0_r;trivial.Qed.(* Coq pre 8.8 produces phantom universes, see GitHub Coq/Coq#1033. *)#[export] InstanceZle_cast_embedding@{} : OrderEmbedding (cast N Z)
:= ltac:(first [exact Zle_cast_embedding'@{Ularge Ularge}|
exact Zle_cast_embedding']).
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
forallz : Z, OrderPreserving (plus z)
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
forallz : Z, OrderPreserving (plus z)
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
forallzxy : Z, x ≤ y -> z + x ≤ z + 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
forallxyz : T N, ' y ≤ ' z -> ' x + ' y ≤ ' x + ' z
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 pc, nc, pa, na, pb, nb: N
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 pc, nc, pa, na, pb, nb: N
pa + nb ≤ pb + na ->
pc + pa + (nc + nb) ≤ pc + pb + (nc + na)
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 pc, nc, pa, na, pb, nb: N E: pa + nb ≤ pb + na
pc + pa + (nc + nb) ≤ pc + pb + (nc + na)
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 pc, nc, pa, na, pb, nb: N E: pa + nb ≤ pb + na Hrw: pc + pa + (nc + nb) = pc + nc + (pa + nb)
pc + pa + (nc + nb) ≤ pc + pb + (nc + na)
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 pc, nc, pa, na, pb, nb: N E: pa + nb ≤ pb + na
pc + nc + (pa + nb) ≤ pc + pb + (nc + na)
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 pc, nc, pa, na, pb, nb: N E: pa + nb ≤ pb + na Hrw: pc + pb + (nc + na) = pc + nc + (pb + na)
pc + nc + (pa + nb) ≤ pc + pb + (nc + na)
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 pc, nc, pa, na, pb, nb: N E: pa + nb ≤ pb + na
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
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
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
forallxy : Z, 0 ≤ x -> 0 ≤ y -> 0 ≤ 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
forallxy : T N, 0 ≤ ' x -> 0 ≤ ' y -> 0 ≤ ' 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 pa, na, pb, nb: N
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 pa, na, pb, nb: N
0 + na ≤ pa + 0 ->
0 + nb ≤ pb + 0 ->
0 + (pa * nb + na * pb) ≤ pa * pb + na * nb + 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 pa, na, pb, nb: N
na ≤ pa ->
nb ≤ pb -> pa * nb + na * pb ≤ pa * pb + na * nb
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 pa, na, pb, nb: N E1: na ≤ pa E2: nb ≤ pb
pa * nb + na * pb ≤ pa * pb + na * nb
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 pa, na, pb, nb: N E1: na ≤ pa E2: nb ≤ pb a: N Ea1: 0 ≤ a Ea2: pa = na + a b: N Eb1: 0 ≤ b Eb2: pb = nb + b
pa * nb + na * pb ≤ pa * pb + na * nb
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 pa, na, pb, nb: N E1: na ≤ pa E2: nb ≤ pb a: N Ea1: 0 ≤ a Ea2: pa = na + a b: N Eb1: 0 ≤ b Eb2: pb = nb + b
(na + a) * nb + na * (nb + b)
≤ (na + a) * (nb + b) + na * nb
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 pa, na, pb, nb: N E1: na ≤ pa E2: nb ≤ pb a: N Ea1: 0 ≤ a Ea2: pa = na + a b: N Eb1: 0 ≤ b Eb2: pb = nb + b
0 ≤ a * b
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 pa, na, pb, nb: N E1: na ≤ pa E2: nb ≤ pb a: N Ea1: 0 ≤ a Ea2: pa = na + a b: N Eb1: 0 ≤ b Eb2: pb = nb + b
(na + a) * (nb + b) + na * nb =
(na + a) * nb + na * (nb + b) + a * b
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 pa, na, pb, nb: N E1: na ≤ pa E2: nb ≤ pb a: N Ea1: 0 ≤ a Ea2: pa = na + a b: N Eb1: 0 ≤ b Eb2: pb = nb + b
0 ≤ a * b
apply nonneg_mult_compat;trivial.
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 pa, na, pb, nb: N E1: na ≤ pa E2: nb ≤ pb a: N Ea1: 0 ≤ a Ea2: pa = na + a b: N Eb1: 0 ≤ b Eb2: pb = nb + b
(na + a) * (nb + b) + na * nb =
(na + a) * nb + na * (nb + b) + a * b
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
SemiRingOrder Zle
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
SemiRingOrder Zle
pose proof Z_ring; apply rings.from_ring_order; exact _.Qed.(* Make this computable? Would need to compute through Z_ind2. *)
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 H2: forallxy : N, Decidable (x ≤ y)
forallxy : Z, Decidable (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 H2: forallxy : N, Decidable (x ≤ y)
forallxy : Z, Decidable (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 H2: forallxy : N, Decidable (x ≤ y)
forallxy : T N, Decidable (' 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 H2: forallxy : N, Decidable (x ≤ y) a, b: T N
Decidable (' a ≤ ' b)
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 H2: forallxy : N, Decidable (x ≤ y) a, b: T N
Decidable (Tle a b)
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 H2: forallxy : N, Decidable (x ≤ y) a, b: T N
Decidable (pos a + neg b ≤ pos b + neg a)
exact _.Qed.
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
Z -> Z -> HProp
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
Z -> Z -> HProp
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
forallx1x2 : T N,
equiv x1 x2 ->
forally1y2 : T N,
equiv y1 y2 ->
Build_HProp (Tlt x1 y1) = Build_HProp (Tlt x2 y2)
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 x1, x2: T N X: equiv x1 x2 y1, y2: T N X0: equiv y1 y2
Build_HProp (Tlt x1 y1) = Build_HProp (Tlt x2 y2)
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 x1, x2: T N X: equiv x1 x2 y1, y2: T N X0: equiv y1 y2
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 x1, x2: T N X: equiv x1 x2 y1, y2: T N X0: equiv y1 y2
Tlt x1 y1 <~> Tlt x2 y2
apply (PairT.lt_respects _);trivial.Defined.#[export] InstanceZlt@{} : Lt Z := funxy => Zlt_HProp 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
is_mere_relation Z Zlt
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
is_mere_relation Z Zlt
unfold Zlt;exact _.Qed.
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
forallab : T N, (' a < ' b) = Tlt a b
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
forallab : T N, (' a < ' b) = Tlt a b
reflexivity.Qed.(* Coq pre 8.8 produces phantom universes, see GitHub Coq/Coq#1033. *)DefinitionZlt_def@{i} := ltac:(first [exact Zlt_def'@{Uhuge i}|exact Zlt_def'@{i}]).
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
StrictOrder Zlt
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
StrictOrder Zlt
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
is_mere_relation Z lt
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
Irreflexive lt
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
Transitive lt
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
is_mere_relation Z lt
exact _.
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
Irreflexive lt
(* we need to change so that it sees Empty, needed to figure out IsHProp (using Funext) *)
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
forallx : Z, x < x -> Empty
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
forallx : T N, ' x < ' x -> Empty
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 pa, na: N
pa + na < pa + na -> Empty
apply irreflexivity,_.
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
Transitive lt
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
forallxyz : Z, x < y -> y < z -> x < z
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
forallxyz : T N,
' x < ' y -> ' y < ' z -> ' x < ' z
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 pa, na, pb, nb, pc, nc: N
pa + nb < pb + na ->
pb + nc < pc + nb -> pa + nc < pc + na
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 pa, na, pb, nb, pc, nc: N E1: pa + nb < pb + na E2: pb + nc < pc + nb
pa + nc < pc + na
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 pa, na, pb, nb, pc, nc: N E1: pa + nb < pb + na E2: pb + nc < pc + nb
pa + nc + (nb + pb) < pc + na + (nb + pb)
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 pa, na, pb, nb, pc, nc: N E1: pa + nb < pb + na E2: pb + nc < pc + nb Hrw: pa + nc + (nb + pb) = pa + nb + (pb + nc)
pa + nc + (nb + pb) < pc + na + (nb + pb)
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 pa, na, pb, nb, pc, nc: N E1: pa + nb < pb + na E2: pb + nc < pc + nb
pa + nb + (pb + nc) < pc + na + (nb + pb)
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 pa, na, pb, nb, pc, nc: N E1: pa + nb < pb + na E2: pb + nc < pc + nb Hrw: pc + na + (nb + pb) = pb + na + (pc + nb)
pa + nb + (pb + nc) < pc + na + (nb + pb)
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 pa, na, pb, nb, pc, nc: N E1: pa + nb < pb + na E2: pb + nc < pc + nb
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
forallz : Z, StrictlyOrderPreserving (plus z)
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
forallz : Z, StrictlyOrderPreserving (plus z)
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
forallxyz : T N, ' y < ' z -> ' x + ' y < ' x + ' z
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 pa, na, pb, nb, pc, nc: N
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 pa, na, pb, nb, pc, nc: N
pb + nc < pc + nb ->
pa + pb + (na + nc) < pa + pc + (na + nb)
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 pa, na, pb, nb, pc, nc: N E: pb + nc < pc + nb
pa + pb + (na + nc) < pa + pc + (na + nb)
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 pa, na, pb, nb, pc, nc: N E: pb + nc < pc + nb Hrw: pa + pb + (na + nc) = pa + na + (pb + nc)
pa + pb + (na + nc) < pa + pc + (na + nb)
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 pa, na, pb, nb, pc, nc: N E: pb + nc < pc + nb
pa + na + (pb + nc) < pa + pc + (na + nb)
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 pa, na, pb, nb, pc, nc: N E: pb + nc < pc + nb Hrw: pa + pc + (na + nb) = pa + na + (pc + nb)
pa + na + (pb + nc) < pa + pc + (na + nb)
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 pa, na, pb, nb, pc, nc: N E: pb + nc < pc + nb
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
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
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
forallxy : Z, 0 < x -> 0 < y -> 0 < 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
forallxy : T N, 0 < ' x -> 0 < ' y -> 0 < ' 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 pa, na, pb, nb: N
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 pa, na, pb, nb: N
0 + na < pa + 0 ->
0 + nb < pb + 0 ->
0 + (pa * nb + na * pb) < pa * pb + na * nb + 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 pa, na, pb, nb: N
na < pa ->
nb < pb -> pa * nb + na * pb < pa * pb + na * nb
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 pa, na, pb, nb: N E1: na < pa E2: nb < pb
pa * nb + na * pb < pa * pb + na * nb
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 pa, na, pb, nb: N E1: na < pa E2: nb < pb a: N Ea1: 0 < a Ea2: pa = na + a b: N Eb1: 0 < b Eb2: pb = nb + b
pa * nb + na * pb < pa * pb + na * nb
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 pa, na, pb, nb: N E1: na < pa E2: nb < pb a: N Ea1: 0 < a Ea2: pa = na + a b: N Eb1: 0 < b Eb2: pb = nb + b
(na + a) * nb + na * (nb + b) <
(na + a) * (nb + b) + na * nb
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 pa, na, pb, nb: N E1: na < pa E2: nb < pb a: N Ea1: 0 < a Ea2: pa = na + a b: N Eb1: 0 < b Eb2: pb = nb + b
0 < a * b
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 pa, na, pb, nb: N E1: na < pa E2: nb < pb a: N Ea1: 0 < a Ea2: pa = na + a b: N Eb1: 0 < b Eb2: pb = nb + b
(na + a) * (nb + b) + na * nb =
(na + a) * nb + na * (nb + b) + a * b
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 pa, na, pb, nb: N E1: na < pa E2: nb < pb a: N Ea1: 0 < a Ea2: pa = na + a b: N Eb1: 0 < b Eb2: pb = nb + b
0 < a * b
apply pos_mult_compat;trivial.
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 pa, na, pb, nb: N E1: na < pa E2: nb < pb a: N Ea1: 0 < a Ea2: pa = na + a b: N Eb1: 0 < b Eb2: pb = nb + b
(na + a) * (nb + b) + na * nb =
(na + a) * nb + na * (nb + b) + a * b
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
StrictSemiRingOrder Zlt
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
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 H2: forallxy : N, Decidable (x < y)
forallxy : Z, Decidable (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 H2: forallxy : N, Decidable (x < y)
forallxy : Z, Decidable (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 H2: forallxy : N, Decidable (x < y)
forallxy : T N, Decidable (' 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 H2: forallxy : N, Decidable (x < y) a, b: T N
Decidable (' a < ' b)
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 H2: forallxy : N, Decidable (x < y) a, b: T N
Decidable (Tlt a b)
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 H2: forallxy : N, Decidable (x < y) a, b: T N
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
Z -> Z -> HProp
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
Z -> Z -> HProp
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
forallx1x2 : T N,
equiv x1 x2 ->
forally1y2 : T N,
equiv y1 y2 ->
Build_HProp (Tapart x1 y1) =
Build_HProp (Tapart x2 y2)
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 x1, x2: T N X: equiv x1 x2 y1, y2: T N X0: equiv y1 y2
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 x1, x2: T N X: equiv x1 x2 y1, y2: T N X0: equiv y1 y2
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 x1, x2: T N X: equiv x1 x2 y1, y2: T N X0: equiv y1 y2
Tapart x1 y1 <~> Tapart x2 y2
apply (PairT.apart_respects _);trivial.Defined.#[export] InstanceZapart@{} : Apart Z := funxy => Zapart_HProp 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
forallab : T N, (' a ≶ ' b) = Tapart a b
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
forallab : T N, (' a ≶ ' b) = Tapart a b
reflexivity.Qed.(* Coq pre 8.8 produces phantom universes, see GitHub Coq/Coq#1033. *)DefinitionZapart_def@{i} := ltac:(first [exact Zapart_def'@{Uhuge i}|
exact Zapart_def'@{i}]).
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
is_mere_relation Z Zapart
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
is_mere_relation Z Zapart
unfold Zapart;exact _.Qed.
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 TrivialApart0: TrivialApart N
TrivialApart Z
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 TrivialApart0: TrivialApart N
TrivialApart Z
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 TrivialApart0: TrivialApart N
forallxy : Z, x ≶ y <-> 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 TrivialApart0: TrivialApart N
forallxy : T N, ' x ≶ ' y <-> ' 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 TrivialApart0: TrivialApart N pa, na, pb, nb: N
pa + nb ≶ pb + na <->
' {| pos := pa; neg := na |} <>
' {| pos := pb; neg := nb |}
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 TrivialApart0: TrivialApart N pa, na, pb, nb: N E1: pa + nb ≶ pb + na
' {| pos := pa; neg := na |} <>
' {| pos := pb; neg := nb |}
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 TrivialApart0: TrivialApart N pa, na, pb, nb: N E1: ' {| pos := pa; neg := na |} <>
' {| pos := pb; neg := nb |}
pa + nb ≶ pb + na
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 TrivialApart0: TrivialApart N pa, na, pb, nb: N E1: pa + nb ≶ pb + na
' {| pos := pa; neg := na |} <>
' {| pos := pb; neg := nb |}
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 TrivialApart0: TrivialApart N pa, na, pb, nb: N E1: pa + nb ≶ pb + na E2: ' {| pos := pa; neg := na |} =
' {| pos := pb; neg := nb |}
Empty
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 TrivialApart0: TrivialApart N pa, na, pb, nb: N E1: pa + nb ≶ pb + na E2: equiv {| pos := pa; neg := na |}
{| pos := pb; neg := nb |}
Empty
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 TrivialApart0: TrivialApart N pa, na, pb, nb: N E1: pa + nb ≶ pb + na E2: pa + nb = pb + na
Empty
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 TrivialApart0: TrivialApart N pa, na, pb, nb: N E1: pa + nb <> pb + na E2: pa + nb = pb + na
Empty
auto.
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 TrivialApart0: TrivialApart N pa, na, pb, nb: N E1: ' {| pos := pa; neg := na |} <>
' {| pos := pb; neg := nb |}
pa + nb ≶ pb + na
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 TrivialApart0: TrivialApart N pa, na, pb, nb: N E1: ' {| pos := pa; neg := na |} <>
' {| pos := pb; neg := nb |}
pa + nb <> pb + na
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 TrivialApart0: TrivialApart N pa, na, pb, nb: N E1: ' {| pos := pa; neg := na |} <>
' {| pos := pb; neg := nb |} E2: pa + nb = pb + na
Empty
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 TrivialApart0: TrivialApart N pa, na, pb, nb: N E1: ' {| pos := pa; neg := na |} <>
' {| pos := pb; neg := nb |} E2: pa + nb = pb + na
equiv {| pos := pa; neg := na |}
{| pos := pb; neg := nb |}
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 TrivialApart0: TrivialApart N pa, na, pb, nb: N E1: ' {| pos := pa; neg := na |} <>
' {| pos := pb; neg := nb |} E2: pa + nb = pb + na
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
IsApart Z
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
IsApart Z
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
IsHSet Z
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
is_mere_relation Z apart
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
Symmetric apart
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
CoTransitive apart
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
forallxy : Z, ~ (x ≶ y) <-> 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
IsHSet Z
apply _.
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
is_mere_relation Z apart
apply _.
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
Symmetric apart
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
forallxy : Z, x ≶ y -> y ≶ x
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
forallxy : T N, ' x ≶ ' y -> ' y ≶ ' x
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 pa, na, pb, nb: N
pa + nb ≶ pb + na -> pb + na ≶ pa + nb
applysymmetry.
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
CoTransitive apart
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
forallxy : Z,
x ≶ y -> forallz : Z, hor (x ≶ z) (z ≶ 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
forallxyz : Z, x ≶ y -> hor (x ≶ z) (z ≶ 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
forallxyz : T N,
' x ≶ ' y -> hor (' x ≶ ' z) (' z ≶ ' 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, c: T N
pos a + neg b ≶ pos b + neg a ->
Tr (-1)
((plus (pos a) (neg c) ≶ plus (pos c) (neg a)) +
(plus (pos c) (neg b) ≶ plus (pos b) (neg c)))%type
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, c: T N E1: pos a + neg b ≶ pos b + neg a
Tr (-1)
((plus (pos a) (neg c) ≶ plus (pos c) (neg a)) +
(plus (pos c) (neg b) ≶ plus (pos b) (neg c)))%type
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, c: T N E1: neg c + (pos a + neg b) ≶ neg c + (pos b + neg a)
Tr (-1)
((plus (pos a) (neg c) ≶ plus (pos c) (neg a)) +
(plus (pos c) (neg b) ≶ plus (pos b) (neg c)))%type
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, c: T N E1: neg c + (pos a + neg b) ≶ neg c + (pos b + neg a) E2: neg c + (pos a + neg b) ≶ ?z
((plus (pos a) (neg c) ≶ plus (pos c) (neg a)) +
(plus (pos c) (neg b) ≶ plus (pos b) (neg c)))%type
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, c: T N E1: neg c + (pos a + neg b) ≶ neg c + (pos b + neg a) E2: ?z ≶ neg c + (pos b + neg a)
((plus (pos a) (neg c) ≶ plus (pos c) (neg a)) +
(plus (pos c) (neg b) ≶ plus (pos b) (neg c)))%type
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, c: T N E1: neg c + (pos a + neg b) ≶ neg c + (pos b + neg a) E2: neg c + (pos a + neg b) ≶ ?z
((plus (pos a) (neg c) ≶ plus (pos c) (neg a)) +
(plus (pos c) (neg b) ≶ plus (pos b) (neg c)))%type
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, c: T N E1: neg c + (pos a + neg b) ≶ neg c + (pos b + neg a) E2: neg c + (pos a + neg b) ≶ ?z
pos a + neg c ≶ pos c + neg a
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, c: T N E1: neg c + (pos a + neg b) ≶ neg c + (pos b + neg a) E2: neg c + (pos a + neg b) ≶ ?z
pos a + neg c + neg b ≶ pos c + neg a + neg b
assert (Hrw : PairT.pos a + PairT.neg c + PairT.neg b =
PairT.neg c + (PairT.pos a + PairT.neg b))
by ring_with_nat;rewrite Hrw;exact E2.
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, c: T N E1: neg c + (pos a + neg b) ≶ neg c + (pos b + neg a) E2: pos c + neg a + neg b ≶ neg c + (pos b + neg a)
((plus (pos a) (neg c) ≶ plus (pos c) (neg a)) +
(plus (pos c) (neg b) ≶ plus (pos b) (neg c)))%type
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, c: T N E1: neg c + (pos a + neg b) ≶ neg c + (pos b + neg a) E2: pos c + neg a + neg b ≶ neg c + (pos b + neg a)
pos c + neg b ≶ pos b + neg c
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, c: T N E1: neg c + (pos a + neg b) ≶ neg c + (pos b + neg a) E2: pos c + neg a + neg b ≶ neg c + (pos b + neg a)
pos c + neg b + neg a ≶ pos b + neg c + neg a
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, c: T N E1: neg c + (pos a + neg b) ≶ neg c + (pos b + neg a) E2: pos c + neg a + neg b ≶ neg c + (pos b + neg a)
pos c + neg a + neg b ≶ pos b + neg c + neg a
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, c: T N E1: neg c + (pos a + neg b) ≶ neg c + (pos b + neg a) E2: pos c + neg a + neg b ≶ neg c + (pos b + neg a)
pos c + neg a + neg b ≶ neg c + (pos b + neg a)
trivial.
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
forallxy : Z, ~ (x ≶ y) <-> 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
forallxy : T N, ~ (' x ≶ ' y) <-> ' 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: T N
~ (pos a + neg b ≶ pos b + neg a) <-> ' a = ' b
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: T N E: ~ (pos a + neg b ≶ pos b + neg a)
' a = ' b
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: T N E: ' a = ' b
~ (pos a + neg b ≶ pos b + neg a)
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: T N E: ~ (pos a + neg b ≶ pos b + neg a)
' a = ' b
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: T N E: ~ (pos a + neg b ≶ pos b + neg a)
pos a + neg b = pos b + neg a
apply tight_apart,E.
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: T N E: ' a = ' b
~ (pos a + neg b ≶ pos b + neg a)
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: T N E: equiv a b
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
FullPseudoOrder Zle Zlt
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
FullPseudoOrder Zle Zlt
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
forallxy : Z, ~ (x < y < x)
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
CoTransitive lt
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
forallxy : Z, x ≶ y <-> (x < y) + (y < x)
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
forallxy : Z, x ≤ y <-> ~ (y < x)
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
forallxy : Z, ~ (x < y < x)
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
forallxy : T N, ~ (' x < ' y < ' x)
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: T N
~ (pos a + neg b < pos b + neg a < pos a + neg b)
apply pseudo_order_antisym.
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
CoTransitive lt
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
forallxy : Z,
x < y -> forallz : Z, hor (x < z) (z < 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
forallabc : Z, a < b -> hor (a < c) (c < b)
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
forallxyz : T N,
' x < ' y -> hor (' x < ' z) (' z < ' 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 pa, na, pb, nb, pc, nc: N
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 pa, na, pb, nb, pc, nc: N E1: pos {| pos := pa; neg := na |} +
neg {| pos := pb; neg := nb |} <
pos {| pos := pb; neg := nb |} +
neg {| pos := pa; neg := na |}
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 pa, na, pb, nb, pc, nc: N E1: pos {| pos := pa; neg := na |} +
neg {| pos := pb; neg := nb |} + nc <
pos {| pos := pb; neg := nb |} +
neg {| pos := pa; neg := na |} + nc
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 pa, na, pb, nb, pc, nc: N E1: pos {| pos := pa; neg := na |} +
neg {| pos := pb; neg := nb |} + nc <
pos {| pos := pb; neg := nb |} +
neg {| pos := pa; neg := na |} + nc E2: pos {| pos := pa; neg := na |} +
neg {| pos := pb; neg := nb |} + nc <
?z
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 pa, na, pb, nb, pc, nc: N E1: pos {| pos := pa; neg := na |} +
neg {| pos := pb; neg := nb |} + nc <
pos {| pos := pb; neg := nb |} +
neg {| pos := pa; neg := na |} + nc E2: ?z <
pos {| pos := pb; neg := nb |} +
neg {| pos := pa; neg := na |} + nc
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 pa, na, pb, nb, pc, nc: N E1: pos {| pos := pa; neg := na |} +
neg {| pos := pb; neg := nb |} + nc <
pos {| pos := pb; neg := nb |} +
neg {| pos := pa; neg := na |} + nc E2: pos {| pos := pa; neg := na |} +
neg {| pos := pb; neg := nb |} + nc <
?z
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 pa, na, pb, nb, pc, nc: N E1: pos {| pos := pa; neg := na |} +
neg {| pos := pb; neg := nb |} + nc <
pos {| pos := pb; neg := nb |} +
neg {| pos := pa; neg := na |} + nc E2: pos {| pos := pa; neg := na |} +
neg {| pos := pb; neg := nb |} + nc <
?z
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 pa, na, pb, nb, pc, nc: N E1: pos {| pos := pa; neg := na |} +
neg {| pos := pb; neg := nb |} + nc <
pos {| pos := pb; neg := nb |} +
neg {| pos := pa; neg := na |} + nc E2: pos {| pos := pa; neg := na |} +
neg {| pos := pb; neg := nb |} + nc <
?z
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 pa, na, pb, nb, pc, nc: N E1: pos {| pos := pa; neg := na |} +
neg {| pos := pb; neg := nb |} + nc <
pos {| pos := pb; neg := nb |} +
neg {| pos := pa; neg := na |} + nc E2: nb +
(pos {| pos := pc; neg := nc |} +
neg {| pos := pa; neg := na |}) <
pos {| pos := pb; neg := nb |} +
neg {| pos := pa; neg := na |} + nc
nb + (pc + na) <
na +
(pos {| pos := pb; neg := nb |} +
neg {| pos := pc; neg := nc |})
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 pa, na, pb, nb, pc, nc: N E1: pos {| pos := pa; neg := na |} +
neg {| pos := pb; neg := nb |} + nc <
pos {| pos := pb; neg := nb |} +
neg {| pos := pa; neg := na |} + nc E2: nb +
(pos {| pos := pc; neg := nc |} +
neg {| pos := pa; neg := na |}) <
pos {| pos := pb; neg := nb |} +
neg {| pos := pa; neg := na |} + nc
nb + (pc + na) < pb + na + nc
trivial.
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
forallxy : Z, x ≶ y <-> (x < y) + (y < x)
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
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
forallxy : T N,
' x ≶ ' y <-> (' x < ' y) + (' y < ' x)
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
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: Z
IsHProp (a ≶ b <-> (a < b) + (b < a))
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: Z
IsHProp (a ≶ b -> (a < b) + (b < a))
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: Z
IsHProp ((a < b) + (b < a))
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: Z
a < b -> b < a -> Empty
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: Z E1: a < b E2: b < a
a < a
transitivity b;trivial.
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
forallxy : T N,
' x ≶ ' y <-> (' x < ' y) + (' y < ' x)
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: T N
pos a + neg b ≶ pos b + neg a <->
(pos a + neg b < pos b + neg a) +
(pos b + neg a < pos a + neg b)
apply apart_iff_total_lt.
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
forallxy : Z, x ≤ y <-> ~ (y < x)
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
forallxy : T N, ' x ≤ ' y <-> ~ (' y < ' x)
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: T N
pos a + neg b ≤ pos b + neg a <->
~ (pos b + neg a < pos a + neg b)
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
forallz : Z, StrongExtensionality (mult z)
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
forallz : Z, StrongExtensionality (mult z)
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
forallxyz : T N, ' x * ' y ≶ ' x * ' z -> ' y ≶ ' z
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 zp, zn, xp, xn, yp, yn: N
zp * xp + zn * xn + (zp * yn + zn * yp)
≶ zp * yp + zn * yn + (zp * xn + zn * xp) ->
xp + yn ≶ yp + xn
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 zp, zn, xp, xn, yp, yn: N E1: zp * xp + zn * xn + (zp * yn + zn * yp)
≶ zp * yp + zn * yn + (zp * xn + zn * xp)
xp + yn ≶ yp + xn
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 zp, zn, xp, xn, yp, yn: N E1: zp * xp + zn * xn + (zp * yn + zn * yp)
≶ zp * yp + zn * yn + (zp * xn + zn * xp)
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 zp, zn, xp, xn, yp, yn: N E1: zp * xp + zn * xn + (zp * yn + zn * yp)
≶ zp * yp + zn * yn + (zp * xn + zn * xp)
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 zp, zn, xp, xn, yp, yn: N E1: zp * xp + zn * xn + (zp * yn + zn * yp)
≶ zp * yp + zn * yn + (zp * xn + zn * xp)
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 zp, zn, xp, xn, yp, yn: N E1: zp * xp + zn * xn + (zp * yn + zn * yp)
≶ zp * yp + zn * yn + (zp * xn + zn * xp)
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 zp, zn, xp, xn, yp, yn: N E1: zp * xp + zn * xn + (zp * yn + zn * yp)
≶ zp * yp + zn * yn + (zp * xn + zn * xp)
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 zp, zn, xp, xn, yp, yn: N E1: zp * xp + zn * xn + (zp * yn + zn * yp)
≶ zp * yp + zn * yn + (zp * xn + zn * xp) E2: zp * (xp + yn) ≶ zp * (yp + xn)
xp + yn ≶ yp + xn
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 zp, zn, xp, xn, yp, yn: N E1: zp * xp + zn * xn + (zp * yn + zn * yp)
≶ zp * yp + zn * yn + (zp * xn + zn * xp) E2: zn * (yp + xn) ≶ zn * (xp + yn)
xp + yn ≶ yp + xn
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 zp, zn, xp, xn, yp, yn: N E1: zp * xp + zn * xn + (zp * yn + zn * yp)
≶ zp * yp + zn * yn + (zp * xn + zn * xp) E2: zp * (xp + yn) ≶ zp * (yp + xn)
xp + yn ≶ yp + xn
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 zp, zn, xp, xn, yp, yn: N E1: zp * xp + zn * xn + (zp * yn + zn * yp)
≶ zp * yp + zn * yn + (zp * xn + zn * xp) E2: zp * (xp + yn) ≶ zp * (yp + xn)
zp * (xp + yn) ≶ zp * (yp + xn)
trivial.
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 zp, zn, xp, xn, yp, yn: N E1: zp * xp + zn * xn + (zp * yn + zn * yp)
≶ zp * yp + zn * yn + (zp * xn + zn * xp) E2: zn * (yp + xn) ≶ zn * (xp + yn)
xp + yn ≶ yp + xn
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 zp, zn, xp, xn, yp, yn: N E1: zp * xp + zn * xn + (zp * yn + zn * yp)
≶ zp * yp + zn * yn + (zp * xn + zn * xp) E2: zn * (yp + xn) ≶ zn * (xp + yn)
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
FullPseudoSemiRingOrder Zle Zlt
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
FullPseudoSemiRingOrder Zle Zlt
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 X: IsCRing Z
FullPseudoSemiRingOrder Zle Zlt
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 X: IsCRing Z
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
FullPseudoSemiRingOrder Zle Zlt
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
FullPseudoSemiRingOrder Zle Zlt
The command has indeed failed with message:
Universeinstance length is1 but should be 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
FullPseudoSemiRingOrder Zle Zlt
Abort.
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
IntegersToRing Z
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
IntegersToRing Z
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
forall (R : Type) (Aplus : Plus R) (Amult : Mult R)
(Azero : Zero R) (Aone : One R) (Anegate : Negate R),
IsCRing R -> Z -> R
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 R: Type Aplus0: Plus R Amult0: Mult R Azero0: Zero R Aone0: One R Anegate: Negate R H2: IsCRing R
Z -> R
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 R: Type Aplus0: Plus R Amult0: Mult R Azero0: Zero R Aone0: One R Anegate: Negate R H2: IsCRing R
forallxy : T N, equiv x y -> ?dclass x = ?dclass y
exact (PairT.to_ring_respects N).Defined.
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
IsSemiRingPreserving (integers_to_ring Z B)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
IsSemiRingPreserving (integers_to_ring Z B)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
forallxy : Z,
integers_to_ring Z B (sg_op x y) =
sg_op (integers_to_ring Z B x)
(integers_to_ring Z B 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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
integers_to_ring Z B mon_unit = mon_unit
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
forallxy : Z,
integers_to_ring Z B (sg_op x y) =
sg_op (integers_to_ring Z B x)
(integers_to_ring Z B 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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
integers_to_ring Z B mon_unit = mon_unit
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
forallxy : Z,
integers_to_ring Z B (sg_op x y) =
sg_op (integers_to_ring Z B x)
(integers_to_ring Z B 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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
forallxy : Z,
integers_to_ring Z B (x + y) =
integers_to_ring Z B x + integers_to_ring Z B 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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
forallxy : T N,
integers_to_ring Z B (' x + ' y) =
integers_to_ring Z B (' x) +
integers_to_ring Z B (' 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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B pa, na, pb, nb: N
integers_to_ring Z B
(' {| pos := pa; neg := na |} +
' {| pos := pb; neg := nb |}) =
integers_to_ring Z B (' {| pos := pa; neg := na |}) +
integers_to_ring Z B (' {| pos := pb; neg := nb |})
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B pa, na, pb, nb: N
naturals_to_semiring N B (pa + pb) -
naturals_to_semiring N B (na + nb) =
naturals_to_semiring N B pa -
naturals_to_semiring N B na +
(naturals_to_semiring N B pb -
naturals_to_semiring N B nb)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B pa, na, pb, nb: N
naturals_to_semiring N B pa +
naturals_to_semiring N B pb -
(naturals_to_semiring N B na +
naturals_to_semiring N B nb) =
naturals_to_semiring N B pa -
naturals_to_semiring N B na +
(naturals_to_semiring N B pb -
naturals_to_semiring N B nb)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B pa, na, pb, nb: N
naturals_to_semiring N B pa +
naturals_to_semiring N B pb +
(- naturals_to_semiring N B na -
naturals_to_semiring N B nb) =
naturals_to_semiring N B pa -
naturals_to_semiring N B na +
(naturals_to_semiring N B pb -
naturals_to_semiring N B nb)
ring_with_nat.
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
integers_to_ring Z B mon_unit = mon_unit
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
integers_to_ring Z B 0 = 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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
naturals_to_semiring N B 0 -
naturals_to_semiring N B 0 = 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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
0 - 0 = 0
rewrite negate_0,plus_0_r;trivial.
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
forallxy : Z,
integers_to_ring Z B (sg_op x y) =
sg_op (integers_to_ring Z B x)
(integers_to_ring Z B 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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
forallxy : Z,
integers_to_ring Z B (x * y) =
integers_to_ring Z B x * integers_to_ring Z B 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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
forallxy : T N,
integers_to_ring Z B (' x * ' y) =
integers_to_ring Z B (' x) *
integers_to_ring Z B (' 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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B pa, na, pb, nb: N
integers_to_ring Z B
(' {| pos := pa; neg := na |} *
' {| pos := pb; neg := nb |}) =
integers_to_ring Z B (' {| pos := pa; neg := na |}) *
integers_to_ring Z B (' {| pos := pb; neg := nb |})
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B pa, na, pb, nb: N
naturals_to_semiring N B (pa * pb + na * nb) -
naturals_to_semiring N B (pa * nb + na * pb) =
(naturals_to_semiring N B pa -
naturals_to_semiring N B na) *
(naturals_to_semiring N B pb -
naturals_to_semiring N B nb)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B pa, na, pb, nb: N
naturals_to_semiring N B (pa * pb) +
naturals_to_semiring N B (na * nb) -
naturals_to_semiring N B (pa * nb + na * pb) =
(naturals_to_semiring N B pa -
naturals_to_semiring N B na) *
(naturals_to_semiring N B pb -
naturals_to_semiring N B nb)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B pa, na, pb, nb: N
naturals_to_semiring N B pa *
naturals_to_semiring N B pb +
naturals_to_semiring N B na *
naturals_to_semiring N B nb -
naturals_to_semiring N B (pa * nb + na * pb) =
(naturals_to_semiring N B pa -
naturals_to_semiring N B na) *
(naturals_to_semiring N B pb -
naturals_to_semiring N B nb)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B pa, na, pb, nb: N
naturals_to_semiring N B pa *
naturals_to_semiring N B pb +
naturals_to_semiring N B na *
naturals_to_semiring N B nb -
(naturals_to_semiring N B (pa * nb) +
naturals_to_semiring N B (na * pb)) =
(naturals_to_semiring N B pa -
naturals_to_semiring N B na) *
(naturals_to_semiring N B pb -
naturals_to_semiring N B nb)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B pa, na, pb, nb: N
naturals_to_semiring N B pa *
naturals_to_semiring N B pb +
naturals_to_semiring N B na *
naturals_to_semiring N B nb -
(naturals_to_semiring N B pa *
naturals_to_semiring N B nb +
naturals_to_semiring N B na *
naturals_to_semiring N B pb) =
(naturals_to_semiring N B pa -
naturals_to_semiring N B na) *
(naturals_to_semiring N B pb -
naturals_to_semiring N B nb)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B pa, na, pb, nb: N
naturals_to_semiring N B pa *
naturals_to_semiring N B pb +
naturals_to_semiring N B na *
naturals_to_semiring N B nb +
(-
(naturals_to_semiring N B pa *
naturals_to_semiring N B nb) -
naturals_to_semiring N B na *
naturals_to_semiring N B pb) =
(naturals_to_semiring N B pa -
naturals_to_semiring N B na) *
(naturals_to_semiring N B pb -
naturals_to_semiring N B nb)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B pa, na, pb, nb: N
naturals_to_semiring N B pa *
naturals_to_semiring N B pb +
naturals_to_semiring N B na *
naturals_to_semiring N B nb +
(naturals_to_semiring N B pa *
- naturals_to_semiring N B nb +
- naturals_to_semiring N B na *
naturals_to_semiring N B pb) =
(naturals_to_semiring N B pa -
naturals_to_semiring N B na) *
(naturals_to_semiring N B pb -
naturals_to_semiring N B nb)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B pa, na, pb, nb: N
naturals_to_semiring N B pa *
naturals_to_semiring N B pb +
- naturals_to_semiring N B na *
- naturals_to_semiring N B nb +
(naturals_to_semiring N B pa *
- naturals_to_semiring N B nb +
- naturals_to_semiring N B na *
naturals_to_semiring N B pb) =
(naturals_to_semiring N B pa -
naturals_to_semiring N B na) *
(naturals_to_semiring N B pb -
naturals_to_semiring N B nb)
ring_with_nat.
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
integers_to_ring Z B mon_unit = mon_unit
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
integers_to_ring Z B 1 = 1
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
naturals_to_semiring N B 1 -
naturals_to_semiring N B 0 = 1
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
1 - naturals_to_semiring N B 0 = 1
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B
1 - 0 = 1
rewrite negate_0,plus_0_r;trivial.Qed.InstanceZ_to_ring_morphism@{} `{IsCRing B} : IsSemiRingPreserving (integers_to_ring Z B)
:= ltac:(first [exact Z_to_ring_morphism'@{Ularge}|
exact Z_to_ring_morphism'@{}]).
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B h: Z -> B IsSemiRingPreserving0: IsSemiRingPreserving h
forallx : Z, integers_to_ring Z B x = h x
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B h: Z -> B IsSemiRingPreserving0: IsSemiRingPreserving h
forallx : Z, integers_to_ring Z B x = h x
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B h: Z -> B IsSemiRingPreserving0: IsSemiRingPreserving h X: IsCRing Z
forallx : Z, integers_to_ring Z B x = h x
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B h: Z -> B IsSemiRingPreserving0: IsSemiRingPreserving h X: IsCRing Z
forallx : T N, integers_to_ring Z B (' x) = h (' x)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B h: Z -> B IsSemiRingPreserving0: IsSemiRingPreserving h X: IsCRing Z pa, na: N
naturals_to_semiring N B pa -
naturals_to_semiring N B na =
h (' {| pos := pa; neg := na |})
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B h: Z -> B IsSemiRingPreserving0: IsSemiRingPreserving h X: IsCRing Z pa, na: N
naturals_to_semiring N B pa -
naturals_to_semiring N B na = h (' pa - ' na)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B h: Z -> B IsSemiRingPreserving0: IsSemiRingPreserving h X: IsCRing Z pa, na: N
naturals_to_semiring N B pa -
naturals_to_semiring N B na = h (' pa) - h (' na)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B h: Z -> B IsSemiRingPreserving0: IsSemiRingPreserving h X: IsCRing Z pa, na: N
naturals_to_semiring N B pa -
naturals_to_semiring N B na =
(h ∘ cast N Z) pa - h (' na)
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B h: Z -> B IsSemiRingPreserving0: IsSemiRingPreserving h X: IsCRing Z pa, na: N
naturals_to_semiring N B pa -
naturals_to_semiring N B na =
(h ∘ cast N Z) pa - (h ∘ cast N Z) na
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 B: Type Aplus0: Plus B Amult0: Mult B Azero0: Zero B Aone0: One B Anegate: Negate B H2: IsCRing B h: Z -> B IsSemiRingPreserving0: IsSemiRingPreserving h X: IsCRing Z pa, na: N
(h ∘ cast N Z) pa - (h ∘ cast N Z) na =
(h ∘ cast N Z) pa - (h ∘ cast N Z) na
trivial.Qed.
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
Integers Z
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
Integers Z
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
IsCRing Z
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
forall (B : Type) (Aplus0 : Plus B)
(Amult0 : Mult B) (Azero0 : Zero B)
(Aone0 : One B) (Anegate0 : Negate B)
(H : IsCRing B) (h : Z -> B),
IsSemiRingPreserving h ->
forallx : Z, integers_to_ring Z B x = h x
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
IsCRing Z
exact Z_ring.
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
forall (B : Type) (Aplus0 : Plus B) (Amult0 : Mult B)
(Azero0 : Zero B) (Aone0 : One B)
(Anegate0 : Negate B) (H : IsCRing B) (h : Z -> B),
IsSemiRingPreserving h ->
forallx : Z, integers_to_ring Z B x = h x
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 NatDistance0: NatDistance N
forallabz : N,
a + z = b ->
z = 0 ->
naturals_to_semiring N Z 0 =
' {| pos := a; neg := b |}
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 NatDistance0: NatDistance N
forallabz : N,
a + z = b ->
z = 0 ->
naturals_to_semiring N Z 0 =
' {| pos := a; neg := b |}
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 NatDistance0: NatDistance N a, b, z: N E: a + z = b E': z = 0
naturals_to_semiring N Z 0 =
' {| pos := a; neg := b |}
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 NatDistance0: NatDistance N a, b, z: N E: a + z = b E': z = 0
0 = ' {| pos := a; neg := b |}
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 NatDistance0: NatDistance N a, b, z: N E: a = b E': z = 0
0 = ' {| pos := a; neg := b |}
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 NatDistance0: NatDistance N a, b, z: N E: a = b E': z = 0
0 = ' {| pos := b; neg := b |}
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 NatDistance0: NatDistance N a, b, z: N E: a = b E': z = 0
equiv (inject N 0) {| pos := b; neg := b |}
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 NatDistance0: NatDistance N a, b, z: N E: a = b E': z = 0
0 + b = b + 0
apply plus_comm.Qed.
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 NatDistance0: NatDistance N
forallabz : N,
a + z = b ->
naturals_to_semiring N Z z =
- ' {| pos := a; neg := b |}
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 NatDistance0: NatDistance N
forallabz : N,
a + z = b ->
naturals_to_semiring N Z z =
- ' {| pos := a; neg := b |}
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 NatDistance0: NatDistance N a, b, z: N E: a + z = b
naturals_to_semiring N Z z =
- ' {| pos := a; neg := b |}
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 NatDistance0: NatDistance N a, b, z: N E: a + z = b
' z = - ' {| pos := a; neg := b |}
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 NatDistance0: NatDistance N a, b, z: N E: a + z = b
equiv (inject N z) (opp N {| pos := a; neg := b |})
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 NatDistance0: NatDistance N a, b, z: N E: a + z = b
z + a = b + 0
rewrite plus_0_r,plus_comm;trivial.Qed.
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 NatDistance0: NatDistance N
forallabz : N,
b + z = a ->
naturals_to_semiring N Z z =
' {| pos := a; neg := b |}
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 NatDistance0: NatDistance N
forallabz : N,
b + z = a ->
naturals_to_semiring N Z z =
' {| pos := a; neg := b |}
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 NatDistance0: NatDistance N a, b, z: N E: b + z = a
naturals_to_semiring N Z z =
' {| pos := a; neg := b |}
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 NatDistance0: NatDistance N a, b, z: N E: b + z = a
' z = ' {| pos := a; neg := b |}
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 NatDistance0: NatDistance N a, b, z: N E: b + z = a
z + b = a + 0
rewrite plus_0_r,plus_comm;trivial.Qed.(* We use decidability of equality on N to make sure we always go left when the inputs are equal. Otherwise we would have to truncate IntAbs. *)
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 NatDistance0: NatDistance N
forallx : T N,
{n : N & naturals_to_semiring N Z n = ' x} +
{n : N & naturals_to_semiring N Z n = - ' x}
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 NatDistance0: NatDistance N
forallx : T N,
{n : N & naturals_to_semiring N Z n = ' x} +
{n : N & naturals_to_semiring N Z n = - ' x}
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 NatDistance0: NatDistance N a, b: N
({n : N &
naturals_to_semiring N Z n =
' {| pos := a; neg := b |}} +
{n : N &
naturals_to_semiring N Z n =
- ' {| pos := a; neg := b |}})%type
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 NatDistance0: NatDistance N a, b, z: N E: a + z = b
({n : N &
naturals_to_semiring N Z n =
' {| pos := a; neg := b |}} +
{n : N &
naturals_to_semiring N Z n =
- ' {| pos := a; neg := b |}})%type
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 NatDistance0: NatDistance N a, b, z: N E: b + z = a
({n : N &
naturals_to_semiring N Z n =
' {| pos := a; neg := b |}} +
{n : N &
naturals_to_semiring N Z n =
- ' {| pos := a; neg := b |}})%type
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 NatDistance0: NatDistance N a, b, z: N E: a + z = b
({n : N &
naturals_to_semiring N Z n =
' {| pos := a; neg := b |}} +
{n : N &
naturals_to_semiring N Z n =
- ' {| pos := a; neg := b |}})%type
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 NatDistance0: NatDistance N a, b, z: N E: a + z = b E': z = 0
({n : N &
naturals_to_semiring N Z n =
' {| pos := a; neg := b |}} +
{n : N &
naturals_to_semiring N Z n =
- ' {| pos := a; neg := b |}})%type
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 NatDistance0: NatDistance N a, b, z: N E: a + z = b
({n : N &
naturals_to_semiring N Z n =
' {| pos := a; neg := b |}} +
{n : N &
naturals_to_semiring N Z n =
- ' {| pos := a; neg := b |}})%type
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 NatDistance0: NatDistance N a, b, z: N E: a + z = b E': z = 0
({n : N &
naturals_to_semiring N Z n =
' {| pos := a; neg := b |}} +
{n : N &
naturals_to_semiring N Z n =
- ' {| pos := a; neg := b |}})%type
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 NatDistance0: NatDistance N a, b, z: N E: a + z = b E': z = 0
{n : N &
naturals_to_semiring N Z n =
' {| pos := a; neg := b |}}
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 NatDistance0: NatDistance N a, b, z: N E: a + z = b E': z = 0
naturals_to_semiring N Z 0 =
' {| pos := a; neg := b |}
apply Z_abs_aux_0 with z;trivial.
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 NatDistance0: NatDistance N a, b, z: N E: a + z = b
({n : N &
naturals_to_semiring N Z n =
' {| pos := a; neg := b |}} +
{n : N &
naturals_to_semiring N Z n =
- ' {| pos := a; neg := b |}})%type
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 NatDistance0: NatDistance N a, b, z: N E: a + z = b
{n : N &
naturals_to_semiring N Z n =
- ' {| pos := a; neg := b |}}
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 NatDistance0: NatDistance N a, b, z: N E: a + z = b
naturals_to_semiring N Z z =
- ' {| pos := a; neg := b |}
apply Z_abs_aux_neg;trivial.
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 NatDistance0: NatDistance N a, b, z: N E: b + z = a
({n : N &
naturals_to_semiring N Z n =
' {| pos := a; neg := b |}} +
{n : N &
naturals_to_semiring N Z n =
- ' {| pos := a; neg := b |}})%type
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 NatDistance0: NatDistance N a, b, z: N E: b + z = a
{n : N &
naturals_to_semiring N Z n =
' {| pos := a; neg := b |}}
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 NatDistance0: NatDistance N a, b, z: N E: b + z = a
naturals_to_semiring N Z z =
' {| pos := a; neg := b |}
apply Z_abs_aux_pos;trivial.Defined.
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 NatDistance0: NatDistance N
forall (xy : T N) (E : equiv x y),
transport
(funq : Z =>
({n : N & naturals_to_semiring N Z n = q} +
{n : N & naturals_to_semiring N Z n = - q})%type)
(Z_path E) (Z_abs_def x) = Z_abs_def 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 NatDistance0: NatDistance N
forall (xy : T N) (E : equiv x y),
transport
(funq : Z =>
({n : N & naturals_to_semiring N Z n = q} +
{n : N & naturals_to_semiring N Z n = - q})%type)
(Z_path E) (Z_abs_def x) = Z_abs_def 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 NatDistance0: NatDistance N pa, pb, na, nb: N E: equiv {| pos := pa; neg := pb |}
{| pos := na; neg := nb |}
transport
(funq : Z =>
({n : N & naturals_to_semiring N Z n = q} +
{n : N & naturals_to_semiring N Z n = - q})%type)
(Z_path E) (Z_abs_def {| pos := pa; neg := pb |}) =
Z_abs_def {| pos := na; neg := nb |}
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb
transport
(funq : Z =>
({n : N & naturals_to_semiring N Z n = q} +
{n : N & naturals_to_semiring N Z n = - q})%type)
(Z_path E) (Z_abs_def {| pos := pa; neg := pb |}) =
Z_abs_def {| pos := na; neg := nb |}
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb
transport
(funq : Z =>
({n : N & naturals_to_semiring N Z n = q} +
{n : N & naturals_to_semiring N Z n = - q})%type)
(Z_path E)
match nat_distance_sig pa pb with
| inl s =>
match dec (s.1 = 0) with
| inl p => inl (0; Z_abs_aux_0 pa pb s.1 s.2 p)
| inr _ =>
inr (s.1; Z_abs_aux_neg pa pb s.1 s.2)
end
| inr s => inl (s.1; Z_abs_aux_pos pa pb s.1 s.2)
end =
match nat_distance_sig na nb with
| inl s =>
match dec (s.1 = 0) with
| inl p => inl (0; Z_abs_aux_0 na nb s.1 s.2 p)
| inr _ => inr (s.1; Z_abs_aux_neg na nb s.1 s.2)
end
| inr s => inl (s.1; Z_abs_aux_pos na nb s.1 s.2)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb
transport
(funq : Z =>
({n : N & naturals_to_semiring N Z n = q} +
{n : N & naturals_to_semiring N Z n = - q})%type)
(Z_path E)
match dec (z1 = 0) with
| inl p => inl (0; Z_abs_aux_0 pa pb z1 E1 p)
| inr _ => inr (z1; Z_abs_aux_neg pa pb z1 E1)
end =
match nat_distance_sig na nb with
| inl s =>
match dec (s.1 = 0) with
| inl p => inl (0; Z_abs_aux_0 na nb s.1 s.2 p)
| inr _ => inr (s.1; Z_abs_aux_neg na nb s.1 s.2)
end
| inr s => inl (s.1; Z_abs_aux_pos na nb s.1 s.2)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa
transport
(funq : Z =>
({n : N & naturals_to_semiring N Z n = q} +
{n : N & naturals_to_semiring N Z n = - q})%type)
(Z_path E) (inl (z1; Z_abs_aux_pos pa pb z1 E1)) =
match nat_distance_sig na nb with
| inl s =>
match dec (s.1 = 0) with
| inl p => inl (0; Z_abs_aux_0 na nb s.1 s.2 p)
| inr _ => inr (s.1; Z_abs_aux_neg na nb s.1 s.2)
end
| inr s => inl (s.1; Z_abs_aux_pos na nb s.1 s.2)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb
transport
(funq : Z =>
({n : N & naturals_to_semiring N Z n = q} +
{n : N & naturals_to_semiring N Z n = - q})%type)
(Z_path E)
match dec (z1 = 0) with
| inl p => inl (0; Z_abs_aux_0 pa pb z1 E1 p)
| inr _ => inr (z1; Z_abs_aux_neg pa pb z1 E1)
end =
match nat_distance_sig na nb with
| inl s =>
match dec (s.1 = 0) with
| inl p => inl (0; Z_abs_aux_0 na nb s.1 s.2 p)
| inr _ => inr (s.1; Z_abs_aux_neg na nb s.1 s.2)
end
| inr s => inl (s.1; Z_abs_aux_pos na nb s.1 s.2)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0
transport
(funq : Z =>
({n : N & naturals_to_semiring N Z n = q} +
{n : N & naturals_to_semiring N Z n = - q})%type)
(Z_path E) (inl (0; Z_abs_aux_0 pa pb z1 E1 E2)) =
match nat_distance_sig na nb with
| inl s =>
match dec (s.1 = 0) with
| inl p => inl (0; Z_abs_aux_0 na nb s.1 s.2 p)
| inr _ => inr (s.1; Z_abs_aux_neg na nb s.1 s.2)
end
| inr s => inl (s.1; Z_abs_aux_pos na nb s.1 s.2)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 <> 0
transport
(funq : Z =>
({n : N & naturals_to_semiring N Z n = q} +
{n : N & naturals_to_semiring N Z n = - q})%type)
(Z_path E) (inr (z1; Z_abs_aux_neg pa pb z1 E1)) =
match nat_distance_sig na nb with
| inl s =>
match dec (s.1 = 0) with
| inl p => inl (0; Z_abs_aux_0 na nb s.1 s.2 p)
| inr _ => inr (s.1; Z_abs_aux_neg na nb s.1 s.2)
end
| inr s => inl (s.1; Z_abs_aux_pos na nb s.1 s.2)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0
transport
(funq : Z =>
({n : N & naturals_to_semiring N Z n = q} +
{n : N & naturals_to_semiring N Z n = - q})%type)
(Z_path E) (inl (0; Z_abs_aux_0 pa pb z1 E1 E2)) =
match nat_distance_sig na nb with
| inl s =>
match dec (s.1 = 0) with
| inl p => inl (0; Z_abs_aux_0 na nb s.1 s.2 p)
| inr _ => inr (s.1; Z_abs_aux_neg na nb s.1 s.2)
end
| inr s => inl (s.1; Z_abs_aux_pos na nb s.1 s.2)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0
inl
(transport
(funa : Z =>
{n : N & naturals_to_semiring N Z n = a})
(Z_path E) (0; Z_abs_aux_0 pa pb z1 E1 E2)) =
match nat_distance_sig na nb with
| inl s =>
match dec (s.1 = 0) with
| inl p => inl (0; Z_abs_aux_0 na nb s.1 s.2 p)
| inr _ => inr (s.1; Z_abs_aux_neg na nb s.1 s.2)
end
| inr s => inl (s.1; Z_abs_aux_pos na nb s.1 s.2)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0
inl
(transport (fun_ : Z => N) (Z_path E)
(0; Z_abs_aux_0 pa pb z1 E1 E2).1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E)
(0; Z_abs_aux_0 pa pb z1 E1 E2).1
(0; Z_abs_aux_0 pa pb z1 E1 E2).2) =
match nat_distance_sig na nb with
| inl s =>
match dec (s.1 = 0) with
| inl p => inl (0; Z_abs_aux_0 na nb s.1 s.2 p)
| inr _ => inr (s.1; Z_abs_aux_neg na nb s.1 s.2)
end
| inr s => inl (s.1; Z_abs_aux_pos na nb s.1 s.2)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0 z2: N E3: na + z2 = nb E4: z2 = 0
inl
(transport (fun_ : Z => N) (Z_path E) 0;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E) 0
(Z_abs_aux_0 pa pb z1 E1 E2)) =
inl (0; Z_abs_aux_0 na nb z2 E3 E4)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0 z2: N E3: na + z2 = nb E4: z2 <> 0
inl
(transport (fun_ : Z => N) (Z_path E) 0;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x)
(Z_path E) 0 (Z_abs_aux_0 pa pb z1 E1 E2)) =
inr (z2; Z_abs_aux_neg na nb z2 E3)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0 z2: N E3: nb + z2 = na
inl
(transport (fun_ : Z => N) (Z_path E) 0;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x)
(Z_path E) 0 (Z_abs_aux_0 pa pb z1 E1 E2)) =
inl (z2; Z_abs_aux_pos na nb z2 E3)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0 z2: N E3: na + z2 = nb E4: z2 = 0
inl
(transport (fun_ : Z => N) (Z_path E) 0;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E) 0
(Z_abs_aux_0 pa pb z1 E1 E2)) =
inl (0; Z_abs_aux_0 na nb z2 E3 E4)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0 z2: N E3: na + z2 = nb E4: z2 = 0
(transport (fun_ : Z => N) (Z_path E) 0;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E) 0
(Z_abs_aux_0 pa pb z1 E1 E2)) =
(0; Z_abs_aux_0 na nb z2 E3 E4)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0 z2: N E3: na + z2 = nb E4: z2 = 0
transport (fun_ : Z => N) (Z_path E) 0 = 0
apply PathGroupoids.transport_const.
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0 z2: N E3: na + z2 = nb E4: z2 <> 0
inl
(transport (fun_ : Z => N) (Z_path E) 0;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E) 0
(Z_abs_aux_0 pa pb z1 E1 E2)) =
inr (z2; Z_abs_aux_neg na nb z2 E3)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0 z2: N E3: na + z2 = nb
z2 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: pa + (na + z2) = na + pa + 0 E1: pa + z1 = pb E2: z1 = 0 E3: na + z2 = nb
z2 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: na + pa + z2 = na + pa + 0 E1: pa + z1 = pb E2: z1 = 0 E3: na + z2 = nb
z2 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: z2 = 0 E1: pa + z1 = pb E2: z1 = 0 E3: na + z2 = nb
z2 = 0
trivial.
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0 z2: N E3: nb + z2 = na
inl
(transport (fun_ : Z => N) (Z_path E) 0;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E) 0
(Z_abs_aux_0 pa pb z1 E1 E2)) =
inl (z2; Z_abs_aux_pos na nb z2 E3)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0 z2: N E3: nb + z2 = na
(transport (fun_ : Z => N) (Z_path E) 0;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E) 0
(Z_abs_aux_0 pa pb z1 E1 E2)) =
(z2; Z_abs_aux_pos na nb z2 E3)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0 z2: N E3: nb + z2 = na
(transport (fun_ : Z => N) (Z_path E) 0;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E) 0
(Z_abs_aux_0 pa pb z1 E1 E2)).1 =
(z2; Z_abs_aux_pos na nb z2 E3).1
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0 z2: N E3: nb + z2 = na
transport (fun_ : Z => N) (Z_path E) 0 = 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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 = 0 z2: N E3: nb + z2 = na
0 = 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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa = pb E2: z1 = 0 z2: N E3: nb + z2 = na
0 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z2: N E: pb + nb = nb + z2 + pb z1: N E1: pa = pb E2: z1 = 0 E3: nb + z2 = na
0 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z2: N E: pb + nb = nb + z2 + pb z1: N E1: pa = pb E2: z1 = 0 E3: nb + z2 = na
pb + nb + 0 = pb + nb + 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 NatDistance0: NatDistance N pa, pb, na, nb, z2: N E: pb + nb = nb + z2 + pb z1: N E1: pa = pb E2: z1 = 0 E3: nb + z2 = na
pb + nb = pb + nb + 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 NatDistance0: NatDistance N pa, pb, na, nb, z2: N E: pb + nb = nb + z2 + pb z1: N E1: pa = pb E2: z1 = 0 E3: nb + z2 = na
nb + z2 + pb = pb + nb + z2
ring_with_nat.
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 <> 0
transport
(funq : Z =>
({n : N & naturals_to_semiring N Z n = q} +
{n : N & naturals_to_semiring N Z n = - q})%type)
(Z_path E) (inr (z1; Z_abs_aux_neg pa pb z1 E1)) =
match nat_distance_sig na nb with
| inl s =>
match dec (s.1 = 0) with
| inl p => inl (0; Z_abs_aux_0 na nb s.1 s.2 p)
| inr _ => inr (s.1; Z_abs_aux_neg na nb s.1 s.2)
end
| inr s => inl (s.1; Z_abs_aux_pos na nb s.1 s.2)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 <> 0
inr
(transport (fun_ : Z => N) (Z_path E)
(z1; Z_abs_aux_neg pa pb z1 E1).1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = - x) (Z_path E)
(z1; Z_abs_aux_neg pa pb z1 E1).1
(z1; Z_abs_aux_neg pa pb z1 E1).2) =
match nat_distance_sig na nb with
| inl s =>
match dec (s.1 = 0) with
| inl p => inl (0; Z_abs_aux_0 na nb s.1 s.2 p)
| inr _ => inr (s.1; Z_abs_aux_neg na nb s.1 s.2)
end
| inr s => inl (s.1; Z_abs_aux_pos na nb s.1 s.2)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 <> 0 z2: N E3: na + z2 = nb E4: z2 = 0
inr
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = - x) (Z_path E) z1
(Z_abs_aux_neg pa pb z1 E1)) =
inl (0; Z_abs_aux_0 na nb z2 E3 E4)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 <> 0 z2: N E3: na + z2 = nb E4: z2 <> 0
inr
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = - x)
(Z_path E) z1 (Z_abs_aux_neg pa pb z1 E1)) =
inr (z2; Z_abs_aux_neg na nb z2 E3)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 <> 0 z2: N E3: nb + z2 = na
inr
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = - x)
(Z_path E) z1 (Z_abs_aux_neg pa pb z1 E1)) =
inl (z2; Z_abs_aux_pos na nb z2 E3)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 <> 0 z2: N E3: na + z2 = nb E4: z2 = 0
inr
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = - x) (Z_path E) z1
(Z_abs_aux_neg pa pb z1 E1)) =
inl (0; Z_abs_aux_0 na nb z2 E3 E4)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb z2: N E3: na + z2 = nb E4: z2 = 0
z1 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z1: N E: pa + na = na + (pa + z1) E1: pa + z1 = pb z2: N E3: na = nb E4: z2 = 0
z1 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z1: N E: pa + na = na + (pa + z1) E1: pa + z1 = pb z2: N E3: na = nb E4: z2 = 0
pa + na + z1 = pa + na + 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 NatDistance0: NatDistance N pa, pb, na, nb, z1: N E: pa + na = na + (pa + z1) E1: pa + z1 = pb z2: N E3: na = nb E4: z2 = 0
na + (pa + z1) = na + pa
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 NatDistance0: NatDistance N pa, pb, na, nb, z1: N E: pa + na = na + (pa + z1) E1: pa + z1 = pb z2: N E3: na = nb E4: z2 = 0
na + (pa + z1) = pa + na
symmetry;trivial.
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 <> 0 z2: N E3: na + z2 = nb E4: z2 <> 0
inr
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = - x) (Z_path E) z1
(Z_abs_aux_neg pa pb z1 E1)) =
inr (z2; Z_abs_aux_neg na nb z2 E3)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 <> 0 z2: N E3: na + z2 = nb E4: z2 <> 0
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = - x) (Z_path E) z1
(Z_abs_aux_neg pa pb z1 E1)) =
(z2; Z_abs_aux_neg na nb z2 E3)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 <> 0 z2: N E3: na + z2 = nb E4: z2 <> 0
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = - x) (Z_path E) z1
(Z_abs_aux_neg pa pb z1 E1)).1 =
(z2; Z_abs_aux_neg na nb z2 E3).1
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 <> 0 z2: N E3: na + z2 = nb E4: z2 <> 0
transport (fun_ : Z => N) (Z_path E) 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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 <> 0 z2: N E3: na + z2 = nb E4: z2 <> 0
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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: pa + (na + z2) = na + (pa + z1) E1: pa + z1 = pb E2: z1 <> 0 E3: na + z2 = nb E4: z2 <> 0
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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: pa + (na + z2) = na + (pa + z1) E1: pa + z1 = pb E2: z1 <> 0 E3: na + z2 = nb E4: z2 <> 0
pa + na + z1 = pa + na + 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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: pa + (na + z2) = na + (pa + z1) E1: pa + z1 = pb E2: z1 <> 0 E3: na + z2 = nb E4: z2 <> 0
na + (pa + z1) = pa + (na + z2)
symmetry;trivial.
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb E2: z1 <> 0 z2: N E3: nb + z2 = na
inr
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = - x) (Z_path E) z1
(Z_abs_aux_neg pa pb z1 E1)) =
inl (z2; Z_abs_aux_pos na nb z2 E3)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pa + z1 = pb z2: N E3: nb + z2 = na
z1 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: pa + nb = nb + z2 + (pa + z1) E1: pa + z1 = pb E3: nb + z2 = na
z1 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: pa + nb = nb + z2 + (pa + z1) E1: pa + z1 = pb E3: nb + z2 = na Erw: nb + z2 + (pa + z1) = pa + nb + (z2 + z1)
z1 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: pa + nb + 0 = pa + nb + (z2 + z1) E1: pa + z1 = pb E3: nb + z2 = na Erw: nb + z2 + (pa + z1) = pa + nb + (z2 + z1)
z1 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: ((z2 = 0) * (z1 = 0))%type E1: pa + z1 = pb E3: nb + z2 = na Erw: nb + z2 + (pa + z1) = pa + nb + (z2 + z1)
z1 = 0
apply E.
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa
transport
(funq : Z =>
({n : N & naturals_to_semiring N Z n = q} +
{n : N & naturals_to_semiring N Z n = - q})%type)
(Z_path E) (inl (z1; Z_abs_aux_pos pa pb z1 E1)) =
match nat_distance_sig na nb with
| inl s =>
match dec (s.1 = 0) with
| inl p => inl (0; Z_abs_aux_0 na nb s.1 s.2 p)
| inr _ => inr (s.1; Z_abs_aux_neg na nb s.1 s.2)
end
| inr s => inl (s.1; Z_abs_aux_pos na nb s.1 s.2)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa
inl
(transport (fun_ : Z => N) (Z_path E)
(z1; Z_abs_aux_pos pa pb z1 E1).1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E)
(z1; Z_abs_aux_pos pa pb z1 E1).1
(z1; Z_abs_aux_pos pa pb z1 E1).2) =
match nat_distance_sig na nb with
| inl s =>
match dec (s.1 = 0) with
| inl p => inl (0; Z_abs_aux_0 na nb s.1 s.2 p)
| inr _ => inr (s.1; Z_abs_aux_neg na nb s.1 s.2)
end
| inr s => inl (s.1; Z_abs_aux_pos na nb s.1 s.2)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa
inl
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E) z1
(Z_abs_aux_pos pa pb z1 E1)) =
match nat_distance_sig na nb with
| inl s =>
match dec (s.1 = 0) with
| inl p => inl (0; Z_abs_aux_0 na nb s.1 s.2 p)
| inr _ => inr (s.1; Z_abs_aux_neg na nb s.1 s.2)
end
| inr s => inl (s.1; Z_abs_aux_pos na nb s.1 s.2)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa z2: N E3: na + z2 = nb E4: z2 = 0
inl
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E) z1
(Z_abs_aux_pos pa pb z1 E1)) =
inl (0; Z_abs_aux_0 na nb z2 E3 E4)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa z2: N E3: na + z2 = nb E4: z2 <> 0
inl
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x)
(Z_path E) z1 (Z_abs_aux_pos pa pb z1 E1)) =
inr (z2; Z_abs_aux_neg na nb z2 E3)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa z2: N E3: nb + z2 = na
inl
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x)
(Z_path E) z1 (Z_abs_aux_pos pa pb z1 E1)) =
inl (z2; Z_abs_aux_pos na nb z2 E3)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa z2: N E3: na + z2 = nb E4: z2 = 0
inl
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E) z1
(Z_abs_aux_pos pa pb z1 E1)) =
inl (0; Z_abs_aux_0 na nb z2 E3 E4)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa z2: N E3: na + z2 = nb E4: z2 = 0
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E) z1
(Z_abs_aux_pos pa pb z1 E1)) =
(0; Z_abs_aux_0 na nb z2 E3 E4)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa z2: N E3: na + z2 = nb E4: z2 = 0
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E) z1
(Z_abs_aux_pos pa pb z1 E1)).1 =
(0; Z_abs_aux_0 na nb z2 E3 E4).1
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa z2: N E3: na + z2 = nb E4: z2 = 0
transport (fun_ : Z => N) (Z_path E) z1 = 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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa z2: N E3: na + z2 = nb E4: z2 = 0
z1 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: pb + z1 + na = na + pb E1: pb + z1 = pa E3: na + z2 = nb E4: z2 = 0
z1 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: pb + z1 + na = na + pb E1: pb + z1 = pa E3: na + z2 = nb E4: z2 = 0
na + pb + z1 = na + pb + 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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: pb + z1 + na = na + pb E1: pb + z1 = pa E3: na + z2 = nb E4: z2 = 0
na + pb + z1 = na + pb
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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: pb + z1 + na = na + pb E1: pb + z1 = pa E3: na + z2 = nb E4: z2 = 0
na + pb + z1 = pb + z1 + na
ring_with_nat.
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa z2: N E3: na + z2 = nb E4: z2 <> 0
inl
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E) z1
(Z_abs_aux_pos pa pb z1 E1)) =
inr (z2; Z_abs_aux_neg na nb z2 E3)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa z2: N E3: na + z2 = nb
z2 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: pb + z1 + (na + z2) = na + pb E1: pb + z1 = pa E3: na + z2 = nb
z2 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: pb + z1 + (na + z2) = na + pb E1: pb + z1 = pa E3: na + z2 = nb Hrw: pb + z1 + (na + z2) = na + pb + (z1 + z2)
z2 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: na + pb + (z1 + z2) = na + pb + 0 E1: pb + z1 = pa E3: na + z2 = nb Hrw: pb + z1 + (na + z2) = na + pb + (z1 + z2)
z2 = 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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: ((z1 = 0) * (z2 = 0))%type E1: pb + z1 = pa E3: na + z2 = nb Hrw: pb + z1 + (na + z2) = na + pb + (z1 + z2)
z2 = 0
apply E.
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa z2: N E3: nb + z2 = na
inl
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E) z1
(Z_abs_aux_pos pa pb z1 E1)) =
inl (z2; Z_abs_aux_pos na nb z2 E3)
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa z2: N E3: nb + z2 = na
(transport (fun_ : Z => N) (Z_path E) z1;
transportD (fun_ : Z => N)
(fun (x : Z) (y : N) =>
naturals_to_semiring N Z y = x) (Z_path E) z1
(Z_abs_aux_pos pa pb z1 E1)).1 =
(z2; Z_abs_aux_pos na nb z2 E3).1
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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa z2: N E3: nb + z2 = na
transport (fun_ : Z => N) (Z_path E) 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 NatDistance0: NatDistance N pa, pb, na, nb: N E: pa + nb = na + pb z1: N E1: pb + z1 = pa z2: N E3: nb + z2 = na
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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: pb + z1 + nb = nb + z2 + pb E1: pb + z1 = pa E3: nb + z2 = na
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 NatDistance0: NatDistance N pa, pb, na, nb, z1, z2: N E: pb + z1 + nb = nb + z2 + pb E1: pb + z1 = pa E3: nb + z2 = na
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 NatDistance0: NatDistance N
IntAbs Z N
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 NatDistance0: NatDistance N
IntAbs Z N
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 NatDistance0: NatDistance N
forallx : Z,
{n : N & naturals_to_semiring N Z n = x} +
{n : N & naturals_to_semiring N Z n = - x}
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 NatDistance0: NatDistance N
forall (xy : T N) (E : equiv x y),
transport
(funq : Z =>
({n : N & naturals_to_semiring N Z n = q} +
{n : N & naturals_to_semiring N Z n = - q})%type)
(Z_path E) (Z_abs_def x) = Z_abs_def y
exact Z_abs_respects'.Qed.#[export] InstanceZ_abs@{} : IntAbs@{UN UN UN UN UN
UN UN UN UN UN
UN UN UN UN UN
UN UN} Z N
:= Z_abs'.Notationn_to_z := (naturals_to_semiring N Z).
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 NatDistance0: NatDistance N a, b: N
n_to_z a * n_to_z b = 0 ->
(n_to_z a = 0) + (n_to_z b = 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 NatDistance0: NatDistance N a, b: N
n_to_z a * n_to_z b = 0 ->
(n_to_z a = 0) + (n_to_z b = 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 NatDistance0: NatDistance N a, b: N
n_to_z (a * b) = 0 -> (n_to_z a = 0) + (n_to_z b = 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 NatDistance0: NatDistance N a, b: N
' (a * b) = 0 -> (' a = 0) + (' b = 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 NatDistance0: NatDistance N a, b: N E: ' (a * b) = 0
((' a = 0) + (' b = 0))%type
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 NatDistance0: NatDistance N a, b: N E: ' (a * b) = ' 0
((' a = 0) + (' b = 0))%type
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 NatDistance0: NatDistance N a, b: N E: a * b = 0
((' a = 0) + (' b = 0))%type
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 NatDistance0: NatDistance N a, b: N E: ((a = 0) + (b = 0))%type
((' a = 0) + (' b = 0))%type
destruct E as [E|E];rewrite E;[left|right];apply preserves_0.Qed.
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 NatDistance0: NatDistance N
ZeroProduct Z
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 NatDistance0: NatDistance N
ZeroProduct Z
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 NatDistance0: NatDistance N x, y: Z E: x * y = 0
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z E: x * y = 0 a: N Ea: n_to_z a = x b: N Eb: n_to_z b = y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z E: x * y = 0 a: N Ea: n_to_z a = x b: N Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z E: x * y = 0 a: N Ea: n_to_z a = - x b: N Eb: n_to_z b = y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z E: x * y = 0 a: N Ea: n_to_z a = - x b: N Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z E: x * y = 0 a: N Ea: n_to_z a = x b: N Eb: n_to_z b = y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z a * n_to_z b = 0 Ea: n_to_z a = x Eb: n_to_z b = y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: ((n_to_z a = 0) + (n_to_z b = 0))%type Ea: n_to_z a = x Eb: n_to_z b = y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: ((n_to_z a = 0) + (n_to_z b = 0))%type Ea: n_to_z a = x Eb: n_to_z b = y
((n_to_z a = 0) + (n_to_z b = 0))%type
trivial.
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 NatDistance0: NatDistance N x, y: Z E: x * y = 0 a: N Ea: n_to_z a = x b: N Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z E: - (x * y) = - 0 a: N Ea: n_to_z a = x b: N Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z E: x * - y = - 0 a: N Ea: n_to_z a = x b: N Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z a * n_to_z b = - 0 Ea: n_to_z a = x Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z a * n_to_z b = 0 Ea: n_to_z a = x Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: ((n_to_z a = 0) + (n_to_z b = 0))%type Ea: n_to_z a = x Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z a = 0 Ea: n_to_z a = x Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z b = 0 Ea: n_to_z a = x Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z a = 0 Ea: n_to_z a = x Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
left;rewrite <-Ea;trivial.
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z b = 0 Ea: n_to_z a = x Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z b = 0 Ea: n_to_z a = x Eb: n_to_z b = - y
y = 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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z b = 0 Ea: n_to_z a = x Eb: n_to_z b = - y
- y = - 0
rewrite negate_0,<-Eb;trivial.
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 NatDistance0: NatDistance N x, y: Z E: x * y = 0 a: N Ea: n_to_z a = - x b: N Eb: n_to_z b = y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z E: - (x * y) = - 0 a: N Ea: n_to_z a = - x b: N Eb: n_to_z b = y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z E: - x * y = - 0 a: N Ea: n_to_z a = - x b: N Eb: n_to_z b = y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z a * n_to_z b = - 0 Ea: n_to_z a = - x Eb: n_to_z b = y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z a * n_to_z b = 0 Ea: n_to_z a = - x Eb: n_to_z b = y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: ((n_to_z a = 0) + (n_to_z b = 0))%type Ea: n_to_z a = - x Eb: n_to_z b = y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z a = 0 Ea: n_to_z a = - x Eb: n_to_z b = y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z b = 0 Ea: n_to_z a = - x Eb: n_to_z b = y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z a = 0 Ea: n_to_z a = - x Eb: n_to_z b = y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z a = 0 Ea: n_to_z a = - x Eb: n_to_z b = y
x = 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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z a = 0 Ea: n_to_z a = - x Eb: n_to_z b = y
- x = - 0
rewrite negate_0,<-Ea;trivial.
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z b = 0 Ea: n_to_z a = - x Eb: n_to_z b = y
((x = 0) + (y = 0))%type
right;rewrite <-Eb;trivial.
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 NatDistance0: NatDistance N x, y: Z E: x * y = 0 a: N Ea: n_to_z a = - x b: N Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z a * n_to_z b = 0 Ea: n_to_z a = - x Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: ((n_to_z a = 0) + (n_to_z b = 0))%type Ea: n_to_z a = - x Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z a = 0 Ea: n_to_z a = - x Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z b = 0 Ea: n_to_z a = - x Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z a = 0 Ea: n_to_z a = - x Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z a = 0 Ea: n_to_z a = - x Eb: n_to_z b = - y
x = 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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z a = 0 Ea: n_to_z a = - x Eb: n_to_z b = - y
- x = - 0
rewrite negate_0,<-Ea;trivial.
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z b = 0 Ea: n_to_z a = - x Eb: n_to_z b = - y
((x = 0) + (y = 0))%type
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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z b = 0 Ea: n_to_z a = - x Eb: n_to_z b = - y
y = 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 NatDistance0: NatDistance N x, y: Z a, b: N E: n_to_z b = 0 Ea: n_to_z a = - x Eb: n_to_z b = - y