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]
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 IHn: forallu : FinNat n, P n u u: FinNat n.+1
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_zero_r 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 IHn: forallu : FinNat n, P n u u: FinNat n.+1
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: nat IHn: forallu : FinNat n, P n u x: nat h: x < n.+1
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 IHn: forallu : FinNat n, P n u h: 0 < n.+1
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: nat IHn: forallu : FinNat n, P n u x: nat h: x.+1 < n.+1
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 IHn: forallu : FinNat n, P n u h: 0 < n.+1
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: nat IHn: forallu : FinNat n, P n u h: 0 < n.+1
zero_finnat n = (0; h)
byapply path_sigma_hprop.
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 IHn: forallu : FinNat n, P n u x: nat h: x.+1 < n.+1
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 IHn: forallu : FinNat n, P n u x: nat h: x.+1 < n.+1
P n.+1 (succ_finnat (x; leq_pred' 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 IHn: forallu : FinNat n, P n u x: nat h: x.+1 < n.+1
P n (x; leq_pred' 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
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, u1: nat u2: u1 < n
transport (P n.+1)
(path_sigma_hprop
(succ_finnat (u1; leq_pred' (leq_succ u2)))
(u1.+1; leq_succ u2) 1)
(s n (u1; leq_pred' (leq_succ u2))
(finnat_ind P z s (u1; leq_pred' (leq_succ u2)))) =
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
transport (P n.+1)
(path_sigma_hprop (succ_finnat (u1; u2))
(u1.+1; leq_succ u2) 1)
(s n (u1; u2) (finnat_ind P z s (u1; u2))) =
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
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
rapply lt_succ_r. (* Typeclass search finds a different solution, but we want this one. *)
n: nat IHn: forallk : Fin n, fin_to_nat k < n
fin_to_nat (inr tt) < n.+1
exact _.Defined.Definitionfin_to_finnat {n} (k : Fin n) : FinNat n
:= (fin_to_nat k; is_bounded_fin_to_nat k).(** Because the proof of [is_bounded_fin_to_nat] was chosen carefully, we have the following definitional equality. *)Definitionpath_fin_to_finnat_fin_incl_incl_finnat_fin_to_finnat {n} (k : Fin n)
: fin_to_finnat (fin_incl k) = incl_finnat (fin_to_finnat k)
:= idpath.Fixpointfinnat_to_fin@{} {n : nat} : FinNat n -> Fin n
:= match n with
| 0 => funu => Empty_rec (not_lt_zero_r _ u.2)
| n.+1 => funu =>
match u with
| (0; _) => fin_zero
| (x.+1; h) => fsucc (finnat_to_fin (x; leq_pred' h))
endend.