Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import
HoTT.Classes.implementations.peano_naturals
HoTT.Classes.interfaces.abstract_algebra
HoTT.Classes.interfaces.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 VariablesN Z R f.Sectionintegers.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 ->
(foralln : Z, 0 ≤ n -> P n -> P (1 + n)) ->
(foralln : Z, n ≤ 0 -> P n -> P (n - 1)) ->
foralln : 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 ->
(foralln : Z, 0 ≤ n -> P n -> P (1 + n)) ->
(foralln : Z, n ≤ 0 -> P n -> P (n - 1)) ->
foralln : 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 1) n: Z
foralla : 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 1) n: Z
foralln : nat,
P (naturals_to_semiring nat Z n) ->
P (naturals_to_semiring nat Z (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 Psuc1: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 1) n: Z
foralln : nat,
P (naturals_to_semiring nat Z n) ->
P (naturals_to_semiring nat Z (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 Psuc1: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 1) n: Z
foralla : 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 1) n: Z
foralln : nat,
P (- naturals_to_semiring nat Z n) ->
P (- naturals_to_semiring nat Z (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 Psuc1: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 1) n: Z
foralln : nat,
P (- naturals_to_semiring nat Z n) ->
P (- naturals_to_semiring nat Z (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 Psuc1: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) Psuc2: foralln : Z, n ≤ 0 -> P n -> P (n - 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 ->
(foralln : Z, 0 ≤ n -> P n -> P (1 + n)) ->
foralln : 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 ->
(foralln : Z, 0 ≤ n -> P n -> P (1 + n)) ->
foralln : 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n)
foralln : 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n)
foralln : 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) n: Z E1: n ≤ 0 X: 0 ≤ n -> P n E2: 0 ≤ n - 1
0 ≤ 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) n: Z E1: n ≤ 0 X: 0 ≤ n -> P n E2: 0 ≤ n - 1
n ≤ n - 1
transitivity0;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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) n: Z E1: n ≤ 0 X: 0 ≤ n -> P n E2: 0 ≤ n - 1
0 ≤ 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) n: Z E1: n ≤ 0 X: 0 ≤ n -> P n E2: 0 ≤ n - 1
n - 1 ≤ 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) n: Z E1: n ≤ 0 X: 0 ≤ n -> P n E2: 0 ≤ n - 1
0 ≤ 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) 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: foralln : Z, 0 ≤ n -> P n -> P (1 + n) n: Z E1: n ≤ 0 X: 0 ≤ n -> P n E2: 0 ≤ n - 1
0 ≤ 2
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: foralln : Z, P n <-> P (1 + n)
foralln : 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: foralln : Z, P n <-> P (1 + n)
foralln : 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: foralln : Z, P n <-> P (1 + n)
foralln : 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: foralln : Z, P n <-> P (1 + n)
foralln : 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: foralln : Z, P n <-> P (1 + n)
foralln : 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: foralln : Z, P n <-> P (1 + n) 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: foralln : Z, P n <-> P (1 + n) 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
forallxy : 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
forallxy : 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)