Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
byapply path_sigma_hprop.Defined.Definitionsucc_finnat {n : nat} (u : FinNat n) : FinNat n.+1
:= (u.1.+1; leq_S_n' u.1.+1 n u.2).
n: nat u: FinNat n h: (u.1).+1 < n.+1
succ_finnat u = ((u.1).+1; h)
n: nat u: FinNat n h: (u.1).+1 < n.+1
succ_finnat u = ((u.1).+1; h)
byapply path_sigma_hprop.Defined.Definitionlast_finnat (n : nat) : FinNat n.+1
:= exist (funx => x < n.+1) n (leq_refl n.+1).
n: nat h: n < n.+1
last_finnat n = (n; h)
n: nat h: n < n.+1
last_finnat n = (n; h)
byapply path_sigma_hprop.Defined.Definitionincl_finnat {n : nat} (u : FinNat n) : FinNat n.+1
:= (u.1; leq_trans u.2 (leq_S n n (leq_n n))).
n: nat u: FinNat n h: u.1 < n.+1
incl_finnat u = (u.1; h)
n: nat u: FinNat n h: u.1 < n.+1
incl_finnat u = (u.1; h)
byapply path_sigma_hprop.Defined.
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n: nat u: FinNat n
P n u
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n: nat u: FinNat n
P n u
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) u: FinNat 0
P 0 u
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n: nat u: FinNat n.+1 IHn: forallu : FinNat n, P n u
P n.+1 u
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) u: FinNat 0
P 0 u
elim (not_lt_n_0 u.1 u.2).
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n: nat u: FinNat n.+1 IHn: forallu : FinNat n, P n u
P n.+1 u
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n, x: nat h: x < n.+1 IHn: forallu : FinNat n, P n u
P n.+1 (x; h)
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n: nat h: 0 < n.+1 IHn: forallu : FinNat n, P n u
P n.+1 (0; h)
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n, x: nat h: x.+1 < n.+1 IHn: forallu : FinNat n, P n u
P n.+1 (x.+1; h)
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n: nat h: 0 < n.+1 IHn: forallu : FinNat n, P n u
P n.+1 (0; h)
exact (transport (P n.+1) (path_zero_finnat _ h) (z _)).
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n, x: nat h: x.+1 < n.+1 IHn: forallu : FinNat n, P n u
P n.+1 (x.+1; h)
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n, x: nat h: x.+1 < n.+1 IHn: forallu : FinNat n, P n u
P n.+1 (succ_finnat (x; leq_S_n x.+1 n h))
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n, x: nat h: x.+1 < n.+1 IHn: forallu : FinNat n, P n u
P n (x; leq_S_n x.+1 n h)
apply IHn.Defined.
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n: nat
finnat_ind P z s (zero_finnat n) = z n
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n: nat
finnat_ind P z s (zero_finnat n) = z n
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n: nat
transport (P n.+1) (path_zero_finnat n leq_1_Sn) (z n) =
z n
byinduction (hset_path2 1 (path_zero_finnat n leq_1_Sn)).Defined.
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n: nat u: FinNat n
finnat_ind P z s (succ_finnat u) =
s n u (finnat_ind P z s u)
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n: nat u: FinNat n
finnat_ind P z s (succ_finnat u) =
s n u (finnat_ind P z s u)
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n: nat u: FinNat n
finnat_ind P z s (succ_finnat u) =
transport (P n.+1)
(path_succ_finnat u (leq_S_n' (u.1).+1 n u.2))
(s n u (finnat_ind P z s u))
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n, u1: nat u2: u1 < n
finnat_ind P z s (succ_finnat (u1; u2)) =
transport (P n.+1)
(path_succ_finnat (u1; u2)
(leq_S_n' ((u1; u2).1).+1 n (u1; u2).2))
(s n (u1; u2) (finnat_ind P z s (u1; u2)))
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n, u1: nat u2: u1 < n
u2 = leq_S_n u1.+1 n (leq_S_n' u1.+1 n u2)
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n, u1: nat u2: u1 < n p: u2 = leq_S_n u1.+1 n (leq_S_n' u1.+1 n u2)
finnat_ind P z s (succ_finnat (u1; u2)) =
transport (P n.+1)
(path_succ_finnat (u1; u2)
(leq_S_n' ((u1; u2).1).+1 n (u1; u2).2))
(s n (u1; u2) (finnat_ind P z s (u1; u2)))
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n, u1: nat u2: u1 < n
u2 = leq_S_n u1.+1 n (leq_S_n' u1.+1 n u2)
apply path_ishprop.
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n, u1: nat u2: u1 < n p: u2 = leq_S_n u1.+1 n (leq_S_n' u1.+1 n u2)
finnat_ind P z s (succ_finnat (u1; u2)) =
transport (P n.+1)
(path_succ_finnat (u1; u2)
(leq_S_n' ((u1; u2).1).+1 n (u1; u2).2))
(s n (u1; u2) (finnat_ind P z s (u1; u2)))
P: foralln : nat, FinNat n -> Type z: foralln : nat, P n.+1 (zero_finnat n) s: forall (n : nat) (u : FinNat n),
P n u -> P n.+1 (succ_finnat u) n, u1: nat u2: u1 < n p: u2 = leq_S_n u1.+1 n (leq_S_n' u1.+1 n u2)
transport (P n.+1)
(path_succ_finnat
(u1; leq_S_n u1.+1 n (leq_S_n' u1.+1 n u2))
(leq_S_n' u1.+1 n u2))
(s n (u1; leq_S_n u1.+1 n (leq_S_n' u1.+1 n u2))
(finnat_ind P z s
(u1; leq_S_n u1.+1 n (leq_S_n' u1.+1 n u2)))) =
transport (P n.+1)
(path_succ_finnat (u1; u2) (leq_S_n' u1.+1 n u2))
(s n (u1; u2) (finnat_ind P z s (u1; u2)))
byinduction p.Defined.
n: nat k: Fin n
fin_to_nat k < n
n: nat k: Fin n
fin_to_nat k < n
k: Fin 0
fin_to_nat k < 0
n: nat k: Fin n.+1 IHn: forallk : Fin n, fin_to_nat k < n
fin_to_nat k < n.+1
k: Fin 0
fin_to_nat k < 0
elim k.
n: nat k: Fin n.+1 IHn: forallk : Fin n, fin_to_nat k < n
fin_to_nat k < n.+1
n: nat k: Fin n IHn: forallk : Fin n, fin_to_nat k < n
fin_to_nat (inl k) < n.+1
n: nat IHn: forallk : Fin n, fin_to_nat k < n
fin_to_nat (inr tt) < n.+1
n: nat k: Fin n IHn: forallk : Fin n, fin_to_nat k < n
fin_to_nat (inl k) < n.+1
n: nat k: Fin n IHn: forallk : Fin n, fin_to_nat k < n
(fin_to_nat (inl k)).+1 <= n
n: nat k: Fin n IHn: forallk : Fin n, fin_to_nat k < n
n <= n.+1
n: nat k: Fin n IHn: forallk : Fin n, fin_to_nat k < n
(fin_to_nat (inl k)).+1 <= n
apply IHn.
n: nat k: Fin n IHn: forallk : Fin n, fin_to_nat k < n
n <= n.+1
byapply leq_S.
n: nat IHn: forallk : Fin n, fin_to_nat k < n
fin_to_nat (inr tt) < n.+1
apply leq_refl.Defined.MonomorphicDefinitionfin_to_finnat {n} (k : Fin n) : FinNat n
:= (fin_to_nat k; is_bounded_fin_to_nat k).MonomorphicFixpointfinnat_to_fin {n : nat} : FinNat n -> Fin n
:= match n with
| 0 => funu => Empty_rec (not_lt_n_0 _ u.2)
| n.+1 => funu =>
match u with
| (0; _) => fin_zero
| (x.+1; h) => fsucc (finnat_to_fin (x; leq_S_n _ _ h))
endend.
fsucc
(finnat_to_fin
(u.1;
leq_rec (u.1).+2
(funm : nat => (u.1).+1 <= pred m)
(leq_n (u.1).+1)
(fun (m : nat) (H : (u.1).+2 <= m)
(IHleq : (u.1).+1 <= pred m) =>
match
m as n
return
((u.1).+2 <= n ->
(u.1).+1 <= pred n -> (u.1).+1 <= n)
with
| 0 => fun_ : (u.1).+2 <= 0 => idmap
| n.+1 =>
fun (_ : (u.1).+2 <= n.+1)
(IHleq0 : (u.1).+1 <= n) =>
leq_S (u.1).+1 n IHleq0
end H IHleq) n.+1 (leq_S_n' (u.1).+1 n u.2))) =
fsucc (finnat_to_fin u)
n: nat u: FinNat n
(u.1;
leq_rec (u.1).+2 (funm : nat => (u.1).+1 <= pred m)
(leq_n (u.1).+1)
(fun (m : nat) (H : (u.1).+2 <= m)
(IHleq : (u.1).+1 <= pred m) =>
match
m as n
return
((u.1).+2 <= n ->
(u.1).+1 <= pred n -> (u.1).+1 <= n)
with
| 0 => fun_ : (u.1).+2 <= 0 => idmap
| n.+1 =>
fun (_ : (u.1).+2 <= n.+1)
(IHleq0 : (u.1).+1 <= n) =>
leq_S (u.1).+1 n IHleq0
end H IHleq) n.+1 (leq_S_n' (u.1).+1 n u.2)) = u