Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import
HoTT.Classes.interfaces.orders
HoTT.Classes.implementations.peano_naturals
HoTT.Classes.theory.rings
HoTT.Classes.isomorphisms.rings.Require Export
HoTT.Classes.interfaces.naturals.Generalizable VariablesA 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
N: Type Aap: Apart N 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;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 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.Sectionretract_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 *)Definitionretract_is_nat_to_sr : NaturalsToSemiRing SR
:= funR_____ => naturals_to_semiring N R ∘ f^-1.Sectionfor_another_semirings.Context `{IsSemiCRing R}.Instanceissemiringpreserving_naturals_to_semiring : 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.Endfor_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 ->
forallx : 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)
exact _.
N: Type Aap: Apart N 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 ->
forallx : SR, naturals_to_semiring SR B x = h x
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;exact (to_semiring_involutive _ _).Defined.Endnat_to_nat_iso.Sectioncontents.UniverseU.(* {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'
forallP : 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'
forallP : Operations -> Type,
P (BuildOperations N') -> P (BuildOperations N)
apply SemiRings.iso_leibnitz with (naturals_to_semiring N' N);exact _.Qed.Sectionborrowed_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
forallP : N -> Type,
P 0 ->
(foralln : N, P n -> P (1 + n)) -> foralln : 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
forallP : N -> Type,
P 0 ->
(foralln : N, P n -> P (1 + n)) -> foralln : 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:= funs : Operations =>
forallP : s -> Type,
P 0 ->
(foralln : s, P n -> P (1 + n)) ->
foralln : s, P n: Operations -> Type
forallP : N -> Type,
P 0 ->
(foralln : N, P n -> P (1 + n)) -> foralln : 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:= funs : Operations =>
forallP : s -> Type,
P 0 ->
(foralln : s, P n -> P (1 + n)) ->
foralln : 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:= funs : Operations =>
forallP : s -> Type,
P 0 ->
(foralln : s, P n -> P (1 + n)) ->
foralln : 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
forallP : BuildOperations nat -> Type,
P 0 ->
(foralln : BuildOperations nat, P n -> P (1 + n)) ->
foralln : 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
forallP : nat -> Type,
P 0 ->
(foralln : nat, P n -> P (1 + n)) ->
foralln : 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
forallx : N, (x = 0) + {y : N & x = 1 + 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 : N, (x = 0) + {y : N & x = 1 + 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
H: Funext H0: Univalence N: Type Aap: Apart N 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 : nat, (x = 0) + {y : nat & x = 1 + y}
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
forallP : N -> Type,
P 0 ->
(foralln : N, P n <-> P (1 + n)) -> foralln : 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: foralln : N, P n <-> P (1 + n)
foralln : 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: foralln : N, P n <-> P (1 + n)
foralln : 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
forallz : 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
forallz : 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
forallz : 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
forallz : 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
forallz : 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
forallz : 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
exact (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
forallz : 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
forallz : 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
forallz : 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
forallz : nat,
PropHolds (z <> 0) -> LeftCancellation mult z
exact 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
forallz : 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
forallz : 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
exact (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)
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 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
forallxy : N, x + y = 0 -> (x = 0) * (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
forallxy : N, x + y = 0 -> (x = 0) * (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
forallxy : BuildOperations nat,
x + y = 0 -> (x = 0) * (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
forallxy : nat, x + y = 0 -> (x = 0) * (y = 0)
exact 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
forallxy : N,
x + y = 1 -> (x = 1) * (y = 0) + (x = 0) * (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
forallxy : N,
x + y = 1 -> (x = 1) * (y = 0) + (x = 0) * (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
H: Funext H0: Univalence N: Type Aap: Apart N 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 x: 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, y: 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: 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: nat E: x.+1%nat + 0%nat = 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 x: nat E: x.+1%nat = 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 x: nat E: x = 0%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: nat E: x = 0%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, y: 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, y: nat E: x.+1%nat + y.+1%nat = 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 x, y: nat E: (x + y).+2%nat = 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 x, y: nat E: (x + y).+1%nat = 0%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 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
forallxy : nat, x * y = 0 -> (x = 0) + (y = 0)
exact mult_eq_zero.Qed.Endborrowed_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);exact _.Qed.Sectionwith_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)
H: Funext H0: Univalence N: Type Aap: Apart N 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)
H: Funext H0: Univalence N: Type Aap: Apart N 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.Endwith_a_ring.Endcontents.(* Due to bug #2528 *)#[export]
Hint Extern6 (PropHolds (1 <> 0)) =>
eapply @nat_nontrivial : typeclass_instances.#[export]
Hint Extern6 (PropHolds (1 ≶ 0)) =>
eapply @nat_nontrivial_apart : typeclass_instances.