Inductive len : list A -> nat -> Prop :=
 (************)
  | len_nil : len nil 0
  | len_cons :
      forall (b : A) (v : list A) (l : nat), len v l -> len (b :: v) (S l).Inductive len : list A -> nat -> Prop :=
 (************)
  | len_nil : len nil 0
  | len_cons :
      forall (b : A) (v : list A) (l : nat), len v l -> len (b :: v) (S l).Inductive len : list A -> nat -> Prop :=
 (************)
  | len_nil : len nil 0
  | len_cons :
      forall (b : A) (v : list A) (l : nat), len v l -> len (b :: v) (S l).

(* Specifications: *)
Lemma nil_cons : forall (b : A) (v : list A), nil <> b :: v.
Lemma not_cons_eq : forall (v : list A) (b : A), v <> b :: v.
Lemma app_v_nil : forall v : list A, v ++ nil = v.
Lemma app_v_nil_idem : forall v v' : list A, v = v' -> v ++ nil = v'.
Lemma app_v_nil_inv : forall v1 v2 : list A, v1 ++ v2 = v1 -> v2 = nil.
Lemma app_v_nil_sym : forall v1 v2 : list A, v1 = nil -> v1 ++ v2 = v2 ++ v1.