Proof using.
intros a b l H H0; red in |- *.
intros a1; simpl in |- *; red in |- *; intros [H1| H1]; auto.
case H; injection H1; auto.
case (H0 a1); simpl in |- *; auto.
Qed.
Hint Resolve not_null_cons : core.

(* Non emptyness is compatible with append *)
Theorem not_null_app :
forall l1 l2 : list (A * list bool),
not_null l1 -> not_null l2 -> not_null (l1 ++ l2).