(* Contribution to the Coq Library   V6.3 (July 1999)                    *)
(****************************************************************************)
(* This contribution was updated for Coq V5.10 by the COQ workgroup.        *)
(* January 1995                                                             *)
(****************************************************************************)
(*                                                                          *)
(*      Coq V5.8                                                            *)
(*                                                                          *)
(*                                                                          *)
(*      Alternating Bit Protocol                                            *)
(*                                                                          *)
(*      Jan Friso Groote                                                    *)
(*      Utrecht University                                                  *)
(*                                                                          *)
(*      November 1992                                                       *)
(*                                                                          *)
(* From bezem@phil.ruu.nl Fri Apr  2 13:14:31 1993                          *)
(*                                                                          *)
(****************************************************************************)
(*                               abp_lem25.v                                *)
(****************************************************************************)
intros.
elim EXPH4.
elim Lmers6.
elim LmerK.
elim LmerTnd.
pattern (R i) at 1 3 4 5 in |- *.
elim ProcR.
elim LmerRn.
elim CommTn_dK.
elim (SC3 (seq (Rn e1) (seq (Rn e0) (R i))) (K i)).
elim CommKRn.
elim
(SC3 (seq (Rn e1) (seq (Rn e0) (R i))) (seq (Tn_d d e0) (seq (Sn e1) (S i)))).
elim CommTn_dRn.
elim CommKs6.
elim CommRns6.
pattern e1 at 1 2 in |- *.
elimtype (toggle e0 = e1).
elim CommTn_ds6_b.
repeat elim A6.
repeat elim A6'.
unfold X1 in |- *.
elim
(SC6 (mer (seq (Sn_d d e0) (seq (Sn e1) (S i))) (mer (R i) (K i))) (L i)).
elim SC7.
elim SC7.
elim (SC6 (mer (K i) (L i)) (R i)).
elim SC7.
apply refl_equal.
elim Toggle1.
apply refl_equal.
Qed.
intros.
elim EXPH4.
elim Lmers6.
elim LmerK.
elim LmerTnd.
pattern (R i) at 1 3 4 5 in |- *.
elim ProcR.
elim LmerRn.
elim CommTn_dK.
elim (SC3 (seq (Rn e1) (seq (Rn e0) (R i))) (K i)).
elim CommKRn.
elim
(SC3 (seq (Rn e1) (seq (Rn e0) (R i))) (seq (Tn_d d e0) (seq (Sn e1) (S i)))).
elim CommTn_dRn.
elim CommKs6.
elim CommRns6.
elim CommTn_ds6_sce.
repeat elim A6.
repeat elim A6'.
unfold X1 in |- *.
elim
(SC6 (mer (seq (Sn_d d e0) (seq (Sn e1) (S i))) (mer (R i) (K i))) (L i)).
elim SC7.
elim SC7.
elimtype (mer (K i) (mer (L i) (R i)) = mer (R i) (mer (K i) (L i))).
apply refl_equal.
elim (SC6 (mer (K i) (L i)) (R i)).
elim SC7.
apply refl_equal.
Qed.
intros.
pattern (X1 d) at 2 in |- *.
elim Lem3.
elim Lem4.
elim Lem5.
elim Lem6.
elim Lem7.
elim Lem8.
elim Lem9.
elim Lem10.
elim Lem11.
elim A4.
elim A5.
elim A5.
apply refl_equal.
Qed.
intro.
unfold Y1 at 1 in |- *.
elim (EXPH4 (seq (Sn_d d e1) (S i))).
elim LmerSnd.
elim LmerK.
elim LmerL.
pattern (R i) at 2 3 5 8 in |- *.
elim ProcR.
elim LmerRn.
elim CommLRn.
elim CommKL.
elim CommKRn.
elim ProcSn_d.
elim A5.
elim Comms2K.
elim Comms2Rn.
elim Comms2L.
repeat elim A6.
repeat elim A6'.
elim SC7.
apply refl_equal.
Qed.
intros.
elim (EXPH4 (seq (Tn_d d e1) (S i))).
elim LmerTnd.
elim LmerL.
elim A4.
elim A5.
elim A5.
elim Lmeri.
elim LmerRn.
elim CommLRn.
elim CommiL.
elim CommiRn.
elim CommTn_dL.
elim CommTn_di.
elim CommTn_dRn.
repeat elim A6.
repeat elim A6'.
apply refl_equal.
Qed.
intros.
elim (EXPH4 (seq (ia Frame s3 lce) (K i))).
elim Lmers3.
elim LmerTnd.
elim LmerL.
elim LmerRn.
elim CommLRn.
elim CommTn_dL.
elim CommTn_dRn.
elim Comms3Tn_d.
elim Comms3L.
elim Comms3Rn_lce.
repeat elim A6'.
repeat elim A6.
elim SC7.
elim A5.
apply refl_equal.
Qed.

Theorem Lem16 :
forall d : D,
seq (ia Frame c3 (Tuple e1 d))
(enc H
(mer (K i)
(mer (seq (ia D s4 d) (seq (ia frame s5 (tuple e1)) (R i)))
(mer (seq (Tn_d d e1) (S i)) (L i))))) =
enc H
(mer (seq (ia Frame s3 (Tuple e1 d)) (K i))
(mer (seq (Tn_d d e1) (S i)) (mer (L i) (seq (Rn e0) (R i))))).