Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import HoTT.Classes.interfaces.orders HoTT.Classes.implementations.peano_naturals HoTT.Classes.theory.rings HoTT.Classes.isomorphisms.rings. Require Export HoTT.Classes.interfaces.naturals. Generalizable Variables A N R SR f. (* This grabs a coercion. *) Import SemiRings.
N: Type
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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
f: N -> SR
IsSemiRingPreserving0: IsSemiRingPreserving f
x: N

f x = naturals_to_semiring N SR 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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
f: N -> SR
IsSemiRingPreserving0: IsSemiRingPreserving f
x: N

f x = naturals_to_semiring N SR 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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
f: N -> SR
IsSemiRingPreserving0: IsSemiRingPreserving f
x: N

naturals_to_semiring N SR x = f x
apply naturals_initial. 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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
f, g: N -> SR
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving g
x: N

f x = g 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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
f, g: N -> SR
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving g
x: N

f x = g x
rewrite (to_semiring_unique f), (to_semiring_unique g);reflexivity. 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
N2: Type
Aap0: Apart N2
Aplus0: Plus N2
Amult0: Mult N2
Azero0: Zero N2
Aone0: One N2
Ale0: Le N2
Alt0: Lt N2
U0: NaturalsToSemiRing N2
H0: Naturals N2
x: N

naturals_to_semiring N2 N (naturals_to_semiring N N2 x) = 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
N2: Type
Aap0: Apart N2
Aplus0: Plus N2
Amult0: Mult N2
Azero0: Zero N2
Aone0: One N2
Ale0: Le N2
Alt0: Lt N2
U0: NaturalsToSemiRing N2
H0: Naturals N2
x: N

naturals_to_semiring N2 N (naturals_to_semiring N N2 x) = 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
N2: Type
Aap0: Apart N2
Aplus0: Plus N2
Amult0: Mult N2
Azero0: Zero N2
Aone0: One N2
Ale0: Le N2
Alt0: Lt N2
U0: NaturalsToSemiRing N2
H0: Naturals N2
x: N

(naturals_to_semiring N2 N ∘ naturals_to_semiring N N2) x = id x
apply to_semiring_unique_alt;apply _. 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
R: Type
Aplus0: Plus R
Amult0: Mult R
Azero0: Zero R
Aone0: One R
H0: IsSemiCRing R
f: R -> N
g: N -> R
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving g
x: N

f (g x) = 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
R: Type
Aplus0: Plus R
Amult0: Mult R
Azero0: Zero R
Aone0: One R
H0: IsSemiCRing R
f: R -> N
g: N -> R
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving g
x: N

f (g x) = x
exact (to_semiring_unique_alt (f ∘ g) id _). 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
R1: Type
Aplus0: Plus R1
Amult0: Mult R1
Azero0: Zero R1
Aone0: One R1
H0: IsSemiCRing R1
R2: Type
Aplus1: Plus R2
Amult1: Mult R2
Azero1: Zero R2
Aone1: One R2
H1: IsSemiCRing R2
f: R1 -> R2
g: N -> R1
h: N -> R2
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving g
IsSemiRingPreserving2: IsSemiRingPreserving h
x: N

f (g x) = h 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
R1: Type
Aplus0: Plus R1
Amult0: Mult R1
Azero0: Zero R1
Aone0: One R1
H0: IsSemiCRing R1
R2: Type
Aplus1: Plus R2
Amult1: Mult R2
Azero1: Zero R2
Aone1: One R2
H1: IsSemiCRing R2
f: R1 -> R2
g: N -> R1
h: N -> R2
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving g
IsSemiRingPreserving2: IsSemiRingPreserving h
x: N

f (g x) = h x
exact (to_semiring_unique_alt (f ∘ g) h _). 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
f: N -> N
IsSemiRingPreserving0: IsSemiRingPreserving f
x: N

f x = 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
f: N -> N
IsSemiRingPreserving0: IsSemiRingPreserving f
x: N

f x = x
exact (to_semiring_unique_alt f id _). 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
A: Type
Aplus0: Plus A
Amult0: Mult A
Azero0: Zero A
Aone0: One A
H0: IsSemiCRing A
f: A -> N
g: N -> A
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving g

IsInjective g
N: Type
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: Type
Aplus0: Plus A
Amult0: Mult A
Azero0: Zero A
Aone0: One A
H0: IsSemiCRing A
f: A -> N
g: N -> A
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving g

IsInjective g
N: Type
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: Type
Aplus0: Plus A
Amult0: Mult A
Azero0: Zero A
Aone0: One A
H0: IsSemiCRing A
f: A -> N
g: N -> A
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving g
x, y: N
E: g x = g y

x = y
N: Type
Aap: Apart N
Aplus: Plus N
Amult: Mult N
Azero: Zero N
Aone: One N
Ale: Le N
Alt: Lt N
U: NaturalsToSemiRing N
H: Naturals N
A: Type
Aplus0: Plus A
Amult0: Mult A
Azero0: Zero A
Aone0: One A
H0: IsSemiCRing A
f: A -> N
g: N -> A
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving g
x, y: N
E: g x = g y

id x = id 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
A: Type
Aplus0: Plus A
Amult0: Mult A
Azero0: Zero A
Aone0: One A
H0: IsSemiCRing A
f: A -> N
g: N -> A
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving g
x, y: N
E: g x = g y

f (g x) = f (g y)
apply ap,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
N2: Type
Aap0: Apart N2
Aplus0: Plus N2
Amult0: Mult N2
Azero0: Zero N2
Aone0: One N2
Ale0: Le N2
Alt0: Lt N2
U0: NaturalsToSemiRing N2
H0: Naturals N2
f: N -> N2
IsSemiRingPreserving0: IsSemiRingPreserving f

IsInjective f
N: Type
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
N2: Type
Aap0: Apart N2
Aplus0: Plus N2
Amult0: Mult N2
Azero0: Zero N2
Aone0: One N2
Ale0: Le N2
Alt0: Lt N2
U0: NaturalsToSemiRing N2
H0: Naturals N2
f: N -> N2
IsSemiRingPreserving0: IsSemiRingPreserving f

IsInjective f
exact (to_semiring_injective (naturals_to_semiring N2 N) _). Qed. Section retract_is_nat. Context `{Naturals N} `{IsSemiCRing SR} {SRap : Apart SR} {SRle SRlt} `{!FullPseudoSemiRingOrder (A:=SR) SRle SRlt}. Context (f : N -> SR) `{!IsEquiv f} `{!IsSemiRingPreserving f} `{!IsSemiRingPreserving (f^-1)}. (* If we make this an instance, instance resolution will loop *) Definition retract_is_nat_to_sr : NaturalsToSemiRing SR := fun R _ _ _ _ _ => naturals_to_semiring N R ∘ f^-1. Section for_another_semirings. Context `{IsSemiCRing R}. Instance: IsSemiRingPreserving (naturals_to_semiring N R ∘ f^-1) := {}. Context (h : SR -> R) `{!IsSemiRingPreserving h}.
N: Type
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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
SRap: Apart SR
SRle: Le SR
SRlt: Lt SR
FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder SRle SRlt
f: N -> SR
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving f^-1
R: Type
Aplus1: Plus R
Amult1: Mult R
Azero1: Zero R
Aone1: One R
H1: IsSemiCRing R
h: SR -> R
IsSemiRingPreserving2: IsSemiRingPreserving h
x: SR

(naturals_to_semiring N R ∘ f^-1) x = h 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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
SRap: Apart SR
SRle: Le SR
SRlt: Lt SR
FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder SRle SRlt
f: N -> SR
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving f^-1
R: Type
Aplus1: Plus R
Amult1: Mult R
Azero1: Zero R
Aone1: One R
H1: IsSemiCRing R
h: SR -> R
IsSemiRingPreserving2: IsSemiRingPreserving h
x: SR

(naturals_to_semiring N R ∘ f^-1) x = h 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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
SRap: Apart SR
SRle: Le SR
SRlt: Lt SR
FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder SRle SRlt
f: N -> SR
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving f^-1
R: Type
Aplus1: Plus R
Amult1: Mult R
Azero1: Zero R
Aone1: One R
H1: IsSemiCRing R
h: SR -> R
IsSemiRingPreserving2: IsSemiRingPreserving h
x: SR

(naturals_to_semiring N R ∘ f^-1) x = (h ∘ (f ∘ f^-1)) 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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
SRap: Apart SR
SRle: Le SR
SRlt: Lt SR
FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder SRle SRlt
f: N -> SR
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving f^-1
R: Type
Aplus1: Plus R
Amult1: Mult R
Azero1: Zero R
Aone1: One R
H1: IsSemiCRing R
h: SR -> R
IsSemiRingPreserving2: IsSemiRingPreserving h
x: SR
(h ∘ (f ∘ f^-1)) x = h 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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
SRap: Apart SR
SRle: Le SR
SRlt: Lt SR
FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder SRle SRlt
f: N -> SR
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving f^-1
R: Type
Aplus1: Plus R
Amult1: Mult R
Azero1: Zero R
Aone1: One R
H1: IsSemiCRing R
h: SR -> R
IsSemiRingPreserving2: IsSemiRingPreserving h
x: SR

(naturals_to_semiring N R ∘ f^-1) x = (h ∘ (f ∘ f^-1)) 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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
SRap: Apart SR
SRle: Le SR
SRlt: Lt SR
FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder SRle SRlt
f: N -> SR
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving f^-1
R: Type
Aplus1: Plus R
Amult1: Mult R
Azero1: Zero R
Aone1: One R
H1: IsSemiCRing R
h: SR -> R
IsSemiRingPreserving2: IsSemiRingPreserving h
x: SR

(h ∘ (f ∘ f^-1)) x = (naturals_to_semiring N R ∘ f^-1) x
apply (to_semiring_unique (h ∘ f)).
N: Type
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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
SRap: Apart SR
SRle: Le SR
SRlt: Lt SR
FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder SRle SRlt
f: N -> SR
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving f^-1
R: Type
Aplus1: Plus R
Amult1: Mult R
Azero1: Zero R
Aone1: One R
H1: IsSemiCRing R
h: SR -> R
IsSemiRingPreserving2: IsSemiRingPreserving h
x: SR

(h ∘ (f ∘ f^-1)) x = h 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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
SRap: Apart SR
SRle: Le SR
SRlt: Lt SR
FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder SRle SRlt
f: N -> SR
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving f^-1
R: Type
Aplus1: Plus R
Amult1: Mult R
Azero1: Zero R
Aone1: One R
H1: IsSemiCRing R
h: SR -> R
IsSemiRingPreserving2: IsSemiRingPreserving h
x: SR

h (f (f^-1 x)) = h x
apply ap, eisretr. Qed. End for_another_semirings. (* If we make this an instance, instance resolution will loop *)
N: Type
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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
SRap: Apart SR
SRle: Le SR
SRlt: Lt SR
FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder SRle SRlt
f: N -> SR
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving f^-1

Naturals SR
N: Type
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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
SRap: Apart SR
SRle: Le SR
SRlt: Lt SR
FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder SRle SRlt
f: N -> SR
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving f^-1

Naturals SR
N: Type
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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
SRap: Apart SR
SRle: Le SR
SRlt: Lt SR
FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder SRle SRlt
f: N -> SR
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving f^-1

forall (B : Type) (Aplus1 : Plus B) (Amult1 : Mult B) (Azero1 : Zero B) (Aone1 : One B) (H : IsSemiCRing B), IsSemiRingPreserving (naturals_to_semiring SR 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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
SRap: Apart SR
SRle: Le SR
SRlt: Lt SR
FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder SRle SRlt
f: N -> SR
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving f^-1
forall (B : Type) (Aplus1 : Plus B) (Amult1 : Mult B) (Azero1 : Zero B) (Aone1 : One B) (H : IsSemiCRing B) (h : SR -> B), IsSemiRingPreserving h -> forall x : SR, naturals_to_semiring SR B x = h 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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
SRap: Apart SR
SRle: Le SR
SRlt: Lt SR
FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder SRle SRlt
f: N -> SR
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving f^-1

forall (B : Type) (Aplus1 : Plus B) (Amult1 : Mult B) (Azero1 : Zero B) (Aone1 : One B) (H : IsSemiCRing B), IsSemiRingPreserving (naturals_to_semiring SR 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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
SRap: Apart SR
SRle: Le SR
SRlt: Lt SR
FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder SRle SRlt
f: N -> SR
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving f^-1

forall (B : Type) (Aplus1 : Plus B) (Amult1 : Mult B) (Azero1 : Zero B) (Aone1 : One B) (H : IsSemiCRing B), IsSemiRingPreserving (naturals_to_semiring N B ∘ f^-1)
apply _.
N: Type
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
SR: Type
Aplus0: Plus SR
Amult0: Mult SR
Azero0: Zero SR
Aone0: One SR
H0: IsSemiCRing SR
SRap: Apart SR
SRle: Le SR
SRlt: Lt SR
FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder SRle SRlt
f: N -> SR
IsEquiv0: IsEquiv f
IsSemiRingPreserving0: IsSemiRingPreserving f
IsSemiRingPreserving1: IsSemiRingPreserving f^-1

forall (B : Type) (Aplus1 : Plus B) (Amult1 : Mult B) (Azero1 : Zero B) (Aone1 : One B) (H : IsSemiCRing B) (h : SR -> B), IsSemiRingPreserving h -> forall x : SR, naturals_to_semiring SR B x = h x
intros;apply same_morphism;apply _. Qed. End retract_is_nat. Section nat_to_nat_iso. Context `{Naturals N1} `{Naturals N2}.
N1: Type
Aap: Apart N1
Aplus: Plus N1
Amult: Mult N1
Azero: Zero N1
Aone: One N1
Ale: Le N1
Alt: Lt N1
U: NaturalsToSemiRing N1
H: Naturals N1
N2: Type
Aap0: Apart N2
Aplus0: Plus N2
Amult0: Mult N2
Azero0: Zero N2
Aone0: One N2
Ale0: Le N2
Alt0: Lt N2
U0: NaturalsToSemiRing N2
H0: Naturals N2

IsEquiv (naturals_to_semiring N1 N2)
N1: Type
Aap: Apart N1
Aplus: Plus N1
Amult: Mult N1
Azero: Zero N1
Aone: One N1
Ale: Le N1
Alt: Lt N1
U: NaturalsToSemiRing N1
H: Naturals N1
N2: Type
Aap0: Apart N2
Aplus0: Plus N2
Amult0: Mult N2
Azero0: Zero N2
Aone0: One N2
Ale0: Le N2
Alt0: Lt N2
U0: NaturalsToSemiRing N2
H0: Naturals N2

IsEquiv (naturals_to_semiring N1 N2)
apply Equivalences.isequiv_adjointify with (naturals_to_semiring N2 N1); red;apply (to_semiring_involutive _ _). Defined. End nat_to_nat_iso. Section contents. Universe U. (* {U U} because we do forall n : N, {id} n = nat_to_sr N N n *) Context `{Funext} `{Univalence} {N : Type@{U} } `{Naturals@{U U U U U U U U} 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
N': Type
Aap0: Apart N'
Aplus0: Plus N'
Amult0: Mult N'
Azero0: Zero N'
Aone0: One N'
Ale0: Le N'
Alt0: Lt N'
U0: NaturalsToSemiRing N'
H2: Naturals N'

forall P : Operations -> Type, P (BuildOperations N') -> P (BuildOperations 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
N': Type
Aap0: Apart N'
Aplus0: Plus N'
Amult0: Mult N'
Azero0: Zero N'
Aone0: One N'
Ale0: Le N'
Alt0: Lt N'
U0: NaturalsToSemiRing N'
H2: Naturals N'

forall P : Operations -> Type, P (BuildOperations N') -> P (BuildOperations N)
apply SemiRings.iso_leibnitz with (naturals_to_semiring N' N);apply _. Qed. Section borrowed_from_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

forall P : N -> Type, P 0 -> (forall n : N, P n -> P (1 + n)) -> forall n : N, P 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

forall P : N -> Type, P 0 -> (forall n : N, P n -> P (1 + n)) -> forall n : N, P 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
Q:= fun s : Operations => forall P : s -> Type, P 0 -> (forall n : s, P n -> P (1 + n)) -> forall n : s, P n: Operations -> Type

forall P : N -> Type, P 0 -> (forall n : N, P n -> P (1 + n)) -> forall n : N, P 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
Q:= fun s : Operations => forall P : s -> Type, P 0 -> (forall n : s, P n -> P (1 + n)) -> forall n : s, P n: Operations -> Type

Q (BuildOperations 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
Q:= fun s : Operations => forall P : s -> Type, P 0 -> (forall n : s, P n -> P (1 + n)) -> forall n : s, P n: Operations -> Type

Q (BuildOperations 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

forall P : BuildOperations nat -> Type, P 0 -> (forall n : BuildOperations nat, P n -> P (1 + n)) -> forall n : BuildOperations nat, P 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

forall P : nat -> Type, P 0 -> (forall n : nat, P n -> P (1 + n)) -> forall n : nat, P n
exact nat_induction. 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

forall x : N, ((x = 0) + {y : N & x = (1 + y)%mc})%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

forall x : N, ((x = 0) + {y : N & x = (1 + y)%mc})%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

forall x : BuildOperations nat, ((x = 0) + {y : BuildOperations nat & x = (1 + y)%mc})%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

forall x : nat, ((x = 0) + {y : nat & x = (1 + y)%mc})%type
intros [|x];eauto. 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

Biinduction 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

Biinduction 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

forall P : N -> Type, P 0 -> (forall n : N, P n <-> P (1 + n)) -> forall n : N, P 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
P: N -> Type
E0: P 0
ES: forall n : N, P n <-> P (1 + n)

forall n : N, P 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
P: N -> Type
E0: P 0
ES: forall n : N, P n <-> P (1 + n)

forall n : N, P n -> P (1 + n)
apply ES. 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

forall z : N, LeftCancellation 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

forall z : N, LeftCancellation 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

forall z : BuildOperations nat, LeftCancellation 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

forall z : nat, LeftCancellation plus z
first [exact nat_plus_cancel_l@{U i}|exact nat_plus_cancel_l@{U}]. 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

forall z : N, RightCancellation 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

forall z : N, RightCancellation 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
z: N

RightCancellation plus z
apply (right_cancel_from_left (+)). 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

forall z : N, PropHolds (z <> 0) -> LeftCancellation 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

forall z : N, PropHolds (z <> 0) -> LeftCancellation 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

forall z : BuildOperations nat, PropHolds (z <> 0) -> LeftCancellation 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

forall z : nat, PropHolds (z <> 0) -> LeftCancellation mult z
apply nat_mult_cancel_l. 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

forall z : N, PropHolds (z <> 0) -> RightCancellation 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

forall z : N, PropHolds (z <> 0) -> RightCancellation 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
z: N
X: PropHolds (z <> 0)

RightCancellation mult z
apply (right_cancel_from_left (.*.)). 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

PropHolds ((1 : N) <> 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

PropHolds ((1 : N) <> 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

PropHolds (1 <> 0)
apply _. 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
H2: Apart N
TrivialApart0: TrivialApart N

PropHolds ((1 : N) ≶ 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
H2: Apart N
TrivialApart0: TrivialApart N

PropHolds ((1 : N) ≶ 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
H2: Apart N
TrivialApart0: TrivialApart N

PropHolds (1 <> 0)
solve_propholds. 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

forall x y : N, 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

forall x y : N, 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

forall x y : BuildOperations nat, 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

forall x y : nat, x + y = 0 -> ((x = 0) * (y = 0))%type
apply plus_eq_zero. 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

forall x y : N, x + y = 1 -> ((x = 1) * (y = 0) + (x = 0) * (y = 1))%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

forall x y : N, x + y = 1 -> ((x = 1) * (y = 0) + (x = 0) * (y = 1))%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

forall x y : BuildOperations nat, x + y = 1 -> ((x = 1) * (y = 0) + (x = 0) * (y = 1))%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

forall x y : nat, x + y = 1 -> ((x = 1) * (y = 0) + (x = 0) * (y = 1))%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
x: nat

(x.+1)%nat + 0%nat = 1 -> (((x.+1)%nat = 1) * (0%nat = 0) + ((x.+1)%nat = 0) * (0%nat = 1))%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
x, y: nat
(x.+1)%nat + (y.+1)%nat = 1 -> (((x.+1)%nat = 1) * ((y.+1)%nat = 0) + ((x.+1)%nat = 0) * ((y.+1)%nat = 1))%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
x: nat

(x.+1)%nat + 0%nat = 1 -> (((x.+1)%nat = 1) * (0%nat = 0) + ((x.+1)%nat = 0) * (0%nat = 1))%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
x: nat
E: (x.+1)%nat + 0%nat = 1

(((x.+1)%nat = 1) * (0%nat = 0) + ((x.+1)%nat = 0) * (0%nat = 1))%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
x: nat
E: (x.+1)%nat = 1

(((x.+1)%nat = 1) * (0%nat = 0) + ((x.+1)%nat = 0) * (0%nat = 1))%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
x: nat
E: x = 0%nat

(((x.+1)%nat = 1) * (0%nat = 0) + ((x.+1)%nat = 0) * (0%nat = 1))%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
x: nat
E: x = 0%nat

((1%nat = 1) * (0%nat = 0) + (1%nat = 0) * (0%nat = 1))%type
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
x, y: nat

(x.+1)%nat + (y.+1)%nat = 1 -> (((x.+1)%nat = 1) * ((y.+1)%nat = 0) + ((x.+1)%nat = 0) * ((y.+1)%nat = 1))%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
x, y: nat
E: (x.+1)%nat + (y.+1)%nat = 1

(((x.+1)%nat = 1) * ((y.+1)%nat = 0) + ((x.+1)%nat = 0) * ((y.+1)%nat = 1))%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
x, y: nat
E: ((x + y).+2)%nat = 1

(((x.+1)%nat = 1) * ((y.+1)%nat = 0) + ((x.+1)%nat = 0) * ((y.+1)%nat = 1))%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
x, y: nat
E: ((x + y).+1)%nat = 0%nat

(((x.+1)%nat = 1) * ((y.+1)%nat = 0) + ((x.+1)%nat = 0) * ((y.+1)%nat = 1))%type
destruct (S_neq_0 _ E). 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

ZeroProduct 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

ZeroProduct 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

ZeroProduct (BuildOperations 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

ZeroProduct 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

forall x y : nat, x * y = 0 -> ((x = 0) + (y = 0))%type
apply mult_eq_zero. Qed. End borrowed_from_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
x: N

1 + 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
x: N

1 + 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
x: N
E: 1 + x = 0

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
x: N
E: 1 + x = 0
fst: 1 = 0
snd: x = 0

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
x: N
E: 1 + x = 0
fst: 1 = 0
snd: x = 0

1 = 0
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

DecidablePaths 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

DecidablePaths N
apply decidablepaths_equiv with nat (naturals_to_semiring nat N);apply _. Qed. Section with_a_ring. Context `{IsCRing R} `{!IsSemiRingPreserving (f : N -> R)} `{!IsInjective f}.
H: Funext
H0: Univalence
N: Type
Aap: Apart N
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
f: N -> R
IsSemiRingPreserving0: IsSemiRingPreserving (f : N -> R)
IsInjective0: IsInjective f
x, y: N

- f x = f 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
R: Type
Aplus0: Plus R
Amult0: Mult R
Azero0: Zero R
Aone0: One R
Anegate: Negate R
H2: IsCRing R
f: N -> R
IsSemiRingPreserving0: IsSemiRingPreserving (f : N -> R)
IsInjective0: IsInjective f
x, y: N

- f x = f 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
R: Type
Aplus0: Plus R
Amult0: Mult R
Azero0: Zero R
Aone0: One R
Anegate: Negate R
H2: IsCRing R
f: N -> R
IsSemiRingPreserving0: IsSemiRingPreserving (f : N -> R)
IsInjective0: IsInjective f
x, y: N
E: - f x = f 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
R: Type
Aplus0: Plus R
Amult0: Mult R
Azero0: Zero R
Aone0: One R
Anegate: Negate R
H2: IsCRing R
f: N -> R
IsSemiRingPreserving0: IsSemiRingPreserving (f : N -> R)
IsInjective0: IsInjective f
x, y: N
E: - f x = f y

f (x + y) = f 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
R: Type
Aplus0: Plus R
Amult0: Mult R
Azero0: Zero R
Aone0: One R
Anegate: Negate R
H2: IsCRing R
f: N -> R
IsSemiRingPreserving0: IsSemiRingPreserving (f : N -> R)
IsInjective0: IsInjective f
x, y: N
E: - f x = f y

f x - f x = 0
apply plus_negate_r. 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
R: Type
Aplus0: Plus R
Amult0: Mult R
Azero0: Zero R
Aone0: One R
Anegate: Negate R
H2: IsCRing R
f: N -> R
IsSemiRingPreserving0: IsSemiRingPreserving (f : N -> R)
IsInjective0: IsInjective f
x, y: N

- f x = f y -> f x = f 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
R: Type
Aplus0: Plus R
Amult0: Mult R
Azero0: Zero R
Aone0: One R
Anegate: Negate R
H2: IsCRing R
f: N -> R
IsSemiRingPreserving0: IsSemiRingPreserving (f : N -> R)
IsInjective0: IsInjective f
x, y: N

- f x = f y -> f x = f 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
R: Type
Aplus0: Plus R
Amult0: Mult R
Azero0: Zero R
Aone0: One R
Anegate: Negate R
H2: IsCRing R
f: N -> R
IsSemiRingPreserving0: IsSemiRingPreserving (f : N -> R)
IsInjective0: IsInjective f
x, y: N
E: - f x = f y

f x = f 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
R: Type
Aplus0: Plus R
Amult0: Mult R
Azero0: Zero R
Aone0: One R
Anegate: Negate R
H2: IsCRing R
f: N -> R
IsSemiRingPreserving0: IsSemiRingPreserving (f : N -> R)
IsInjective0: IsInjective f
x, y: N
E: - f x = f y
E2: x = 0
E3: y = 0

f x = f 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
R: Type
Aplus0: Plus R
Amult0: Mult R
Azero0: Zero R
Aone0: One R
Anegate: Negate R
H2: IsCRing R
f: N -> R
IsSemiRingPreserving0: IsSemiRingPreserving (f : N -> R)
IsInjective0: IsInjective f
x, y: N
E: - f x = f y
E2: x = 0
E3: y = 0

f 0 = f 0
reflexivity. Qed. End with_a_ring. End contents. (* Due to bug #2528 *) #[export] Hint Extern 6 (PropHolds (1 <> 0)) => eapply @nat_nontrivial : typeclass_instances. #[export] Hint Extern 6 (PropHolds (10)) => eapply @nat_nontrivial_apart : typeclass_instances.