(∀tl1,tl2,hd1,hd2. P tl1 tl2 → P (hd1::tl1) (hd2::tl2)) →
P l1 l2.
intros (T1 T2 l1 l2 P Hl Pnil Pcons);
-generalize in match Hl; clear Hl; generalize in match l2; clear l2;
-elim l1 1 (l2 x1); [ cases l2; intros (Hl); [assumption| simplify in Hl; destruct Hl]]
+elim l1 in Hl l2 ⊢ % 1 (l2 x1); [ cases l2; intros (Hl); [assumption| simplify in Hl; destruct Hl]]
intros 3 (tl1 IH l2); cases l2; [1: simplify; intros 1 (Hl); destruct Hl]
intros 1 (Hl); apply Pcons; apply IH; simplify in Hl; destruct Hl; assumption;
qed.
elim l
[ simplify; reflexivity;
| simplify;
- generalize in match H1;
- clear H1;
- elim l1;
+ elim l1 in H1 ⊢ %;
[ simplify; reflexivity;
| cut ((le a a1 \land ordered A le (a1::l2)) = true);
[ generalize in match Hcut;
clear l; intros; simplify; intros;
[2: rewrite > H1;
[ generalize in match (H ? ? H2); clear H2; intro;
- generalize in match H4; clear H4;
- elim l'; simplify;
+ elim l' in H4 ⊢ %; simplify;
[ rewrite > H5;
reflexivity
| elim (le x a); simplify;