Fixpoint andl (l : list Prop) : Prop :=
  match l with
  | nil => True
  | P :: l' => P /\ andl l'
  end.

(* Specifications: *)
Lemma andl_cons: forall a l, andl (a::l) <-> a /\ (andl l).
Lemma andl_in : forall l P, andl l -> In P l -> P.
Lemma andl_in_map (A:Type): forall l (a:A) P, andl (map P l) -> In a l -> P a.
Lemma andl_map (A : Type) (f g : A -> Prop) l : andl (map f l) -> (forall a, In a l -> f a -> g a) -> andl (map g l).
Lemma andl_app l1 l2 : andl (l1 ++ l2) <-> andl l1 /\ andl l2.