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.
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n
P n k
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n
P n k
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n
P n (finnat_to_fin (fin_to_finnat k))
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n
foralln0 : nat, P n0.+1 (finnat_to_fin (zero_finnat n0))
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n
forall (n0 : nat) (u : FinNat n0),
P n0 (finnat_to_fin u) -> P n0.+1 (finnat_to_fin (succ_finnat u))
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n
foralln0 : nat, P n0.+1 (finnat_to_fin (zero_finnat n0))
P: foralln1 : nat, Fin n1 -> Type z: foralln1 : nat, P n1.+1 fin_zero s: forall (n1 : nat) (k0 : Fin n1), P n1 k0 -> P n1.+1 (fsucc k0) n: nat k: Fin n n0: nat
P n0.+1 (finnat_to_fin (zero_finnat n0))
apply z.
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n
forall (n0 : nat) (u : FinNat n0),
P n0 (finnat_to_fin u) -> P n0.+1 (finnat_to_fin (succ_finnat u))
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n n': nat u: FinNat n' c: P n' (finnat_to_fin u)
P n'.+1 (finnat_to_fin (succ_finnat u))
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n n': nat u: FinNat n' c: P n' (finnat_to_fin u)
P n'.+1 (fsucc (finnat_to_fin u))
byapply s.Defined.
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k : Fin n0), P n0 k -> P n0.+1 (fsucc k) n: nat
fin_ind P z s fin_zero = z n
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k : Fin n0), P n0 k -> P n0.+1 (fsucc k) n: nat
fin_ind P z s fin_zero = z n
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k : Fin n0), P n0 k -> P n0.+1 (fsucc k) n: nat
transport (P n.+1) (path_fin_to_finnat_to_fin fin_zero)
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat fin_zero)) =
z n
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k : Fin n0), P n0 k -> P n0.+1 (fsucc k) n: nat
forallp : finnat_to_fin (fin_to_finnat fin_zero) = fin_zero,
transport (P n.+1) p
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat fin_zero)) =
z n
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k : Fin n0), P n0 k -> P n0.+1 (fsucc k) n: nat
forallp : finnat_to_fin (zero_finnat n) = fin_zero,
transport (P n.+1) p
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(zero_finnat n)) =
z n
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k : Fin n0), P n0 k -> P n0.+1 (fsucc k) n: nat p: finnat_to_fin (zero_finnat n) = fin_zero
transport (P n.+1) p
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(zero_finnat n)) =
z n
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k : Fin n0), P n0 k -> P n0.+1 (fsucc k) n: nat
transport (P n.+1) 1
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(zero_finnat n)) =
z n
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k : Fin n0), P n0 k -> P n0.+1 (fsucc k) n: nat
finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(zero_finnat n) =
z n
napply finnat_ind_beta_zero.Defined.
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n
fin_ind P z s (fsucc k) = s n k (fin_ind P z s k)
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n
fin_ind P z s (fsucc k) = s n k (fin_ind P z s k)
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n
transport (P n.+1) (path_fin_to_finnat_to_fin (fsucc k))
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat (fsucc k))) =
s n k
(transport (P n) (path_fin_to_finnat_to_fin k)
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat k)))
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n
forallp : finnat_to_fin (fin_to_finnat (fsucc k)) = fsucc k,
transport (P n.+1) p
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat (fsucc k))) =
s n k
(transport (P n) (path_fin_to_finnat_to_fin k)
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat k)))
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n
forallp : finnat_to_fin (succ_finnat (fin_to_finnat k)) = fsucc k,
transport (P n.+1) p
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(succ_finnat (fin_to_finnat k))) =
s n k
(transport (P n) (path_fin_to_finnat_to_fin k)
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat k)))
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n p: finnat_to_fin (succ_finnat (fin_to_finnat k)) = fsucc k
transport (P n.+1) p
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(succ_finnat (fin_to_finnat k))) =
s n k
(transport (P n) (path_fin_to_finnat_to_fin k)
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat k)))
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n p: finnat_to_fin (succ_finnat (fin_to_finnat k)) = fsucc k
transport (P n.+1) p
(transport (P n.+1) (path_finnat_to_fin_succ (fin_to_finnat k))^
(s n (finnat_to_fin (fin_to_finnat k))
(finnat_ind
(fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat k)))) =
s n k
(transport (P n) (path_fin_to_finnat_to_fin k)
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat k)))
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n
forallp : finnat_to_fin (succ_finnat (fin_to_finnat k)) = fsucc k,
transport (P n.+1) p
(transport (P n.+1) (path_finnat_to_fin_succ (fin_to_finnat k))^
(s n (finnat_to_fin (fin_to_finnat k))
(finnat_ind
(fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat k)))) =
s n k
(transport (P n) (path_fin_to_finnat_to_fin k)
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat k)))
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n
forallp : finnat_to_fin
(succ_finnat (fin_to_finnat (finnat_to_fin (fin_to_finnat k)))) =
fsucc (finnat_to_fin (fin_to_finnat k)),
transport (P n.+1) p
(transport (P n.+1)
(path_finnat_to_fin_succ
(fin_to_finnat (finnat_to_fin (fin_to_finnat k))))^
(s n (finnat_to_fin (fin_to_finnat (finnat_to_fin (fin_to_finnat k))))
(finnat_ind
(fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat (finnat_to_fin (fin_to_finnat k)))))) =
s n (finnat_to_fin (fin_to_finnat k))
(transport (P n) 1
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat k)))
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n
forallp : finnat_to_fin (succ_finnat (fin_to_finnat k)) =
fsucc (finnat_to_fin (fin_to_finnat k)),
transport (P n.+1) p
(transport (P n.+1) (path_finnat_to_fin_succ (fin_to_finnat k))^
(s n (finnat_to_fin (fin_to_finnat k))
(finnat_ind
(fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat k)))) =
s n (finnat_to_fin (fin_to_finnat k))
(transport (P n) 1
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat k)))
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n p: finnat_to_fin (succ_finnat (fin_to_finnat k)) =
fsucc (finnat_to_fin (fin_to_finnat k))
transport (P n.+1) p
(transport (P n.+1) (path_finnat_to_fin_succ (fin_to_finnat k))^
(s n (finnat_to_fin (fin_to_finnat k))
(finnat_ind
(fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat k)))) =
s n (finnat_to_fin (fin_to_finnat k))
(transport (P n) 1
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat k)))
P: foralln0 : nat, Fin n0 -> Type z: foralln0 : nat, P n0.+1 fin_zero s: forall (n0 : nat) (k0 : Fin n0), P n0 k0 -> P n0.+1 (fsucc k0) n: nat k: Fin n p: finnat_to_fin (succ_finnat (fin_to_finnat k)) =
fsucc (finnat_to_fin (fin_to_finnat k))
transport (P n.+1) p
(transport (P n.+1) p^
(s n (finnat_to_fin (fin_to_finnat k))
(finnat_ind
(fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat k)))) =
s n (finnat_to_fin (fin_to_finnat k))
(transport (P n) 1
(finnat_ind (fun (n0 : nat) (u : FinNat n0) => P n0 (finnat_to_fin u))
(funn0 : nat => z n0)
(fun (n' : nat) (u : FinNat n') (c : P n' (finnat_to_fin u)) =>
transport (P n'.+1) (path_finnat_to_fin_succ u)^
(s n' (finnat_to_fin u) c))
(fin_to_finnat k)))
apply transport_pV.Defined.Definitionfin_rec (B : nat -> Type)
: (foralln : nat, B n.+1) -> (forall (n : nat), Fin n -> B n -> B n.+1) ->
forall {n : nat}, Fin n -> B n
:= fin_ind (funn_ => B n).
B: nat -> Type z: foralln0 : nat, B n0.+1 s: foralln0 : nat, Fin n0 -> B n0 -> B n0.+1 n: nat
fin_rec B z s fin_zero = z n
B: nat -> Type z: foralln0 : nat, B n0.+1 s: foralln0 : nat, Fin n0 -> B n0 -> B n0.+1 n: nat
fin_rec B z s fin_zero = z n
apply (fin_ind_beta_zero (funn_ => B n)).Defined.
B: nat -> Type z: foralln0 : nat, B n0.+1 s: foralln0 : nat, Fin n0 -> B n0 -> B n0.+1 n: nat k: Fin n
fin_rec B z s (fsucc k) = s n k (fin_rec B z s k)
B: nat -> Type z: foralln0 : nat, B n0.+1 s: foralln0 : nat, Fin n0 -> B n0 -> B n0.+1 n: nat k: Fin n
fin_rec B z s (fsucc k) = s n k (fin_rec B z s k)
apply (fin_ind_beta_fsucc (funn_ => B n)).Defined.