Built with Alectryon. 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.
RequireRequire
  HoTT.Classes.theory.int_abs.
Require Import
  HoTT.Classes.implementations.peano_naturals
  HoTT.Classes.interfaces.abstract_algebra
  HoTT.Classes.interfaces.naturals
  HoTT.Classes.interfaces.orders
  HoTT.Classes.implementations.natpair_integers
  HoTT.Classes.theory.rings
  HoTT.Classes.theory.integers.
Require Export
  HoTT.Classes.orders.nat_int.

Import NatPair.Instances.
Generalizable Variables N Z R f.

Section integers.
Context `{Funext} `{Univalence}.
Context `{Integers Z} `{!TrivialApart Z}.

(* Add Ring Z : (rings.stdlib_ring_theory Z). *)
(* Add Ring nat : (rings.stdlib_semiring_theory nat). *)

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
TrivialApart0: TrivialApart Z
P: Z -> Type

P 0 -> (forall n : Z, 0 ≤ n -> P n -> P (1 + n)) -> (forall n : Z, n ≤ 0 -> P n -> P (n - 1)) -> forall n : Z, P 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
TrivialApart0: TrivialApart Z
P: Z -> Type

P 0 -> (forall n : Z, 0 ≤ n -> P n -> P (1 + n)) -> (forall n : Z, n ≤ 0 -> P n -> P (n - 1)) -> forall n : Z, P 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z

P 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
a: nat
A: naturals_to_semiring nat Z a = n

P 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
a: nat
A: naturals_to_semiring nat Z a = - n
P 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
a: nat
A: naturals_to_semiring nat Z a = n

P 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
a: nat
A: naturals_to_semiring nat Z a = n

P (naturals_to_semiring nat Z a)
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
a: nat

P (naturals_to_semiring nat Z a)
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z

forall a : nat, P (naturals_to_semiring nat Z a)
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z

P (naturals_to_semiring nat 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
forall n0 : nat, P (naturals_to_semiring nat Z n0) -> P (naturals_to_semiring nat Z (1 + n0))
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z

P (naturals_to_semiring nat 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z

P 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z

forall n0 : nat, P (naturals_to_semiring nat Z n0) -> P (naturals_to_semiring nat Z (1 + n0))
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
m: nat
E: P (naturals_to_semiring nat Z m)

P (naturals_to_semiring nat Z (1 + m))
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
m: nat
E: P (naturals_to_semiring nat Z m)

P (1 + naturals_to_semiring nat Z m)
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
m: nat
E: P (naturals_to_semiring nat Z m)

0 ≤ naturals_to_semiring nat Z m
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
m: nat
E: P (naturals_to_semiring nat Z m)
P (naturals_to_semiring nat Z m)
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
m: nat
E: P (naturals_to_semiring nat Z m)

0 ≤ naturals_to_semiring nat Z m
apply to_semiring_nonneg.
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
m: nat
E: P (naturals_to_semiring nat Z m)

P (naturals_to_semiring nat Z m)
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
a: nat
A: naturals_to_semiring nat Z a = - n

P 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
a: nat
A: naturals_to_semiring nat Z a = - n

P (- naturals_to_semiring nat Z a)
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
a: nat

P (- naturals_to_semiring nat Z a)
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z

forall a : nat, P (- naturals_to_semiring nat Z a)
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z

P (- naturals_to_semiring nat 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
forall n0 : nat, P (- naturals_to_semiring nat Z n0) -> P (- naturals_to_semiring nat Z (1 + n0))
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z

P (- naturals_to_semiring nat 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z

P 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z

forall n0 : nat, P (- naturals_to_semiring nat Z n0) -> P (- naturals_to_semiring nat Z (1 + n0))
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
m: nat
E: P (- naturals_to_semiring nat Z m)

P (- naturals_to_semiring nat Z (1 + m))
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
m: nat
E: P (- naturals_to_semiring nat Z m)

P (- (1 + naturals_to_semiring nat Z m))
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
m: nat
E: P (- naturals_to_semiring nat Z m)

P (- naturals_to_semiring nat Z m - 1)
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
m: nat
E: P (- naturals_to_semiring nat Z m)

- naturals_to_semiring nat Z m ≤ 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
m: nat
E: P (- naturals_to_semiring nat Z m)
P (- naturals_to_semiring nat Z m)
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
m: nat
E: P (- naturals_to_semiring nat Z m)

- naturals_to_semiring nat Z m ≤ 0
apply naturals.negate_to_ring_nonpos.
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc1: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
Psuc2: forall n0 : Z, n0 ≤ 0 -> P n0 -> P (n0 - 1)
n: Z
m: nat
E: P (- naturals_to_semiring nat Z m)

P (- naturals_to_semiring nat Z m)
trivial. 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
TrivialApart0: TrivialApart Z
P: Z -> Type

P 0 -> (forall n : Z, 0 ≤ n -> P n -> P (1 + n)) -> forall n : Z, 0 ≤ n -> P 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
TrivialApart0: TrivialApart Z
P: Z -> Type

P 0 -> (forall n : Z, 0 ≤ n -> P n -> P (1 + n)) -> forall n : Z, 0 ≤ n -> P 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n : Z, 0 ≤ n -> P n -> P (1 + n)

forall n : Z, 0 ≤ n -> P 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n : Z, 0 ≤ n -> P n -> P (1 + n)

forall n : Z, n ≤ 0 -> (0 ≤ n -> P n) -> 0 ≤ n - 1 -> P (n - 1)
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
n: Z
E1: n ≤ 0
X: 0 ≤ n -> P n
E2: 0 ≤ n - 1

P (n - 1)
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
n: Z
E1: n ≤ 0
X: 0 ≤ n -> P n
E2: 0 ≤ n - 1

1 = 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
n: Z
E1: n ≤ 0
X: 0 ≤ n -> P n
E2: 0 ≤ n - 1

10
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
n: Z
E1: n ≤ 0
X: 0 ≤ n -> P n
E2: 0 ≤ n - 1
01
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
n: Z
E1: n ≤ 0
X: 0 ≤ n -> P n
E2: 0 ≤ n - 1

10
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
n: Z
E1: n ≤ 0
X: 0 ≤ n -> P n
E2: 0 ≤ n - 1

n - 1 + 1 ≤ n - 1 + 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
n: Z
E1: n ≤ 0
X: 0 ≤ n -> P n
E2: 0 ≤ n - 1

n ≤ n - 1
transitivity 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
n: Z
E1: n ≤ 0
X: 0 ≤ n -> P n
E2: 0 ≤ n - 1

01
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
n: Z
E1: n ≤ 0
X: 0 ≤ n -> P n
E2: 0 ≤ n - 1

n - 11
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
n: Z
E1: n ≤ 0
X: 0 ≤ n -> P n
E2: 0 ≤ n - 1

1 + (n - 1) ≤ 2
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
n: Z
E1: n ≤ 0
X: 0 ≤ n -> P n
E2: 0 ≤ n - 1

n ≤ 2
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
n: Z
E1: n ≤ 0
X: 0 ≤ n -> P n
E2: 0 ≤ n - 1

n ≤ 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
n: Z
E1: n ≤ 0
X: 0 ≤ n -> P n
E2: 0 ≤ n - 1
02
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
n: Z
E1: n ≤ 0
X: 0 ≤ n -> P n
E2: 0 ≤ n - 1

n ≤ 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
PS: forall n0 : Z, 0 ≤ n0 -> P n0 -> P (1 + n0)
n: Z
E1: n ≤ 0
X: 0 ≤ n -> P n
E2: 0 ≤ n - 1

02
apply le_0_2. 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
TrivialApart0: TrivialApart Z

Biinduction 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
TrivialApart0: TrivialApart Z

Biinduction 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc: forall n : Z, P n <-> P (1 + n)

forall n : Z, P 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc: forall n : Z, P n <-> P (1 + n)

forall n : Z, 0 ≤ n -> P n -> P (1 + 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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc: forall n : Z, P n <-> P (1 + n)
forall n : Z, n ≤ 0 -> P n -> P (n - 1)
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc: forall n : Z, P n <-> P (1 + n)

forall n : Z, 0 ≤ n -> P n -> P (1 + n)
intros ??;apply Psuc.
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc: forall n : Z, P n <-> P (1 + n)

forall n : Z, n ≤ 0 -> P n -> P (n - 1)
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc: forall n0 : Z, P n0 <-> P (1 + n0)
n: Z
X: n ≤ 0
X0: P n

P (1 + (n - 1))
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
TrivialApart0: TrivialApart Z
P: Z -> Type
P0: P 0
Psuc: forall n0 : Z, P n0 <-> P (1 + n0)
n: Z
X: n ≤ 0
X0: P n

P n
trivial. 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
TrivialApart0: TrivialApart Z

forall x y : Z, Decidable (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
TrivialApart0: TrivialApart Z

forall x y : Z, Decidable (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
TrivialApart0: TrivialApart Z
x, y: Z

Decidable (x ≤ y)
(* otherwise Z_le gets defined using peano.nat_ring but we only know order_reflecting when using naturals.nat_ring *)
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
TrivialApart0: TrivialApart Z
x, y: Z
E0:= naturals_ring: IsSemiCRing nat

Decidable (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
TrivialApart0: TrivialApart Z
x, y: Z
E0:= naturals_ring: IsSemiCRing nat
E: integers_to_ring Z (NatPair.Z nat) x ≤ integers_to_ring Z (NatPair.Z nat) y

Decidable (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
TrivialApart0: TrivialApart Z
x, y: Z
E0:= naturals_ring: IsSemiCRing nat
E: ~ (integers_to_ring Z (NatPair.Z nat) x ≤ integers_to_ring Z (NatPair.Z nat) y)
Decidable (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
TrivialApart0: TrivialApart Z
x, y: Z
E0:= naturals_ring: IsSemiCRing nat
E: integers_to_ring Z (NatPair.Z nat) x ≤ integers_to_ring Z (NatPair.Z nat) y

Decidable (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
TrivialApart0: TrivialApart Z
x, y: Z
E0:= naturals_ring: IsSemiCRing nat
E: integers_to_ring Z (NatPair.Z nat) x ≤ integers_to_ring Z (NatPair.Z nat) 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
TrivialApart0: TrivialApart Z
x, y: Z
E0:= naturals_ring: IsSemiCRing nat
E: x ≤ y

x ≤ y
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
TrivialApart0: TrivialApart Z
x, y: Z
E0:= naturals_ring: IsSemiCRing nat
E: ~ (integers_to_ring Z (NatPair.Z nat) x ≤ integers_to_ring Z (NatPair.Z nat) y)

Decidable (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
TrivialApart0: TrivialApart Z
x, y: Z
E0:= naturals_ring: IsSemiCRing nat
E: ~ (integers_to_ring Z (NatPair.Z nat) x ≤ integers_to_ring Z (NatPair.Z nat) y)

~ (x ≤ y)
intro;apply E;apply (order_preserving _);trivial. Qed. End integers.