Proof using.
intros a l H; red in |- *.
intros a0; red in |- *; intros H0; case (H a0); simpl in |- *; auto.
Qed.

(* Specifications: *)
(* Adding a non-empty element preserves the property of non-emptyness *)
Theorem not_null_cons :
forall a b (l : list (A * list bool)),
b <> nil -> not_null l -> not_null ((a, b) :: l).