I know of two ways to define the finite number type:
(* The conditions are described in the type definition. *)
Inductive fin (n : nat) :=
| O_fin : fin (S O)
| S_fin : forall n : nat, fin n -> fin (S n).
(* The conditions are defined by an outer predicate. *)
Definition fin (n : nat) := { x : nat | x < n }.
Are there two words to distinguish between the two? For example, the first method is called A and the second method is called B. I thought I had it memorized, but I forgot and it's hard to search.