Fixpoint add_list l:=
  match l with
    | nil => 0
    | h::tl => h + (add_list tl)
  end.Inductive subseq {A: Type}: list A -> list A -> Prop :=
  | nil_subseq : subseq nil nil
  | hd_subseq: forall a l1 l2, subseq l1 l2 -> subseq (a :: l1) (a :: l2)
  | tl_subseq: forall a l1 l2, subseq l1 l2 -> subseq l1 (a :: l2)
  .Inductive subseq {A: Type}: list A -> list A -> Prop :=
  | nil_subseq : subseq nil nil
  | hd_subseq: forall a l1 l2, subseq l1 l2 -> subseq (a :: l1) (a :: l2)
  | tl_subseq: forall a l1 l2, subseq l1 l2 -> subseq l1 (a :: l2)
  .Inductive subseq {A: Type}: list A -> list A -> Prop :=
  | nil_subseq : subseq nil nil
  | hd_subseq: forall a l1 l2, subseq l1 l2 -> subseq (a :: l1) (a :: l2)
  | tl_subseq: forall a l1 l2, subseq l1 l2 -> subseq l1 (a :: l2)
  .Inductive subseq {A: Type}: list A -> list A -> Prop :=
  | nil_subseq : subseq nil nil
  | hd_subseq: forall a l1 l2, subseq l1 l2 -> subseq (a :: l1) (a :: l2)
  | tl_subseq: forall a l1 l2, subseq l1 l2 -> subseq l1 (a :: l2)
  .Inductive subseq' {A: Type}: list A -> list A -> Prop :=
  | nilss : forall l, subseq' nil l
  | hdss: forall a l l1 l2, subseq' l l2 -> subseq' (a :: l) (l1 ++ a :: l2)
  .Inductive subseq' {A: Type}: list A -> list A -> Prop :=
  | nilss : forall l, subseq' nil l
  | hdss: forall a l l1 l2, subseq' l l2 -> subseq' (a :: l) (l1 ++ a :: l2)
  .Inductive subseq' {A: Type}: list A -> list A -> Prop :=
  | nilss : forall l, subseq' nil l
  | hdss: forall a l l1 l2, subseq' l l2 -> subseq' (a :: l) (l1 ++ a :: l2)
  .

(* Specifications: *)
Theorem ssss: forall A (l1 l2: list A), subseq l1 l2 <-> subseq' l1 l2.
Lemma subseq_trans: forall {A} (l1 l2 l3: list A), subseq l1 l2 -> subseq l2 l3 -> subseq l1 l3.
Lemma blah: forall x, x=O -> ~ exists y, x = S y .
Lemma and_or: forall (a b: bool), a = b -> andb a b = orb a b.
Lemma zero_no_succ: forall n, O<>S n.