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.
(* General results about arbitrary integer implementations. *)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import
HoTT.Classes.theory.nat_distance
HoTT.Classes.implementations.peano_naturals
HoTT.Classes.interfaces.naturals
HoTT.Classes.interfaces.orders
HoTT.Classes.implementations.natpair_integers
HoTT.Classes.theory.rings
HoTT.Classes.isomorphisms.rings.Require Export
HoTT.Classes.interfaces.integers.Import NatPair.Instances.Generalizable VariablesN Z R f.
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z R: Type Aplus0: Plus R Amult0: Mult R Azero0: Zero R Aone0: One R Anegate0: Negate R H0: IsCRing R f: Z -> R h: IsSemiRingPreserving f x: Z
f x = integers_to_ring Z R x
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z R: Type Aplus0: Plus R Amult0: Mult R Azero0: Zero R Aone0: One R Anegate0: Negate R H0: IsCRing R f: Z -> R h: IsSemiRingPreserving f x: Z
f x = integers_to_ring Z R x
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z R: Type Aplus0: Plus R Amult0: Mult R Azero0: Zero R Aone0: One R Anegate0: Negate R H0: IsCRing R f: Z -> R h: IsSemiRingPreserving f x: Z
integers_to_ring Z R x = f x
apply integers_initial.Qed.
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z R: Type Aplus0: Plus R Amult0: Mult R Azero0: Zero R Aone0: One R Anegate0: Negate R H0: IsCRing R f, g: Z -> R IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving g x: Z
f x = g x
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z R: Type Aplus0: Plus R Amult0: Mult R Azero0: Zero R Aone0: One R Anegate0: Negate R H0: IsCRing R f, g: Z -> R IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving g x: Z
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z Z2: Type Aap0: Apart Z2 Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 Ale0: Le Z2 Alt0: Lt Z2 U0: IntegersToRing Z2 H0: Integers Z2 x: Z
integers_to_ring Z2 Z (integers_to_ring Z Z2 x) = x
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z Z2: Type Aap0: Apart Z2 Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 Ale0: Le Z2 Alt0: Lt Z2 U0: IntegersToRing Z2 H0: Integers Z2 x: Z
integers_to_ring Z2 Z (integers_to_ring Z Z2 x) = x
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z Z2: Type Aap0: Apart Z2 Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 Ale0: Le Z2 Alt0: Lt Z2 U0: IntegersToRing Z2 H0: Integers Z2 x: Z
(integers_to_ring Z2 Z ∘ integers_to_ring Z Z2) x =
id x
apply to_ring_unique_alt;exact _.Qed.
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z R: Type Aplus0: Plus R Amult0: Mult R Azero0: Zero R Aone0: One R Anegate0: Negate R H0: IsCRing R f: R -> Z g: Z -> R IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving g x: Z
f (g x) = x
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z R: Type Aplus0: Plus R Amult0: Mult R Azero0: Zero R Aone0: One R Anegate0: Negate R H0: IsCRing R f: R -> Z g: Z -> R IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving g x: Z
f (g x) = x
exact (to_ring_unique_alt (f ∘ g) id _).Qed.
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z R1: Type Aplus0: Plus R1 Amult0: Mult R1 Azero0: Zero R1 Aone0: One R1 Anegate0: Negate R1 H0: IsCRing R1 R2: Type Aplus1: Plus R2 Amult1: Mult R2 Azero1: Zero R2 Aone1: One R2 Anegate1: Negate R2 H1: IsCRing R2 f: R1 -> R2 g: Z -> R1 h: Z -> R2 IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving g IsSemiRingPreserving2: IsSemiRingPreserving h x: Z
f (g x) = h x
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z R1: Type Aplus0: Plus R1 Amult0: Mult R1 Azero0: Zero R1 Aone0: One R1 Anegate0: Negate R1 H0: IsCRing R1 R2: Type Aplus1: Plus R2 Amult1: Mult R2 Azero1: Zero R2 Aone1: One R2 Anegate1: Negate R2 H1: IsCRing R2 f: R1 -> R2 g: Z -> R1 h: Z -> R2 IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving g IsSemiRingPreserving2: IsSemiRingPreserving h x: Z
f (g x) = h x
exact (to_ring_unique_alt (f ∘ g) h _).Qed.
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z f: Z -> Z IsSemiRingPreserving0: IsSemiRingPreserving f x: Z
f x = x
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z f: Z -> Z IsSemiRingPreserving0: IsSemiRingPreserving f x: Z
f x = x
exact (to_ring_unique_alt f id _).Qed.(* A ring morphism from integers to another ring is injective if there's an injection in the other direction: *)
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z R: Type Aplus0: Plus R Amult0: Mult R Azero0: Zero R Aone0: One R Anegate0: Negate R H0: IsCRing R f: R -> Z g: Z -> R IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving g
IsInjective g
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z R: Type Aplus0: Plus R Amult0: Mult R Azero0: Zero R Aone0: One R Anegate0: Negate R H0: IsCRing R f: R -> Z g: Z -> R IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving g
IsInjective g
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z R: Type Aplus0: Plus R Amult0: Mult R Azero0: Zero R Aone0: One R Anegate0: Negate R H0: IsCRing R f: R -> Z g: Z -> R IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving g x, y: Z E: g x = g y
x = y
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z R: Type Aplus0: Plus R Amult0: Mult R Azero0: Zero R Aone0: One R Anegate0: Negate R H0: IsCRing R f: R -> Z g: Z -> R IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving g x, y: Z E: g x = g y
id x = id y
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z R: Type Aplus0: Plus R Amult0: Mult R Azero0: Zero R Aone0: One R Anegate0: Negate R H0: IsCRing R f: R -> Z g: Z -> R IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving g x, y: Z E: g x = g y
f (g x) = f (g y)
apply ap,E.Qed.
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z Z2: Type Aap0: Apart Z2 Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 Ale0: Le Z2 Alt0: Lt Z2 U0: IntegersToRing Z2 H0: Integers Z2 f: Z -> Z2 IsSemiRingPreserving0: IsSemiRingPreserving f
IsInjective f
Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H: Integers Z Z2: Type Aap0: Apart Z2 Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 Ale0: Le Z2 Alt0: Lt Z2 U0: IntegersToRing Z2 H0: Integers Z2 f: Z -> Z2 IsSemiRingPreserving0: IsSemiRingPreserving f
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z 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 f: N -> Z IsSemiRingPreserving0: IsSemiRingPreserving f
IsInjective f
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z 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 f: N -> Z IsSemiRingPreserving0: IsSemiRingPreserving f
IsInjective f
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z 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 f: N -> Z IsSemiRingPreserving0: IsSemiRingPreserving f x, y: N E: f x = f y
x = y
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z 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 f: N -> Z IsSemiRingPreserving0: IsSemiRingPreserving f x, y: N E: f x = f y
' x = ' y
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z 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 f: N -> Z IsSemiRingPreserving0: IsSemiRingPreserving f x, y: N E: f x = f y
integers_to_ring Z (NatPair.Z N) (f x) =
integers_to_ring Z (NatPair.Z N) (f y)
apply ap,E.Qed.Sectionretract_is_int.Context `{Funext}.Context `{Integers Z} `{IsCRing Z2}
{Z2ap : Apart Z2} {Z2le Z2lt} `{!FullPseudoSemiRingOrder (A:=Z2) Z2le Z2lt}.Context (f : Z -> Z2) `{!IsEquiv f} `{!IsSemiRingPreserving f}
`{!IsSemiRingPreserving (f^-1)}.(* If we make this an instance, then instance resolution will often loop *)Definitionretract_is_int_to_ring : IntegersToRing Z2 := funZ2______ =>
integers_to_ring Z Z2 ∘ f^-1.Sectionfor_another_ring.Context `{IsCRing R}.Instance: IsSemiRingPreserving (integers_to_ring Z R ∘ f^-1) := {}.Context (h : Z2 -> R) `{!IsSemiRingPreserving h}.
H: Funext Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H0: Integers Z Z2: Type Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 H1: IsCRing Z2 Z2ap: Apart Z2 Z2le: Le Z2 Z2lt: Lt Z2 FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder
Z2le Z2lt f: Z -> Z2 IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving f^-1 R: Type Aplus1: Plus R Amult1: Mult R Azero1: Zero R Aone1: One R Anegate1: Negate R H2: IsCRing R h: Z2 -> R IsSemiRingPreserving2: IsSemiRingPreserving h x: Z2
(integers_to_ring Z R ∘ f^-1) x = h x
H: Funext Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H0: Integers Z Z2: Type Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 H1: IsCRing Z2 Z2ap: Apart Z2 Z2le: Le Z2 Z2lt: Lt Z2 FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder
Z2le Z2lt f: Z -> Z2 IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving f^-1 R: Type Aplus1: Plus R Amult1: Mult R Azero1: Zero R Aone1: One R Anegate1: Negate R H2: IsCRing R h: Z2 -> R IsSemiRingPreserving2: IsSemiRingPreserving h x: Z2
(integers_to_ring Z R ∘ f^-1) x = h x
H: Funext Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H0: Integers Z Z2: Type Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 H1: IsCRing Z2 Z2ap: Apart Z2 Z2le: Le Z2 Z2lt: Lt Z2 FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder
Z2le Z2lt f: Z -> Z2 IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving f^-1 R: Type Aplus1: Plus R Amult1: Mult R Azero1: Zero R Aone1: One R Anegate1: Negate R H2: IsCRing R h: Z2 -> R IsSemiRingPreserving2: IsSemiRingPreserving h x: Z2
(integers_to_ring Z R ∘ f^-1) x = (h ∘ (f ∘ f^-1)) x
H: Funext Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H0: Integers Z Z2: Type Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 H1: IsCRing Z2 Z2ap: Apart Z2 Z2le: Le Z2 Z2lt: Lt Z2 FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder
Z2le Z2lt f: Z -> Z2 IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving f^-1 R: Type Aplus1: Plus R Amult1: Mult R Azero1: Zero R Aone1: One R Anegate1: Negate R H2: IsCRing R h: Z2 -> R IsSemiRingPreserving2: IsSemiRingPreserving h x: Z2
(h ∘ (f ∘ f^-1)) x = h x
H: Funext Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H0: Integers Z Z2: Type Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 H1: IsCRing Z2 Z2ap: Apart Z2 Z2le: Le Z2 Z2lt: Lt Z2 FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder
Z2le Z2lt f: Z -> Z2 IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving f^-1 R: Type Aplus1: Plus R Amult1: Mult R Azero1: Zero R Aone1: One R Anegate1: Negate R H2: IsCRing R h: Z2 -> R IsSemiRingPreserving2: IsSemiRingPreserving h x: Z2
(integers_to_ring Z R ∘ f^-1) x = (h ∘ (f ∘ f^-1)) x
H: Funext Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H0: Integers Z Z2: Type Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 H1: IsCRing Z2 Z2ap: Apart Z2 Z2le: Le Z2 Z2lt: Lt Z2 FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder
Z2le Z2lt f: Z -> Z2 IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving f^-1 R: Type Aplus1: Plus R Amult1: Mult R Azero1: Zero R Aone1: One R Anegate1: Negate R H2: IsCRing R h: Z2 -> R IsSemiRingPreserving2: IsSemiRingPreserving h x: Z2
(h ∘ (f ∘ f^-1)) x = (integers_to_ring Z R ∘ f^-1) x
apply (to_ring_unique (h ∘ f)).
H: Funext Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H0: Integers Z Z2: Type Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 H1: IsCRing Z2 Z2ap: Apart Z2 Z2le: Le Z2 Z2lt: Lt Z2 FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder
Z2le Z2lt f: Z -> Z2 IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving f^-1 R: Type Aplus1: Plus R Amult1: Mult R Azero1: Zero R Aone1: One R Anegate1: Negate R H2: IsCRing R h: Z2 -> R IsSemiRingPreserving2: IsSemiRingPreserving h x: Z2
(h ∘ (f ∘ f^-1)) x = h x
H: Funext Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H0: Integers Z Z2: Type Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 H1: IsCRing Z2 Z2ap: Apart Z2 Z2le: Le Z2 Z2lt: Lt Z2 FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder
Z2le Z2lt f: Z -> Z2 IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving f^-1 R: Type Aplus1: Plus R Amult1: Mult R Azero1: Zero R Aone1: One R Anegate1: Negate R H2: IsCRing R h: Z2 -> R IsSemiRingPreserving2: IsSemiRingPreserving h x: Z2
h (f (f^-1 x)) = h x
H: Funext Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H0: Integers Z Z2: Type Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 H1: IsCRing Z2 Z2ap: Apart Z2 Z2le: Le Z2 Z2lt: Lt Z2 FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder
Z2le Z2lt f: Z -> Z2 IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving f^-1 R: Type Aplus1: Plus R Amult1: Mult R Azero1: Zero R Aone1: One R Anegate1: Negate R H2: IsCRing R h: Z2 -> R IsSemiRingPreserving2: IsSemiRingPreserving h x: Z2
f (f^-1 x) = x
apply eisretr.Qed.Endfor_another_ring.(* If we make this an instance, then instance resolution will often loop *)
H: Funext Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H0: Integers Z Z2: Type Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 H1: IsCRing Z2 Z2ap: Apart Z2 Z2le: Le Z2 Z2lt: Lt Z2 FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder
Z2le Z2lt f: Z -> Z2 IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving f^-1
Integers Z2
H: Funext Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H0: Integers Z Z2: Type Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 H1: IsCRing Z2 Z2ap: Apart Z2 Z2le: Le Z2 Z2lt: Lt Z2 FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder
Z2le Z2lt f: Z -> Z2 IsEquiv0: IsEquiv f IsSemiRingPreserving0: IsSemiRingPreserving f IsSemiRingPreserving1: IsSemiRingPreserving f^-1
Integers Z2
H: Funext Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H0: Integers Z Z2: Type Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 H1: IsCRing Z2 Z2ap: Apart Z2 Z2le: Le Z2 Z2lt: Lt Z2 FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder
Z2le Z2lt f: Z -> Z2 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)
(Anegate0 : Negate B) (H : IsCRing B),
IsSemiRingPreserving (integers_to_ring Z2 B)
H: Funext Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H0: Integers Z Z2: Type Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 H1: IsCRing Z2 Z2ap: Apart Z2 Z2le: Le Z2 Z2lt: Lt Z2 FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder
Z2le Z2lt f: Z -> Z2 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) (Anegate0 : Negate B)
(H : IsCRing B) (h : Z2 -> B),
IsSemiRingPreserving h ->
forallx : Z2, integers_to_ring Z2 B x = h x
H: Funext Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H0: Integers Z Z2: Type Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 H1: IsCRing Z2 Z2ap: Apart Z2 Z2le: Le Z2 Z2lt: Lt Z2 FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder
Z2le Z2lt f: Z -> Z2 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)
(Anegate0 : Negate B) (H : IsCRing B),
IsSemiRingPreserving (integers_to_ring Z2 B)
H: Funext Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H0: Integers Z Z2: Type Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 H1: IsCRing Z2 Z2ap: Apart Z2 Z2le: Le Z2 Z2lt: Lt Z2 FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder
Z2le Z2lt f: Z -> Z2 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)
(Anegate0 : Negate B) (H : IsCRing B),
IsSemiRingPreserving (integers_to_ring Z B ∘ f^-1)
exact _.
H: Funext Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H0: Integers Z Z2: Type Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 H1: IsCRing Z2 Z2ap: Apart Z2 Z2le: Le Z2 Z2lt: Lt Z2 FullPseudoSemiRingOrder0: FullPseudoSemiRingOrder
Z2le Z2lt f: Z -> Z2 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)
(Anegate0 : Negate B) (H : IsCRing B) (h : Z2 -> B),
IsSemiRingPreserving h ->
forallx : Z2, integers_to_ring Z2 B x = h x
Z1: Type Aap: Apart Z1 Aplus: Plus Z1 Amult: Mult Z1 Azero: Zero Z1 Aone: One Z1 Anegate: Negate Z1 Ale: Le Z1 Alt: Lt Z1 U: IntegersToRing Z1 H: Integers Z1 Z2: Type Aap0: Apart Z2 Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 Ale0: Le Z2 Alt0: Lt Z2 U0: IntegersToRing Z2 H0: Integers Z2
IsEquiv (integers_to_ring Z1 Z2)
Z1: Type Aap: Apart Z1 Aplus: Plus Z1 Amult: Mult Z1 Azero: Zero Z1 Aone: One Z1 Anegate: Negate Z1 Ale: Le Z1 Alt: Lt Z1 U: IntegersToRing Z1 H: Integers Z1 Z2: Type Aap0: Apart Z2 Aplus0: Plus Z2 Amult0: Mult Z2 Azero0: Zero Z2 Aone0: One Z2 Anegate0: Negate Z2 Ale0: Le Z2 Alt0: Lt Z2 U0: IntegersToRing Z2 H0: Integers Z2
IsEquiv (integers_to_ring Z1 Z2)
apply Equivalences.isequiv_adjointify with (integers_to_ring Z2 Z1);
red;exact (to_ring_involutive _ _).Defined.Endint_to_int_iso.Sectioncontents.UniverseU.Context `{Funext} `{Univalence}.Context (Z : Type@{U}) `{Integers@{U U U U U U U U} Z}.
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z Z': Type Aap0: Apart Z' Aplus0: Plus Z' Amult0: Mult Z' Azero0: Zero Z' Aone0: One Z' Anegate0: Negate Z' Ale0: Le Z' Alt0: Lt Z' U0: IntegersToRing Z' H2: Integers Z'
forallP : Rings.Operations -> Type,
P (Rings.BuildOperations Z') ->
P (Rings.BuildOperations Z)
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z Z': Type Aap0: Apart Z' Aplus0: Plus Z' Amult0: Mult Z' Azero0: Zero Z' Aone0: One Z' Anegate0: Negate Z' Ale0: Le Z' Alt0: Lt Z' U0: IntegersToRing Z' H2: Integers Z'
forallP : Rings.Operations -> Type,
P (Rings.BuildOperations Z') ->
P (Rings.BuildOperations Z)
apply Rings.iso_leibnitz with (integers_to_ring Z' Z);exact _.Qed.
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z
DecidablePaths Z
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z
DecidablePaths Z
apply decidablepaths_equiv with (NatPair.Z nat)
(integers_to_ring (NatPair.Z nat) Z);exact _.Qed.
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z 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
IntAbs Z N
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z 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
IntAbs Z N
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z 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 x: Z
({n : N & naturals_to_semiring N Z n = x} +
{n : N & naturals_to_semiring N Z n = - x})%type
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z 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 x: Z n: N E: naturals_to_semiring N (NatPair.Z N) n =
integers_to_ring Z (NatPair.Z N) x
naturals_to_semiring N Z n = x
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z 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 x: Z n: N E: naturals_to_semiring N (NatPair.Z N) n =
- integers_to_ring Z (NatPair.Z N) x
naturals_to_semiring N Z n = - x
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z 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 x: Z n: N E: naturals_to_semiring N (NatPair.Z N) n =
integers_to_ring Z (NatPair.Z N) x
naturals_to_semiring N Z n = x
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z 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 x: Z n: N E: naturals_to_semiring N (NatPair.Z N) n =
integers_to_ring Z (NatPair.Z N) x
integers_to_ring Z (NatPair.Z N)
(naturals_to_semiring N Z n) =
integers_to_ring Z (NatPair.Z N) x
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z 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 x: Z n: N E: naturals_to_semiring N (NatPair.Z N) n =
integers_to_ring Z (NatPair.Z N) x
integers_to_ring Z (NatPair.Z N)
(naturals_to_semiring N Z n) =
naturals_to_semiring N (NatPair.Z N) n
apply (naturals.to_semiring_twice _ _ _).
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z 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 x: Z n: N E: naturals_to_semiring N (NatPair.Z N) n =
- integers_to_ring Z (NatPair.Z N) x
naturals_to_semiring N Z n = - x
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z 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 x: Z n: N E: naturals_to_semiring N (NatPair.Z N) n =
- integers_to_ring Z (NatPair.Z N) x
integers_to_ring Z (NatPair.Z N)
(naturals_to_semiring N Z n) =
integers_to_ring Z (NatPair.Z N) (- x)
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z 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 x: Z n: N E: naturals_to_semiring N (NatPair.Z N) n =
- integers_to_ring Z (NatPair.Z N) x
integers_to_ring Z (NatPair.Z N)
(naturals_to_semiring N Z n) =
naturals_to_semiring N (NatPair.Z N) n
apply (naturals.to_semiring_twice _ _ _).Qed.
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z
PropHolds ((1 : Z) <> 0)
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z
PropHolds ((1 : Z) <> 0)
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z E: 1 = 0
Empty
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z E: 1 = 0
1%nat = 0
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z E: 1 = 0
naturals_to_semiring nat Z 1%nat =
naturals_to_semiring nat Z 0
exact E. (* because [naturals_to_semiring nat] plays nice with 1 *)Qed.
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z
ZeroProduct Z
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z
ZeroProduct Z
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z x, y: Z E: x * y = 0
((x = 0) + (y = 0))%type
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z x, y: Z E: x * y = 0
integers_to_ring Z (NatPair.Z nat) x *
integers_to_ring Z (NatPair.Z nat) y = 0
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z x, y: Z E: x * y = 0 p: integers_to_ring Z (NatPair.Z nat) x = 0
((x = 0) + (y = 0))%type
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z x, y: Z E: x * y = 0 p: integers_to_ring Z (NatPair.Z nat) y = 0
((x = 0) + (y = 0))%type
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z x, y: Z E: x * y = 0
integers_to_ring Z (NatPair.Z nat) x *
integers_to_ring Z (NatPair.Z nat) y = 0
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z x, y: Z E: x * y = 0
0 = 0
trivial.
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z x, y: Z E: x * y = 0 p: integers_to_ring Z (NatPair.Z nat) x = 0
((x = 0) + (y = 0))%type
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z x, y: Z E: x * y = 0 p: integers_to_ring Z (NatPair.Z nat) x = 0
x = 0
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z x, y: Z E: x * y = 0 p: integers_to_ring Z (NatPair.Z nat) x = 0
integers_to_ring Z (NatPair.Z nat) x =
integers_to_ring Z (NatPair.Z nat) 0
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z x, y: Z E: x * y = 0 p: integers_to_ring Z (NatPair.Z nat) x = 0
integers_to_ring Z (NatPair.Z nat) x = 0
trivial.
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z x, y: Z E: x * y = 0 p: integers_to_ring Z (NatPair.Z nat) y = 0
((x = 0) + (y = 0))%type
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z x, y: Z E: x * y = 0 p: integers_to_ring Z (NatPair.Z nat) y = 0
y = 0
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z x, y: Z E: x * y = 0 p: integers_to_ring Z (NatPair.Z nat) y = 0
integers_to_ring Z (NatPair.Z nat) y =
integers_to_ring Z (NatPair.Z nat) 0
H: Funext H0: Univalence Z: Type Aap: Apart Z Aplus: Plus Z Amult: Mult Z Azero: Zero Z Aone: One Z Anegate: Negate Z Ale: Le Z Alt: Lt Z U: IntegersToRing Z H1: Integers Z x, y: Z E: x * y = 0 p: integers_to_ring Z (NatPair.Z nat) y = 0
integers_to_ring Z (NatPair.Z nat) y = 0
trivial.Qed.#[export] Instanceint_integral_domain : IsIntegralDomain Z := {}.Endcontents.