Require Import function.Inductivefin : nat -> Type :=
| zero {n} : fin (S n)
| suc {n} : fin n -> fin (S n).
fin 0 -> False
fin 0 -> False
p: fin 0
False
inversion p.Qed.Definitionfin_S_case {n}
(p : fin (S n)) :
forallP : fin (S n) -> Type,
P zero ->
(forallq, P (suc q)) ->
P p
:=
match p with
| zero => funPPz_ => Pz
| suc q => funP_Ps => Ps q
end.
n: nat p: fin (S n)
p = zero \/ existsq : fin n, p = suc q
n: nat p: fin (S n)
p = zero \/ existsq : fin n, p = suc q
n: nat
zero = zero \/ existsq : fin n, zero = suc q
n: nat p: fin n
suc p = zero \/ existsq : fin n, suc p = suc q
n: nat
zero = zero \/ existsq : fin n, zero = suc q
n: nat
zero = zero
reflexivity.
n: nat p: fin n
suc p = zero \/ existsq : fin n, suc p = suc q
n: nat p: fin n
existsq : fin n, suc p = suc q
n: nat p: fin n
suc p = suc p
reflexivity.Qed.Definitionbishop_finite (A : Type) : Prop :=
existsn, inhabited (A ≅ fin n).Definitionsubfinite (A : Type) : Prop :=
existsn (f : A -> fin n), injective f.Definitionfinitely_indexed (A : Type) : Prop :=
existsn (f : fin n -> A), surjective f.