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)
  .

Theorem ssss: forall A (l1 l2: list A), subseq l1 l2 <-> subseq' l1 l2.