Section Lists_compl.
Variable A B : Set.
auto with arith. Qed.
auto with arith. Qed.
auto with arith. Qed.
auto with arith. Qed.
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).
Hint Resolve len_nil len_cons.
(*************)
intros. discriminate.
Qed.
(****************)
simple induction v. intro. discriminate.
intros. injection. intros. absurd (l = a :: l). apply H.
exact H1.
Qed.
(**************)
intro.
rewrite <- app_nil_end; trivial with arith.
Qed. Hint Resolve app_v_nil.
(********************)
intros. inversion H. apply app_v_nil.
Qed.
(******************)
simple induction v1. simpl in |- *. trivial with arith.
intros. generalize H0. rewrite app_eq2. intros. injection H1. intro. apply H. exact H2.
Qed.

Lemma app_v_nil_sym : forall v1 v2 : list A, v1 = nil -> v1 ++ v2 = v2 ++ v1.