Welcome to Abella 2.0.3-dev
Abella < Kind name, label, proc type.
Abella < Import "pic_core".
Importing from pic_core
Warning: Definition can be used to defeat stratification
(higher-order argument "Tech" occurs to the left of ->)
Abella < Define inv : proc -> proc -> prop by
inv P Q := bisim_up_to refl_t P Q;
inv (par P1 Q1) (par P2 Q2) := inv P1 P2 /\ inv Q1 Q2;
inv (nu P) (nu Q) := nabla x, inv (P x) (Q x).
Abella < Define bisim_inv : proc -> proc -> prop by
bisim_inv P Q := (forall L P1, one P L P1 -> (exists Q1, one Q L Q1 /\ inv P1 Q1)) /\
(forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\ (forall N, inv (P1 N) (Q1 N)))) /\
(forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))) /\
(forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)) /\
(forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))) /\
(forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))).
Abella < Theorem inv_bisim_inv :
forall P Q, inv P Q -> bisim_inv P Q.
============================
forall P Q, inv P Q -> bisim_inv P Q
inv_bisim_inv < induction on 1.
IH : forall P Q, inv P Q * -> bisim_inv P Q
============================
forall P Q, inv P Q @ -> bisim_inv P Q
inv_bisim_inv < intros.
Variables: P Q
IH : forall P Q, inv P Q * -> bisim_inv P Q
H1 : inv P Q @
============================
bisim_inv P Q
inv_bisim_inv < case H1.
Subgoal 1:
Variables: P Q
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : bisim_up_to refl_t P Q
============================
bisim_inv P Q
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < Bis1 : case H2.
Subgoal 1:
Variables: P Q
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
============================
bisim_inv P Q
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < unfold.
Subgoal 1.1:
Variables: P Q
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
============================
forall L P1, one P L P1 -> (exists Q1, one Q L Q1 /\ inv P1 Q1)
Subgoal 1.2 is:
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 1.1:
Variables: P Q L P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : one P L P1
============================
exists Q1, one Q L Q1 /\ inv P1 Q1
Subgoal 1.2 is:
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply Bis1 to H3.
Subgoal 1.1:
Variables: P Q L P1 Q2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : one P L P1
H4 : one Q L Q2
H5 : refl_t P1 P3 Q2 Q3
H6 : bisim_up_to refl_t P3 Q3
============================
exists Q1, one Q L Q1 /\ inv P1 Q1
Subgoal 1.2 is:
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < case H5.
Subgoal 1.1:
Variables: P Q L P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : one P L P3
H4 : one Q L Q3
H6 : bisim_up_to refl_t P3 Q3
============================
exists Q1, one Q L Q1 /\ inv P3 Q1
Subgoal 1.2 is:
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 1.2:
Variables: P Q
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
============================
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 1.2:
Variables: P Q X P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (dn X) P1
============================
exists Q1, oneb Q (dn X) Q1 /\ (forall N, inv (P1 N) (Q1 N))
Subgoal 1.3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply Bis2 to H3.
Subgoal 1.2:
Variables: P Q X P1 Q2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (dn X) P1
H4 : oneb Q (dn X) Q2
H5 : forall N, refl_t (P1 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
============================
exists Q1, oneb Q (dn X) Q1 /\ (forall N, inv (P1 N) (Q1 N))
Subgoal 1.3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness Q2.
Subgoal 1.2:
Variables: P Q X P1 Q2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (dn X) P1
H4 : oneb Q (dn X) Q2
H5 : forall N, refl_t (P1 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
============================
oneb Q (dn X) Q2 /\ (forall N, inv (P1 N) (Q2 N))
Subgoal 1.3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 1.2.1:
Variables: P Q X P1 Q2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (dn X) P1
H4 : oneb Q (dn X) Q2
H5 : forall N, refl_t (P1 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
============================
oneb Q (dn X) Q2
Subgoal 1.2.2 is:
forall N, inv (P1 N) (Q2 N)
Subgoal 1.3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 1.2.2:
Variables: P Q X P1 Q2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (dn X) P1
H4 : oneb Q (dn X) Q2
H5 : forall N, refl_t (P1 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
============================
forall N, inv (P1 N) (Q2 N)
Subgoal 1.3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 1.2.2:
Variables: P Q X P1 Q2 P3 Q3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (dn X) P1
H4 : oneb Q (dn X) Q2
H5 : forall N, refl_t (P1 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
============================
inv (P1 N) (Q2 N)
Subgoal 1.3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply H5 with N = N.
Subgoal 1.2.2:
Variables: P Q X P1 Q2 P3 Q3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (dn X) P1
H4 : oneb Q (dn X) Q2
H5 : forall N, refl_t (P1 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
H6 : refl_t (P1 N) (P3 N) (Q2 N) (Q3 N)
H7 : bisim_up_to refl_t (P3 N) (Q3 N)
============================
inv (P1 N) (Q2 N)
Subgoal 1.3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < case H6.
Subgoal 1.2.2:
Variables: P Q X P1 Q2 P3 Q3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (dn X) P1
H4 : oneb Q (dn X) Q2
H5 : forall N, refl_t (P1 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
H7 : bisim_up_to refl_t (P3 N) (Q3 N)
H8 : Q2 N = Q3 N
H9 : P1 N = P3 N
============================
inv (P1 N) (Q2 N)
Subgoal 1.3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply bisim_eq_2R to H7 H8.
Subgoal 1.2.2:
Variables: P Q X P1 Q2 P3 Q3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (dn X) P1
H4 : oneb Q (dn X) Q2
H5 : forall N, refl_t (P1 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
H7 : bisim_up_to refl_t (P3 N) (Q3 N)
H8 : Q2 N = Q3 N
H9 : P1 N = P3 N
H10 : bisim_up_to refl_t (P3 N) (Q2 N)
============================
inv (P1 N) (Q2 N)
Subgoal 1.3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply bisim_eq_1R to H10 H9.
Subgoal 1.2.2:
Variables: P Q X P1 Q2 P3 Q3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (dn X) P1
H4 : oneb Q (dn X) Q2
H5 : forall N, refl_t (P1 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
H7 : bisim_up_to refl_t (P3 N) (Q3 N)
H8 : Q2 N = Q3 N
H9 : P1 N = P3 N
H10 : bisim_up_to refl_t (P3 N) (Q2 N)
H11 : bisim_up_to refl_t (P1 N) (Q2 N)
============================
inv (P1 N) (Q2 N)
Subgoal 1.3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 1.3:
Variables: P Q
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
============================
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 1.3:
Variables: P Q X P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (up X) P1
============================
exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply Bis3 to H3.
Subgoal 1.3:
Variables: P Q X P1 Q2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (up X) P1
H4 : oneb Q (up X) Q2
H5 : refl_t (P1 n1) (P3 n1) (Q2 n1) (Q3 n1)
H6 : bisim_up_to refl_t (P3 n1) (Q3 n1)
============================
exists Q1, oneb Q (up X) Q1 /\ (nabla x, inv (P1 x) (Q1 x))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness Q2.
Subgoal 1.3:
Variables: P Q X P1 Q2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (up X) P1
H4 : oneb Q (up X) Q2
H5 : refl_t (P1 n1) (P3 n1) (Q2 n1) (Q3 n1)
H6 : bisim_up_to refl_t (P3 n1) (Q3 n1)
============================
oneb Q (up X) Q2 /\ (nabla x, inv (P1 x) (Q2 x))
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 1.3.1:
Variables: P Q X P1 Q2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (up X) P1
H4 : oneb Q (up X) Q2
H5 : refl_t (P1 n1) (P3 n1) (Q2 n1) (Q3 n1)
H6 : bisim_up_to refl_t (P3 n1) (Q3 n1)
============================
oneb Q (up X) Q2
Subgoal 1.3.2 is:
nabla x, inv (P1 x) (Q2 x)
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 1.3.2:
Variables: P Q X P1 Q2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (up X) P1
H4 : oneb Q (up X) Q2
H5 : refl_t (P1 n1) (P3 n1) (Q2 n1) (Q3 n1)
H6 : bisim_up_to refl_t (P3 n1) (Q3 n1)
============================
nabla x, inv (P1 x) (Q2 x)
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 1.3.2:
Variables: P Q X P1 Q2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (up X) P1
H4 : oneb Q (up X) Q2
H5 : refl_t (P1 n1) (P3 n1) (Q2 n1) (Q3 n1)
H6 : bisim_up_to refl_t (P3 n1) (Q3 n1)
============================
inv (P1 n1) (Q2 n1)
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < case H5.
Subgoal 1.3.2:
Variables: P Q X P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb P (up X) (z1\P3 z1)
H4 : oneb Q (up X) (z1\Q3 z1)
H6 : bisim_up_to refl_t (P3 n1) (Q3 n1)
============================
inv (P3 n1) (Q3 n1)
Subgoal 1.4 is:
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 1.4:
Variables: P Q
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
============================
forall L Q1, one Q L Q1 -> (exists P1, one P L P1 /\ inv P1 Q1)
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 1.4:
Variables: P Q L Q1
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : one Q L Q1
============================
exists P1, one P L P1 /\ inv P1 Q1
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply Bis4 to H3.
Subgoal 1.4:
Variables: P Q L Q1 P2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : one Q L Q1
H4 : one P L P2
H5 : refl_t P2 P3 Q1 Q3
H6 : bisim_up_to refl_t P3 Q3
============================
exists P1, one P L P1 /\ inv P1 Q1
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < case H5.
Subgoal 1.4:
Variables: P Q L P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : one Q L Q3
H4 : one P L P3
H6 : bisim_up_to refl_t P3 Q3
============================
exists P1, one P L P1 /\ inv P1 Q3
Subgoal 1.5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 1.5:
Variables: P Q
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
============================
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N)))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 1.5:
Variables: P Q X Q1
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (dn X) Q1
============================
exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply Bis5 to H3.
Subgoal 1.5:
Variables: P Q X Q1 P2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (dn X) Q1
H4 : oneb P (dn X) P2
H5 : forall N, refl_t (P2 N) (P3 N) (Q1 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
============================
exists P1, oneb P (dn X) P1 /\ (forall N, inv (P1 N) (Q1 N))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness P2.
Subgoal 1.5:
Variables: P Q X Q1 P2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (dn X) Q1
H4 : oneb P (dn X) P2
H5 : forall N, refl_t (P2 N) (P3 N) (Q1 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
============================
oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q1 N))
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 1.5.1:
Variables: P Q X Q1 P2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (dn X) Q1
H4 : oneb P (dn X) P2
H5 : forall N, refl_t (P2 N) (P3 N) (Q1 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
============================
oneb P (dn X) P2
Subgoal 1.5.2 is:
forall N, inv (P2 N) (Q1 N)
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 1.5.2:
Variables: P Q X Q1 P2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (dn X) Q1
H4 : oneb P (dn X) P2
H5 : forall N, refl_t (P2 N) (P3 N) (Q1 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
============================
forall N, inv (P2 N) (Q1 N)
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 1.5.2:
Variables: P Q X Q1 P2 P3 Q3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (dn X) Q1
H4 : oneb P (dn X) P2
H5 : forall N, refl_t (P2 N) (P3 N) (Q1 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
============================
inv (P2 N) (Q1 N)
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply H5 with N = N.
Subgoal 1.5.2:
Variables: P Q X Q1 P2 P3 Q3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (dn X) Q1
H4 : oneb P (dn X) P2
H5 : forall N, refl_t (P2 N) (P3 N) (Q1 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
H6 : refl_t (P2 N) (P3 N) (Q1 N) (Q3 N)
H7 : bisim_up_to refl_t (P3 N) (Q3 N)
============================
inv (P2 N) (Q1 N)
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < case H6.
Subgoal 1.5.2:
Variables: P Q X Q1 P2 P3 Q3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (dn X) Q1
H4 : oneb P (dn X) P2
H5 : forall N, refl_t (P2 N) (P3 N) (Q1 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
H7 : bisim_up_to refl_t (P3 N) (Q3 N)
H8 : Q1 N = Q3 N
H9 : P2 N = P3 N
============================
inv (P2 N) (Q1 N)
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply bisim_eq_2R to H7 H8.
Subgoal 1.5.2:
Variables: P Q X Q1 P2 P3 Q3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (dn X) Q1
H4 : oneb P (dn X) P2
H5 : forall N, refl_t (P2 N) (P3 N) (Q1 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
H7 : bisim_up_to refl_t (P3 N) (Q3 N)
H8 : Q1 N = Q3 N
H9 : P2 N = P3 N
H10 : bisim_up_to refl_t (P3 N) (Q1 N)
============================
inv (P2 N) (Q1 N)
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply bisim_eq_1R to H10 H9.
Subgoal 1.5.2:
Variables: P Q X Q1 P2 P3 Q3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (dn X) Q1
H4 : oneb P (dn X) P2
H5 : forall N, refl_t (P2 N) (P3 N) (Q1 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)
H7 : bisim_up_to refl_t (P3 N) (Q3 N)
H8 : Q1 N = Q3 N
H9 : P2 N = P3 N
H10 : bisim_up_to refl_t (P3 N) (Q1 N)
H11 : bisim_up_to refl_t (P2 N) (Q1 N)
============================
inv (P2 N) (Q1 N)
Subgoal 1.6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 1.6:
Variables: P Q
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
============================
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x)))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 1.6:
Variables: P Q X Q1
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (up X) Q1
============================
exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply Bis6 to H3.
Subgoal 1.6:
Variables: P Q X Q1 P2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (up X) Q1
H4 : oneb P (up X) P2
H5 : refl_t (P2 n1) (P3 n1) (Q1 n1) (Q3 n1)
H6 : bisim_up_to refl_t (P3 n1) (Q3 n1)
============================
exists P1, oneb P (up X) P1 /\ (nabla x, inv (P1 x) (Q1 x))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness P2.
Subgoal 1.6:
Variables: P Q X Q1 P2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (up X) Q1
H4 : oneb P (up X) P2
H5 : refl_t (P2 n1) (P3 n1) (Q1 n1) (Q3 n1)
H6 : bisim_up_to refl_t (P3 n1) (Q3 n1)
============================
oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q1 x))
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 1.6.1:
Variables: P Q X Q1 P2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (up X) Q1
H4 : oneb P (up X) P2
H5 : refl_t (P2 n1) (P3 n1) (Q1 n1) (Q3 n1)
H6 : bisim_up_to refl_t (P3 n1) (Q3 n1)
============================
oneb P (up X) P2
Subgoal 1.6.2 is:
nabla x, inv (P2 x) (Q1 x)
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 1.6.2:
Variables: P Q X Q1 P2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (up X) Q1
H4 : oneb P (up X) P2
H5 : refl_t (P2 n1) (P3 n1) (Q1 n1) (Q3 n1)
H6 : bisim_up_to refl_t (P3 n1) (Q3 n1)
============================
nabla x, inv (P2 x) (Q1 x)
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 1.6.2:
Variables: P Q X Q1 P2 P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (up X) Q1
H4 : oneb P (up X) P2
H5 : refl_t (P2 n1) (P3 n1) (Q1 n1) (Q3 n1)
H6 : bisim_up_to refl_t (P3 n1) (Q3 n1)
============================
inv (P2 n1) (Q1 n1)
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < case H5.
Subgoal 1.6.2:
Variables: P Q X P3 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
Bis1 : forall L P2, one P L P2 ->
(exists Q2, one Q L Q2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
Bis4 : forall L Q2, one Q L Q2 ->
(exists P2, one P L P2 /\
(exists P3 Q3, refl_t P2 P3 Q2 Q3 /\ bisim_up_to refl_t P3 Q3))
Bis5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\
(exists P3 Q3, forall N, refl_t (P2 N) (P3 N) (Q2 N) (Q3 N) /\
bisim_up_to refl_t (P3 N) (Q3 N)))
Bis6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\
(exists P3 Q3, nabla x, refl_t (P2 x) (P3 x) (Q2 x) (Q3 x) /\
bisim_up_to refl_t (P3 x) (Q3 x)))
H3 : oneb Q (up X) (z1\Q3 z1)
H4 : oneb P (up X) (z1\P3 z1)
H6 : bisim_up_to refl_t (P3 n1) (Q3 n1)
============================
inv (P3 n1) (Q3 n1)
Subgoal 2 is:
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2:
Variables: Q2 P2 Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
============================
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply IH to H2.
Subgoal 2:
Variables: Q2 P2 Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
H4 : bisim_inv P1 P2
============================
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply IH to H3.
Subgoal 2:
Variables: Q2 P2 Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
H4 : bisim_inv P1 P2
H5 : bisim_inv Q1 Q2
============================
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < PPInv1 : case H4.
Subgoal 2:
Variables: Q2 P2 Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
H5 : bisim_inv Q1 Q2
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
============================
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < QQInv1 : case H5.
Subgoal 2:
Variables: Q2 P2 Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
============================
bisim_inv (par P1 Q1) (par P2 Q2)
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < unfold.
Subgoal 2.1:
Variables: Q2 P2 Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
============================
forall L P3, one (par P1 Q1) L P3 ->
(exists Q3, one (par P2 Q2) L Q3 /\ inv P3 Q3)
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 2.1:
Variables: Q2 P2 Q1 P1 L P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H6 : one (par P1 Q1) L P3
============================
exists Q3, one (par P2 Q2) L Q3 /\ inv P3 Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < case H6.
Subgoal 2.1.1:
Variables: Q2 P2 Q1 P1 L R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : one P1 L R
============================
exists Q3, one (par P2 Q2) L Q3 /\ inv (par R Q1) Q3
Subgoal 2.1.2 is:
exists Q3, one (par P2 Q2) L Q3 /\ inv (par P1 R) Q3
Subgoal 2.1.3 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP QQ) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply PPInv1 to H7.
Subgoal 2.1.1:
Variables: Q2 P2 Q1 P1 L R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : one P1 L R
H8 : one P2 L Q3
H9 : inv R Q3
============================
exists Q3, one (par P2 Q2) L Q3 /\ inv (par R Q1) Q3
Subgoal 2.1.2 is:
exists Q3, one (par P2 Q2) L Q3 /\ inv (par P1 R) Q3
Subgoal 2.1.3 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP QQ) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness par Q3 Q2.
Subgoal 2.1.1:
Variables: Q2 P2 Q1 P1 L R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : one P1 L R
H8 : one P2 L Q3
H9 : inv R Q3
============================
one (par P2 Q2) L (par Q3 Q2) /\ inv (par R Q1) (par Q3 Q2)
Subgoal 2.1.2 is:
exists Q3, one (par P2 Q2) L Q3 /\ inv (par P1 R) Q3
Subgoal 2.1.3 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP QQ) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.1.1.1:
Variables: Q2 P2 Q1 P1 L R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : one P1 L R
H8 : one P2 L Q3
H9 : inv R Q3
============================
one (par P2 Q2) L (par Q3 Q2)
Subgoal 2.1.1.2 is:
inv (par R Q1) (par Q3 Q2)
Subgoal 2.1.2 is:
exists Q3, one (par P2 Q2) L Q3 /\ inv (par P1 R) Q3
Subgoal 2.1.3 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP QQ) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.1.1.2:
Variables: Q2 P2 Q1 P1 L R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : one P1 L R
H8 : one P2 L Q3
H9 : inv R Q3
============================
inv (par R Q1) (par Q3 Q2)
Subgoal 2.1.2 is:
exists Q3, one (par P2 Q2) L Q3 /\ inv (par P1 R) Q3
Subgoal 2.1.3 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP QQ) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.1.2:
Variables: Q2 P2 Q1 P1 L R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : one Q1 L R
============================
exists Q3, one (par P2 Q2) L Q3 /\ inv (par P1 R) Q3
Subgoal 2.1.3 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP QQ) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply QQInv1 to H7.
Subgoal 2.1.2:
Variables: Q2 P2 Q1 P1 L R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : one Q1 L R
H8 : one Q2 L Q3
H9 : inv R Q3
============================
exists Q3, one (par P2 Q2) L Q3 /\ inv (par P1 R) Q3
Subgoal 2.1.3 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP QQ) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness par P2 Q3.
Subgoal 2.1.2:
Variables: Q2 P2 Q1 P1 L R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : one Q1 L R
H8 : one Q2 L Q3
H9 : inv R Q3
============================
one (par P2 Q2) L (par P2 Q3) /\ inv (par P1 R) (par P2 Q3)
Subgoal 2.1.3 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP QQ) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.1.2.1:
Variables: Q2 P2 Q1 P1 L R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : one Q1 L R
H8 : one Q2 L Q3
H9 : inv R Q3
============================
one (par P2 Q2) L (par P2 Q3)
Subgoal 2.1.2.2 is:
inv (par P1 R) (par P2 Q3)
Subgoal 2.1.3 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP QQ) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.1.2.2:
Variables: Q2 P2 Q1 P1 L R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : one Q1 L R
H8 : one Q2 L Q3
H9 : inv R Q3
============================
inv (par P1 R) (par P2 Q3)
Subgoal 2.1.3 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP QQ) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.1.3:
Variables: Q2 P2 Q1 P1 QQ PP
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : (exists X Y R, oneb P1 (dn X) R /\ one Q1 (up X Y) QQ /\ PP = R Y) \/
(exists X Y R, one P1 (up X Y) PP /\ oneb Q1 (dn X) R /\ QQ = R Y)
============================
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP QQ) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < case H7.
Subgoal 2.1.3.1:
Variables: Q2 P2 Q1 P1 QQ X Y R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (dn X) R
H9 : one Q1 (up X Y) QQ
============================
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par (R Y) QQ) Q3
Subgoal 2.1.3.2 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP (R Y)) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply PPInv2 to H8.
Subgoal 2.1.3.1:
Variables: Q2 P2 Q1 P1 QQ X Y R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (dn X) R
H9 : one Q1 (up X Y) QQ
H10 : oneb P2 (dn X) Q3
H11 : forall N, inv (R N) (Q3 N)
============================
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par (R Y) QQ) Q3
Subgoal 2.1.3.2 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP (R Y)) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply QQInv1 to H9.
Subgoal 2.1.3.1:
Variables: Q2 P2 Q1 P1 QQ X Y R Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (dn X) R
H9 : one Q1 (up X Y) QQ
H10 : oneb P2 (dn X) Q3
H11 : forall N, inv (R N) (Q3 N)
H12 : one Q2 (up X Y) Q4
H13 : inv QQ Q4
============================
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par (R Y) QQ) Q3
Subgoal 2.1.3.2 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP (R Y)) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness par (Q3 Y) Q4.
Subgoal 2.1.3.1:
Variables: Q2 P2 Q1 P1 QQ X Y R Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (dn X) R
H9 : one Q1 (up X Y) QQ
H10 : oneb P2 (dn X) Q3
H11 : forall N, inv (R N) (Q3 N)
H12 : one Q2 (up X Y) Q4
H13 : inv QQ Q4
============================
one (par P2 Q2) tau (par (Q3 Y) Q4) /\ inv (par (R Y) QQ) (par (Q3 Y) Q4)
Subgoal 2.1.3.2 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP (R Y)) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.1.3.1.1:
Variables: Q2 P2 Q1 P1 QQ X Y R Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (dn X) R
H9 : one Q1 (up X Y) QQ
H10 : oneb P2 (dn X) Q3
H11 : forall N, inv (R N) (Q3 N)
H12 : one Q2 (up X Y) Q4
H13 : inv QQ Q4
============================
one (par P2 Q2) tau (par (Q3 Y) Q4)
Subgoal 2.1.3.1.2 is:
inv (par (R Y) QQ) (par (Q3 Y) Q4)
Subgoal 2.1.3.2 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP (R Y)) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.1.3.1.2:
Variables: Q2 P2 Q1 P1 QQ X Y R Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (dn X) R
H9 : one Q1 (up X Y) QQ
H10 : oneb P2 (dn X) Q3
H11 : forall N, inv (R N) (Q3 N)
H12 : one Q2 (up X Y) Q4
H13 : inv QQ Q4
============================
inv (par (R Y) QQ) (par (Q3 Y) Q4)
Subgoal 2.1.3.2 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP (R Y)) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply H11 with N = Y.
Subgoal 2.1.3.1.2:
Variables: Q2 P2 Q1 P1 QQ X Y R Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (dn X) R
H9 : one Q1 (up X Y) QQ
H10 : oneb P2 (dn X) Q3
H11 : forall N, inv (R N) (Q3 N)
H12 : one Q2 (up X Y) Q4
H13 : inv QQ Q4
H14 : inv (R Y) (Q3 Y)
============================
inv (par (R Y) QQ) (par (Q3 Y) Q4)
Subgoal 2.1.3.2 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP (R Y)) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.1.3.2:
Variables: Q2 P2 Q1 P1 PP X Y R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : one P1 (up X Y) PP
H9 : oneb Q1 (dn X) R
============================
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP (R Y)) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply PPInv1 to H8.
Subgoal 2.1.3.2:
Variables: Q2 P2 Q1 P1 PP X Y R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : one P1 (up X Y) PP
H9 : oneb Q1 (dn X) R
H10 : one P2 (up X Y) Q3
H11 : inv PP Q3
============================
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP (R Y)) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply QQInv2 to H9.
Subgoal 2.1.3.2:
Variables: Q2 P2 Q1 P1 PP X Y R Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : one P1 (up X Y) PP
H9 : oneb Q1 (dn X) R
H10 : one P2 (up X Y) Q3
H11 : inv PP Q3
H12 : oneb Q2 (dn X) Q4
H13 : forall N, inv (R N) (Q4 N)
============================
exists Q3, one (par P2 Q2) tau Q3 /\ inv (par PP (R Y)) Q3
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness par Q3 (Q4 Y).
Subgoal 2.1.3.2:
Variables: Q2 P2 Q1 P1 PP X Y R Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : one P1 (up X Y) PP
H9 : oneb Q1 (dn X) R
H10 : one P2 (up X Y) Q3
H11 : inv PP Q3
H12 : oneb Q2 (dn X) Q4
H13 : forall N, inv (R N) (Q4 N)
============================
one (par P2 Q2) tau (par Q3 (Q4 Y)) /\ inv (par PP (R Y)) (par Q3 (Q4 Y))
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.1.3.2.1:
Variables: Q2 P2 Q1 P1 PP X Y R Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : one P1 (up X Y) PP
H9 : oneb Q1 (dn X) R
H10 : one P2 (up X Y) Q3
H11 : inv PP Q3
H12 : oneb Q2 (dn X) Q4
H13 : forall N, inv (R N) (Q4 N)
============================
one (par P2 Q2) tau (par Q3 (Q4 Y))
Subgoal 2.1.3.2.2 is:
inv (par PP (R Y)) (par Q3 (Q4 Y))
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.1.3.2.2:
Variables: Q2 P2 Q1 P1 PP X Y R Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : one P1 (up X Y) PP
H9 : oneb Q1 (dn X) R
H10 : one P2 (up X Y) Q3
H11 : inv PP Q3
H12 : oneb Q2 (dn X) Q4
H13 : forall N, inv (R N) (Q4 N)
============================
inv (par PP (R Y)) (par Q3 (Q4 Y))
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply H13 with N = Y.
Subgoal 2.1.3.2.2:
Variables: Q2 P2 Q1 P1 PP X Y R Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : one P1 (up X Y) PP
H9 : oneb Q1 (dn X) R
H10 : one P2 (up X Y) Q3
H11 : inv PP Q3
H12 : oneb Q2 (dn X) Q4
H13 : forall N, inv (R N) (Q4 N)
H14 : inv (R Y) (Q4 Y)
============================
inv (par PP (R Y)) (par Q3 (Q4 Y))
Subgoal 2.1.4 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.1.4:
Variables: Q2 P2 Q1 P1 QQ PP
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : (exists X, oneb P1 (dn X) PP /\ oneb Q1 (up X) QQ) \/
(exists X, oneb P1 (up X) PP /\ oneb Q1 (dn X) QQ)
============================
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < case H7.
Subgoal 2.1.4.1:
Variables: Q2 P2 Q1 P1 QQ PP X
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (dn X) PP
H9 : oneb Q1 (up X) QQ
============================
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.1.4.2 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply PPInv2 to H8.
Subgoal 2.1.4.1:
Variables: Q2 P2 Q1 P1 QQ PP X Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (dn X) PP
H9 : oneb Q1 (up X) QQ
H10 : oneb P2 (dn X) Q3
H11 : forall N, inv (PP N) (Q3 N)
============================
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.1.4.2 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply QQInv3 to H9.
Subgoal 2.1.4.1:
Variables: Q2 P2 Q1 P1 QQ PP X Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (dn X) PP
H9 : oneb Q1 (up X) QQ
H10 : oneb P2 (dn X) Q3
H11 : forall N, inv (PP N) (Q3 N)
H12 : oneb Q2 (up X) Q4
H13 : inv (QQ n1) (Q4 n1)
============================
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.1.4.2 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness nu (y\par (Q3 y) (Q4 y)).
Subgoal 2.1.4.1:
Variables: Q2 P2 Q1 P1 QQ PP X Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (dn X) PP
H9 : oneb Q1 (up X) QQ
H10 : oneb P2 (dn X) Q3
H11 : forall N, inv (PP N) (Q3 N)
H12 : oneb Q2 (up X) Q4
H13 : inv (QQ n1) (Q4 n1)
============================
one (par P2 Q2) tau (nu (y\par (Q3 y) (Q4 y))) /\
inv (nu (y\par (PP y) (QQ y))) (nu (y\par (Q3 y) (Q4 y)))
Subgoal 2.1.4.2 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.1.4.1.1:
Variables: Q2 P2 Q1 P1 QQ PP X Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (dn X) PP
H9 : oneb Q1 (up X) QQ
H10 : oneb P2 (dn X) Q3
H11 : forall N, inv (PP N) (Q3 N)
H12 : oneb Q2 (up X) Q4
H13 : inv (QQ n1) (Q4 n1)
============================
one (par P2 Q2) tau (nu (y\par (Q3 y) (Q4 y)))
Subgoal 2.1.4.1.2 is:
inv (nu (y\par (PP y) (QQ y))) (nu (y\par (Q3 y) (Q4 y)))
Subgoal 2.1.4.2 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.1.4.1.2:
Variables: Q2 P2 Q1 P1 QQ PP X Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (dn X) PP
H9 : oneb Q1 (up X) QQ
H10 : oneb P2 (dn X) Q3
H11 : forall N, inv (PP N) (Q3 N)
H12 : oneb Q2 (up X) Q4
H13 : inv (QQ n1) (Q4 n1)
============================
inv (nu (y\par (PP y) (QQ y))) (nu (y\par (Q3 y) (Q4 y)))
Subgoal 2.1.4.2 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply H11 with N = n1.
Subgoal 2.1.4.1.2:
Variables: Q2 P2 Q1 P1 QQ PP X Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (dn X) PP
H9 : oneb Q1 (up X) QQ
H10 : oneb P2 (dn X) Q3
H11 : forall N, inv (PP N) (Q3 N)
H12 : oneb Q2 (up X) Q4
H13 : inv (QQ n1) (Q4 n1)
H14 : inv (PP n1) (Q3 n1)
============================
inv (nu (y\par (PP y) (QQ y))) (nu (y\par (Q3 y) (Q4 y)))
Subgoal 2.1.4.2 is:
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.1.4.2:
Variables: Q2 P2 Q1 P1 QQ PP X
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (up X) PP
H9 : oneb Q1 (dn X) QQ
============================
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply PPInv3 to H8.
Subgoal 2.1.4.2:
Variables: Q2 P2 Q1 P1 QQ PP X Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (up X) PP
H9 : oneb Q1 (dn X) QQ
H10 : oneb P2 (up X) Q3
H11 : inv (PP n1) (Q3 n1)
============================
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply QQInv2 to H9.
Subgoal 2.1.4.2:
Variables: Q2 P2 Q1 P1 QQ PP X Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (up X) PP
H9 : oneb Q1 (dn X) QQ
H10 : oneb P2 (up X) Q3
H11 : inv (PP n1) (Q3 n1)
H12 : oneb Q2 (dn X) Q4
H13 : forall N, inv (QQ N) (Q4 N)
============================
exists Q3, one (par P2 Q2) tau Q3 /\ inv (nu (y\par (PP y) (QQ y))) Q3
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness nu (y\par (Q3 y) (Q4 y)).
Subgoal 2.1.4.2:
Variables: Q2 P2 Q1 P1 QQ PP X Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (up X) PP
H9 : oneb Q1 (dn X) QQ
H10 : oneb P2 (up X) Q3
H11 : inv (PP n1) (Q3 n1)
H12 : oneb Q2 (dn X) Q4
H13 : forall N, inv (QQ N) (Q4 N)
============================
one (par P2 Q2) tau (nu (y\par (Q3 y) (Q4 y))) /\
inv (nu (y\par (PP y) (QQ y))) (nu (y\par (Q3 y) (Q4 y)))
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.1.4.2.1:
Variables: Q2 P2 Q1 P1 QQ PP X Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (up X) PP
H9 : oneb Q1 (dn X) QQ
H10 : oneb P2 (up X) Q3
H11 : inv (PP n1) (Q3 n1)
H12 : oneb Q2 (dn X) Q4
H13 : forall N, inv (QQ N) (Q4 N)
============================
one (par P2 Q2) tau (nu (y\par (Q3 y) (Q4 y)))
Subgoal 2.1.4.2.2 is:
inv (nu (y\par (PP y) (QQ y))) (nu (y\par (Q3 y) (Q4 y)))
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.1.4.2.2:
Variables: Q2 P2 Q1 P1 QQ PP X Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (up X) PP
H9 : oneb Q1 (dn X) QQ
H10 : oneb P2 (up X) Q3
H11 : inv (PP n1) (Q3 n1)
H12 : oneb Q2 (dn X) Q4
H13 : forall N, inv (QQ N) (Q4 N)
============================
inv (nu (y\par (PP y) (QQ y))) (nu (y\par (Q3 y) (Q4 y)))
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply H13 with N = n1.
Subgoal 2.1.4.2.2:
Variables: Q2 P2 Q1 P1 QQ PP X Q3 Q4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P1 (up X) PP
H9 : oneb Q1 (dn X) QQ
H10 : oneb P2 (up X) Q3
H11 : inv (PP n1) (Q3 n1)
H12 : oneb Q2 (dn X) Q4
H13 : forall N, inv (QQ N) (Q4 N)
H14 : inv (QQ n1) (Q4 n1)
============================
inv (nu (y\par (PP y) (QQ y))) (nu (y\par (Q3 y) (Q4 y)))
Subgoal 2.2 is:
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.2:
Variables: Q2 P2 Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
============================
forall X P3, oneb (par P1 Q1) (dn X) P3 ->
(exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 2.2:
Variables: Q2 P2 Q1 P1 X P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H6 : oneb (par P1 Q1) (dn X) P3
============================
exists Q3, oneb (par P2 Q2) (dn X) Q3 /\ (forall N, inv (P3 N) (Q3 N))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < case H6.
Subgoal 2.2.1:
Variables: Q2 P2 Q1 P1 X R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P1 (dn X) R
============================
exists Q3, oneb (par P2 Q2) (dn X) Q3 /\
(forall N, inv (par (R N) Q1) (Q3 N))
Subgoal 2.2.2 is:
exists Q3, oneb (par P2 Q2) (dn X) Q3 /\
(forall N, inv (par P1 (R N)) (Q3 N))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply PPInv2 to H7.
Subgoal 2.2.1:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P1 (dn X) R
H8 : oneb P2 (dn X) Q3
H9 : forall N, inv (R N) (Q3 N)
============================
exists Q3, oneb (par P2 Q2) (dn X) Q3 /\
(forall N, inv (par (R N) Q1) (Q3 N))
Subgoal 2.2.2 is:
exists Q3, oneb (par P2 Q2) (dn X) Q3 /\
(forall N, inv (par P1 (R N)) (Q3 N))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness y\par (Q3 y) Q2.
Subgoal 2.2.1:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P1 (dn X) R
H8 : oneb P2 (dn X) Q3
H9 : forall N, inv (R N) (Q3 N)
============================
oneb (par P2 Q2) (dn X) (y\par (Q3 y) Q2) /\
(forall N, inv (par (R N) Q1) (par (Q3 N) Q2))
Subgoal 2.2.2 is:
exists Q3, oneb (par P2 Q2) (dn X) Q3 /\
(forall N, inv (par P1 (R N)) (Q3 N))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.2.1.1:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P1 (dn X) R
H8 : oneb P2 (dn X) Q3
H9 : forall N, inv (R N) (Q3 N)
============================
oneb (par P2 Q2) (dn X) (y\par (Q3 y) Q2)
Subgoal 2.2.1.2 is:
forall N, inv (par (R N) Q1) (par (Q3 N) Q2)
Subgoal 2.2.2 is:
exists Q3, oneb (par P2 Q2) (dn X) Q3 /\
(forall N, inv (par P1 (R N)) (Q3 N))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.2.1.2:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P1 (dn X) R
H8 : oneb P2 (dn X) Q3
H9 : forall N, inv (R N) (Q3 N)
============================
forall N, inv (par (R N) Q1) (par (Q3 N) Q2)
Subgoal 2.2.2 is:
exists Q3, oneb (par P2 Q2) (dn X) Q3 /\
(forall N, inv (par P1 (R N)) (Q3 N))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 2.2.1.2:
Variables: Q2 P2 Q1 P1 X R Q3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P1 (dn X) R
H8 : oneb P2 (dn X) Q3
H9 : forall N, inv (R N) (Q3 N)
============================
inv (par (R N) Q1) (par (Q3 N) Q2)
Subgoal 2.2.2 is:
exists Q3, oneb (par P2 Q2) (dn X) Q3 /\
(forall N, inv (par P1 (R N)) (Q3 N))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply H9 with N = N.
Subgoal 2.2.1.2:
Variables: Q2 P2 Q1 P1 X R Q3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P1 (dn X) R
H8 : oneb P2 (dn X) Q3
H9 : forall N, inv (R N) (Q3 N)
H10 : inv (R N) (Q3 N)
============================
inv (par (R N) Q1) (par (Q3 N) Q2)
Subgoal 2.2.2 is:
exists Q3, oneb (par P2 Q2) (dn X) Q3 /\
(forall N, inv (par P1 (R N)) (Q3 N))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.2.2:
Variables: Q2 P2 Q1 P1 X R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q1 (dn X) R
============================
exists Q3, oneb (par P2 Q2) (dn X) Q3 /\
(forall N, inv (par P1 (R N)) (Q3 N))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply QQInv2 to H7.
Subgoal 2.2.2:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q1 (dn X) R
H8 : oneb Q2 (dn X) Q3
H9 : forall N, inv (R N) (Q3 N)
============================
exists Q3, oneb (par P2 Q2) (dn X) Q3 /\
(forall N, inv (par P1 (R N)) (Q3 N))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness y\par P2 (Q3 y).
Subgoal 2.2.2:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q1 (dn X) R
H8 : oneb Q2 (dn X) Q3
H9 : forall N, inv (R N) (Q3 N)
============================
oneb (par P2 Q2) (dn X) (y\par P2 (Q3 y)) /\
(forall N, inv (par P1 (R N)) (par P2 (Q3 N)))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.2.2.1:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q1 (dn X) R
H8 : oneb Q2 (dn X) Q3
H9 : forall N, inv (R N) (Q3 N)
============================
oneb (par P2 Q2) (dn X) (y\par P2 (Q3 y))
Subgoal 2.2.2.2 is:
forall N, inv (par P1 (R N)) (par P2 (Q3 N))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.2.2.2:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q1 (dn X) R
H8 : oneb Q2 (dn X) Q3
H9 : forall N, inv (R N) (Q3 N)
============================
forall N, inv (par P1 (R N)) (par P2 (Q3 N))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 2.2.2.2:
Variables: Q2 P2 Q1 P1 X R Q3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q1 (dn X) R
H8 : oneb Q2 (dn X) Q3
H9 : forall N, inv (R N) (Q3 N)
============================
inv (par P1 (R N)) (par P2 (Q3 N))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply H9 with N = N.
Subgoal 2.2.2.2:
Variables: Q2 P2 Q1 P1 X R Q3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q1 (dn X) R
H8 : oneb Q2 (dn X) Q3
H9 : forall N, inv (R N) (Q3 N)
H10 : inv (R N) (Q3 N)
============================
inv (par P1 (R N)) (par P2 (Q3 N))
Subgoal 2.3 is:
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.3:
Variables: Q2 P2 Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
============================
forall X P3, oneb (par P1 Q1) (up X) P3 ->
(exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 2.3:
Variables: Q2 P2 Q1 P1 X P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H6 : oneb (par P1 Q1) (up X) P3
============================
exists Q3, oneb (par P2 Q2) (up X) Q3 /\ (nabla x, inv (P3 x) (Q3 x))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < case H6.
Subgoal 2.3.1:
Variables: Q2 P2 Q1 P1 X R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P1 (up X) R
============================
exists Q3, oneb (par P2 Q2) (up X) Q3 /\
(nabla x, inv (par (R x) Q1) (Q3 x))
Subgoal 2.3.2 is:
exists Q3, oneb (par P2 Q2) (up X) Q3 /\
(nabla x, inv (par P1 (R x)) (Q3 x))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply PPInv3 to H7.
Subgoal 2.3.1:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P1 (up X) R
H8 : oneb P2 (up X) Q3
H9 : inv (R n1) (Q3 n1)
============================
exists Q3, oneb (par P2 Q2) (up X) Q3 /\
(nabla x, inv (par (R x) Q1) (Q3 x))
Subgoal 2.3.2 is:
exists Q3, oneb (par P2 Q2) (up X) Q3 /\
(nabla x, inv (par P1 (R x)) (Q3 x))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness y\par (Q3 y) Q2.
Subgoal 2.3.1:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P1 (up X) R
H8 : oneb P2 (up X) Q3
H9 : inv (R n1) (Q3 n1)
============================
oneb (par P2 Q2) (up X) (y\par (Q3 y) Q2) /\
(nabla x, inv (par (R x) Q1) (par (Q3 x) Q2))
Subgoal 2.3.2 is:
exists Q3, oneb (par P2 Q2) (up X) Q3 /\
(nabla x, inv (par P1 (R x)) (Q3 x))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.3.1.1:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P1 (up X) R
H8 : oneb P2 (up X) Q3
H9 : inv (R n1) (Q3 n1)
============================
oneb (par P2 Q2) (up X) (y\par (Q3 y) Q2)
Subgoal 2.3.1.2 is:
nabla x, inv (par (R x) Q1) (par (Q3 x) Q2)
Subgoal 2.3.2 is:
exists Q3, oneb (par P2 Q2) (up X) Q3 /\
(nabla x, inv (par P1 (R x)) (Q3 x))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.3.1.2:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P1 (up X) R
H8 : oneb P2 (up X) Q3
H9 : inv (R n1) (Q3 n1)
============================
nabla x, inv (par (R x) Q1) (par (Q3 x) Q2)
Subgoal 2.3.2 is:
exists Q3, oneb (par P2 Q2) (up X) Q3 /\
(nabla x, inv (par P1 (R x)) (Q3 x))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 2.3.1.2:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P1 (up X) R
H8 : oneb P2 (up X) Q3
H9 : inv (R n1) (Q3 n1)
============================
inv (par (R n1) Q1) (par (Q3 n1) Q2)
Subgoal 2.3.2 is:
exists Q3, oneb (par P2 Q2) (up X) Q3 /\
(nabla x, inv (par P1 (R x)) (Q3 x))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.3.2:
Variables: Q2 P2 Q1 P1 X R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q1 (up X) R
============================
exists Q3, oneb (par P2 Q2) (up X) Q3 /\
(nabla x, inv (par P1 (R x)) (Q3 x))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply QQInv3 to H7.
Subgoal 2.3.2:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q1 (up X) R
H8 : oneb Q2 (up X) Q3
H9 : inv (R n1) (Q3 n1)
============================
exists Q3, oneb (par P2 Q2) (up X) Q3 /\
(nabla x, inv (par P1 (R x)) (Q3 x))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness y\par P2 (Q3 y).
Subgoal 2.3.2:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q1 (up X) R
H8 : oneb Q2 (up X) Q3
H9 : inv (R n1) (Q3 n1)
============================
oneb (par P2 Q2) (up X) (y\par P2 (Q3 y)) /\
(nabla x, inv (par P1 (R x)) (par P2 (Q3 x)))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.3.2.1:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q1 (up X) R
H8 : oneb Q2 (up X) Q3
H9 : inv (R n1) (Q3 n1)
============================
oneb (par P2 Q2) (up X) (y\par P2 (Q3 y))
Subgoal 2.3.2.2 is:
nabla x, inv (par P1 (R x)) (par P2 (Q3 x))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.3.2.2:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q1 (up X) R
H8 : oneb Q2 (up X) Q3
H9 : inv (R n1) (Q3 n1)
============================
nabla x, inv (par P1 (R x)) (par P2 (Q3 x))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 2.3.2.2:
Variables: Q2 P2 Q1 P1 X R Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q1 (up X) R
H8 : oneb Q2 (up X) Q3
H9 : inv (R n1) (Q3 n1)
============================
inv (par P1 (R n1)) (par P2 (Q3 n1))
Subgoal 2.4 is:
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.4:
Variables: Q2 P2 Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
============================
forall L Q3, one (par P2 Q2) L Q3 ->
(exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3)
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 2.4:
Variables: Q2 P2 Q1 P1 L Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H6 : one (par P2 Q2) L Q3
============================
exists P3, one (par P1 Q1) L P3 /\ inv P3 Q3
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < case H6.
Subgoal 2.4.1:
Variables: Q2 P2 Q1 P1 L R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : one P2 L R
============================
exists P3, one (par P1 Q1) L P3 /\ inv P3 (par R Q2)
Subgoal 2.4.2 is:
exists P3, one (par P1 Q1) L P3 /\ inv P3 (par P2 R)
Subgoal 2.4.3 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par PP QQ)
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply PPInv4 to H7.
Subgoal 2.4.1:
Variables: Q2 P2 Q1 P1 L R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : one P2 L R
H8 : one P1 L P3
H9 : inv P3 R
============================
exists P3, one (par P1 Q1) L P3 /\ inv P3 (par R Q2)
Subgoal 2.4.2 is:
exists P3, one (par P1 Q1) L P3 /\ inv P3 (par P2 R)
Subgoal 2.4.3 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par PP QQ)
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.4.2:
Variables: Q2 P2 Q1 P1 L R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : one Q2 L R
============================
exists P3, one (par P1 Q1) L P3 /\ inv P3 (par P2 R)
Subgoal 2.4.3 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par PP QQ)
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply QQInv4 to H7.
Subgoal 2.4.2:
Variables: Q2 P2 Q1 P1 L R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : one Q2 L R
H8 : one Q1 L P3
H9 : inv P3 R
============================
exists P3, one (par P1 Q1) L P3 /\ inv P3 (par P2 R)
Subgoal 2.4.3 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par PP QQ)
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.4.3:
Variables: Q2 P2 Q1 P1 QQ PP
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : (exists X Y R, oneb P2 (dn X) R /\ one Q2 (up X Y) QQ /\ PP = R Y) \/
(exists X Y R, one P2 (up X Y) PP /\ oneb Q2 (dn X) R /\ QQ = R Y)
============================
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par PP QQ)
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < case H7.
Subgoal 2.4.3.1:
Variables: Q2 P2 Q1 P1 QQ X Y R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (dn X) R
H9 : one Q2 (up X Y) QQ
============================
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par (R Y) QQ)
Subgoal 2.4.3.2 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par PP (R Y))
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply PPInv5 to H8.
Subgoal 2.4.3.1:
Variables: Q2 P2 Q1 P1 QQ X Y R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (dn X) R
H9 : one Q2 (up X Y) QQ
H10 : oneb P1 (dn X) P3
H11 : forall N, inv (P3 N) (R N)
============================
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par (R Y) QQ)
Subgoal 2.4.3.2 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par PP (R Y))
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply QQInv4 to H9.
Subgoal 2.4.3.1:
Variables: Q2 P2 Q1 P1 QQ X Y R P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (dn X) R
H9 : one Q2 (up X Y) QQ
H10 : oneb P1 (dn X) P3
H11 : forall N, inv (P3 N) (R N)
H12 : one Q1 (up X Y) P4
H13 : inv P4 QQ
============================
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par (R Y) QQ)
Subgoal 2.4.3.2 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par PP (R Y))
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness par (P3 Y) P4.
Subgoal 2.4.3.1:
Variables: Q2 P2 Q1 P1 QQ X Y R P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (dn X) R
H9 : one Q2 (up X Y) QQ
H10 : oneb P1 (dn X) P3
H11 : forall N, inv (P3 N) (R N)
H12 : one Q1 (up X Y) P4
H13 : inv P4 QQ
============================
one (par P1 Q1) tau (par (P3 Y) P4) /\ inv (par (P3 Y) P4) (par (R Y) QQ)
Subgoal 2.4.3.2 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par PP (R Y))
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.4.3.1.1:
Variables: Q2 P2 Q1 P1 QQ X Y R P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (dn X) R
H9 : one Q2 (up X Y) QQ
H10 : oneb P1 (dn X) P3
H11 : forall N, inv (P3 N) (R N)
H12 : one Q1 (up X Y) P4
H13 : inv P4 QQ
============================
one (par P1 Q1) tau (par (P3 Y) P4)
Subgoal 2.4.3.1.2 is:
inv (par (P3 Y) P4) (par (R Y) QQ)
Subgoal 2.4.3.2 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par PP (R Y))
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.4.3.1.2:
Variables: Q2 P2 Q1 P1 QQ X Y R P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (dn X) R
H9 : one Q2 (up X Y) QQ
H10 : oneb P1 (dn X) P3
H11 : forall N, inv (P3 N) (R N)
H12 : one Q1 (up X Y) P4
H13 : inv P4 QQ
============================
inv (par (P3 Y) P4) (par (R Y) QQ)
Subgoal 2.4.3.2 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par PP (R Y))
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply H11 with N = Y.
Subgoal 2.4.3.1.2:
Variables: Q2 P2 Q1 P1 QQ X Y R P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (dn X) R
H9 : one Q2 (up X Y) QQ
H10 : oneb P1 (dn X) P3
H11 : forall N, inv (P3 N) (R N)
H12 : one Q1 (up X Y) P4
H13 : inv P4 QQ
H14 : inv (P3 Y) (R Y)
============================
inv (par (P3 Y) P4) (par (R Y) QQ)
Subgoal 2.4.3.2 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par PP (R Y))
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.4.3.2:
Variables: Q2 P2 Q1 P1 PP X Y R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : one P2 (up X Y) PP
H9 : oneb Q2 (dn X) R
============================
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par PP (R Y))
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply PPInv4 to H8.
Subgoal 2.4.3.2:
Variables: Q2 P2 Q1 P1 PP X Y R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : one P2 (up X Y) PP
H9 : oneb Q2 (dn X) R
H10 : one P1 (up X Y) P3
H11 : inv P3 PP
============================
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par PP (R Y))
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply QQInv5 to H9.
Subgoal 2.4.3.2:
Variables: Q2 P2 Q1 P1 PP X Y R P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : one P2 (up X Y) PP
H9 : oneb Q2 (dn X) R
H10 : one P1 (up X Y) P3
H11 : inv P3 PP
H12 : oneb Q1 (dn X) P4
H13 : forall N, inv (P4 N) (R N)
============================
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (par PP (R Y))
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness par P3 (P4 Y).
Subgoal 2.4.3.2:
Variables: Q2 P2 Q1 P1 PP X Y R P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : one P2 (up X Y) PP
H9 : oneb Q2 (dn X) R
H10 : one P1 (up X Y) P3
H11 : inv P3 PP
H12 : oneb Q1 (dn X) P4
H13 : forall N, inv (P4 N) (R N)
============================
one (par P1 Q1) tau (par P3 (P4 Y)) /\ inv (par P3 (P4 Y)) (par PP (R Y))
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.4.3.2.1:
Variables: Q2 P2 Q1 P1 PP X Y R P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : one P2 (up X Y) PP
H9 : oneb Q2 (dn X) R
H10 : one P1 (up X Y) P3
H11 : inv P3 PP
H12 : oneb Q1 (dn X) P4
H13 : forall N, inv (P4 N) (R N)
============================
one (par P1 Q1) tau (par P3 (P4 Y))
Subgoal 2.4.3.2.2 is:
inv (par P3 (P4 Y)) (par PP (R Y))
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.4.3.2.2:
Variables: Q2 P2 Q1 P1 PP X Y R P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : one P2 (up X Y) PP
H9 : oneb Q2 (dn X) R
H10 : one P1 (up X Y) P3
H11 : inv P3 PP
H12 : oneb Q1 (dn X) P4
H13 : forall N, inv (P4 N) (R N)
============================
inv (par P3 (P4 Y)) (par PP (R Y))
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply H13 with N = Y.
Subgoal 2.4.3.2.2:
Variables: Q2 P2 Q1 P1 PP X Y R P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : one P2 (up X Y) PP
H9 : oneb Q2 (dn X) R
H10 : one P1 (up X Y) P3
H11 : inv P3 PP
H12 : oneb Q1 (dn X) P4
H13 : forall N, inv (P4 N) (R N)
H14 : inv (P4 Y) (R Y)
============================
inv (par P3 (P4 Y)) (par PP (R Y))
Subgoal 2.4.4 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.4.4:
Variables: Q2 P2 Q1 P1 QQ PP
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : (exists X, oneb P2 (dn X) PP /\ oneb Q2 (up X) QQ) \/
(exists X, oneb P2 (up X) PP /\ oneb Q2 (dn X) QQ)
============================
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < case H7.
Subgoal 2.4.4.1:
Variables: Q2 P2 Q1 P1 QQ PP X
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (dn X) PP
H9 : oneb Q2 (up X) QQ
============================
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.4.4.2 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply PPInv5 to H8.
Subgoal 2.4.4.1:
Variables: Q2 P2 Q1 P1 QQ PP X P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (dn X) PP
H9 : oneb Q2 (up X) QQ
H10 : oneb P1 (dn X) P3
H11 : forall N, inv (P3 N) (PP N)
============================
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.4.4.2 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply QQInv6 to H9.
Subgoal 2.4.4.1:
Variables: Q2 P2 Q1 P1 QQ PP X P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (dn X) PP
H9 : oneb Q2 (up X) QQ
H10 : oneb P1 (dn X) P3
H11 : forall N, inv (P3 N) (PP N)
H12 : oneb Q1 (up X) P4
H13 : inv (P4 n1) (QQ n1)
============================
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.4.4.2 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness nu (y\par (P3 y) (P4 y)).
Subgoal 2.4.4.1:
Variables: Q2 P2 Q1 P1 QQ PP X P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (dn X) PP
H9 : oneb Q2 (up X) QQ
H10 : oneb P1 (dn X) P3
H11 : forall N, inv (P3 N) (PP N)
H12 : oneb Q1 (up X) P4
H13 : inv (P4 n1) (QQ n1)
============================
one (par P1 Q1) tau (nu (y\par (P3 y) (P4 y))) /\
inv (nu (y\par (P3 y) (P4 y))) (nu (y\par (PP y) (QQ y)))
Subgoal 2.4.4.2 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.4.4.1.1:
Variables: Q2 P2 Q1 P1 QQ PP X P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (dn X) PP
H9 : oneb Q2 (up X) QQ
H10 : oneb P1 (dn X) P3
H11 : forall N, inv (P3 N) (PP N)
H12 : oneb Q1 (up X) P4
H13 : inv (P4 n1) (QQ n1)
============================
one (par P1 Q1) tau (nu (y\par (P3 y) (P4 y)))
Subgoal 2.4.4.1.2 is:
inv (nu (y\par (P3 y) (P4 y))) (nu (y\par (PP y) (QQ y)))
Subgoal 2.4.4.2 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.4.4.1.2:
Variables: Q2 P2 Q1 P1 QQ PP X P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (dn X) PP
H9 : oneb Q2 (up X) QQ
H10 : oneb P1 (dn X) P3
H11 : forall N, inv (P3 N) (PP N)
H12 : oneb Q1 (up X) P4
H13 : inv (P4 n1) (QQ n1)
============================
inv (nu (y\par (P3 y) (P4 y))) (nu (y\par (PP y) (QQ y)))
Subgoal 2.4.4.2 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply H11 with N = n1.
Subgoal 2.4.4.1.2:
Variables: Q2 P2 Q1 P1 QQ PP X P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (dn X) PP
H9 : oneb Q2 (up X) QQ
H10 : oneb P1 (dn X) P3
H11 : forall N, inv (P3 N) (PP N)
H12 : oneb Q1 (up X) P4
H13 : inv (P4 n1) (QQ n1)
H14 : inv (P3 n1) (PP n1)
============================
inv (nu (y\par (P3 y) (P4 y))) (nu (y\par (PP y) (QQ y)))
Subgoal 2.4.4.2 is:
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.4.4.2:
Variables: Q2 P2 Q1 P1 QQ PP X
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (up X) PP
H9 : oneb Q2 (dn X) QQ
============================
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply PPInv6 to H8.
Subgoal 2.4.4.2:
Variables: Q2 P2 Q1 P1 QQ PP X P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (up X) PP
H9 : oneb Q2 (dn X) QQ
H10 : oneb P1 (up X) P3
H11 : inv (P3 n1) (PP n1)
============================
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply QQInv5 to H9.
Subgoal 2.4.4.2:
Variables: Q2 P2 Q1 P1 QQ PP X P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (up X) PP
H9 : oneb Q2 (dn X) QQ
H10 : oneb P1 (up X) P3
H11 : inv (P3 n1) (PP n1)
H12 : oneb Q1 (dn X) P4
H13 : forall N, inv (P4 N) (QQ N)
============================
exists P3, one (par P1 Q1) tau P3 /\ inv P3 (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness nu (y\par (P3 y) (P4 y)).
Subgoal 2.4.4.2:
Variables: Q2 P2 Q1 P1 QQ PP X P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (up X) PP
H9 : oneb Q2 (dn X) QQ
H10 : oneb P1 (up X) P3
H11 : inv (P3 n1) (PP n1)
H12 : oneb Q1 (dn X) P4
H13 : forall N, inv (P4 N) (QQ N)
============================
one (par P1 Q1) tau (nu (y\par (P3 y) (P4 y))) /\
inv (nu (y\par (P3 y) (P4 y))) (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.4.4.2.1:
Variables: Q2 P2 Q1 P1 QQ PP X P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (up X) PP
H9 : oneb Q2 (dn X) QQ
H10 : oneb P1 (up X) P3
H11 : inv (P3 n1) (PP n1)
H12 : oneb Q1 (dn X) P4
H13 : forall N, inv (P4 N) (QQ N)
============================
one (par P1 Q1) tau (nu (y\par (P3 y) (P4 y)))
Subgoal 2.4.4.2.2 is:
inv (nu (y\par (P3 y) (P4 y))) (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.4.4.2.2:
Variables: Q2 P2 Q1 P1 QQ PP X P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (up X) PP
H9 : oneb Q2 (dn X) QQ
H10 : oneb P1 (up X) P3
H11 : inv (P3 n1) (PP n1)
H12 : oneb Q1 (dn X) P4
H13 : forall N, inv (P4 N) (QQ N)
============================
inv (nu (y\par (P3 y) (P4 y))) (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply H13 with N = n1.
Subgoal 2.4.4.2.2:
Variables: Q2 P2 Q1 P1 QQ PP X P3 P4
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H8 : oneb P2 (up X) PP
H9 : oneb Q2 (dn X) QQ
H10 : oneb P1 (up X) P3
H11 : inv (P3 n1) (PP n1)
H12 : oneb Q1 (dn X) P4
H13 : forall N, inv (P4 N) (QQ N)
H14 : inv (P4 n1) (QQ n1)
============================
inv (nu (y\par (P3 y) (P4 y))) (nu (y\par (PP y) (QQ y)))
Subgoal 2.5 is:
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.5:
Variables: Q2 P2 Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
============================
forall X Q3, oneb (par P2 Q2) (dn X) Q3 ->
(exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 2.5:
Variables: Q2 P2 Q1 P1 X Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H6 : oneb (par P2 Q2) (dn X) Q3
============================
exists P3, oneb (par P1 Q1) (dn X) P3 /\ (forall N, inv (P3 N) (Q3 N))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < case H6.
Subgoal 2.5.1:
Variables: Q2 P2 Q1 P1 X R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P2 (dn X) R
============================
exists P3, oneb (par P1 Q1) (dn X) P3 /\
(forall N, inv (P3 N) (par (R N) Q2))
Subgoal 2.5.2 is:
exists P3, oneb (par P1 Q1) (dn X) P3 /\
(forall N, inv (P3 N) (par P2 (R N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply PPInv5 to H7.
Subgoal 2.5.1:
Variables: Q2 P2 Q1 P1 X R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P2 (dn X) R
H8 : oneb P1 (dn X) P3
H9 : forall N, inv (P3 N) (R N)
============================
exists P3, oneb (par P1 Q1) (dn X) P3 /\
(forall N, inv (P3 N) (par (R N) Q2))
Subgoal 2.5.2 is:
exists P3, oneb (par P1 Q1) (dn X) P3 /\
(forall N, inv (P3 N) (par P2 (R N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness y\par (P3 y) Q1.
Subgoal 2.5.1:
Variables: Q2 P2 Q1 P1 X R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P2 (dn X) R
H8 : oneb P1 (dn X) P3
H9 : forall N, inv (P3 N) (R N)
============================
oneb (par P1 Q1) (dn X) (y\par (P3 y) Q1) /\
(forall N, inv (par (P3 N) Q1) (par (R N) Q2))
Subgoal 2.5.2 is:
exists P3, oneb (par P1 Q1) (dn X) P3 /\
(forall N, inv (P3 N) (par P2 (R N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.5.1.1:
Variables: Q2 P2 Q1 P1 X R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P2 (dn X) R
H8 : oneb P1 (dn X) P3
H9 : forall N, inv (P3 N) (R N)
============================
oneb (par P1 Q1) (dn X) (y\par (P3 y) Q1)
Subgoal 2.5.1.2 is:
forall N, inv (par (P3 N) Q1) (par (R N) Q2)
Subgoal 2.5.2 is:
exists P3, oneb (par P1 Q1) (dn X) P3 /\
(forall N, inv (P3 N) (par P2 (R N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.5.1.2:
Variables: Q2 P2 Q1 P1 X R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P2 (dn X) R
H8 : oneb P1 (dn X) P3
H9 : forall N, inv (P3 N) (R N)
============================
forall N, inv (par (P3 N) Q1) (par (R N) Q2)
Subgoal 2.5.2 is:
exists P3, oneb (par P1 Q1) (dn X) P3 /\
(forall N, inv (P3 N) (par P2 (R N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 2.5.1.2:
Variables: Q2 P2 Q1 P1 X R P3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P2 (dn X) R
H8 : oneb P1 (dn X) P3
H9 : forall N, inv (P3 N) (R N)
============================
inv (par (P3 N) Q1) (par (R N) Q2)
Subgoal 2.5.2 is:
exists P3, oneb (par P1 Q1) (dn X) P3 /\
(forall N, inv (P3 N) (par P2 (R N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply H9 with N = N.
Subgoal 2.5.1.2:
Variables: Q2 P2 Q1 P1 X R P3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P2 (dn X) R
H8 : oneb P1 (dn X) P3
H9 : forall N, inv (P3 N) (R N)
H10 : inv (P3 N) (R N)
============================
inv (par (P3 N) Q1) (par (R N) Q2)
Subgoal 2.5.2 is:
exists P3, oneb (par P1 Q1) (dn X) P3 /\
(forall N, inv (P3 N) (par P2 (R N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.5.2:
Variables: Q2 P2 Q1 P1 X R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q2 (dn X) R
============================
exists P3, oneb (par P1 Q1) (dn X) P3 /\
(forall N, inv (P3 N) (par P2 (R N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply QQInv5 to H7.
Subgoal 2.5.2:
Variables: Q2 P2 Q1 P1 X R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q2 (dn X) R
H8 : oneb Q1 (dn X) P3
H9 : forall N, inv (P3 N) (R N)
============================
exists P3, oneb (par P1 Q1) (dn X) P3 /\
(forall N, inv (P3 N) (par P2 (R N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness y\par P1 (P3 y).
Subgoal 2.5.2:
Variables: Q2 P2 Q1 P1 X R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q2 (dn X) R
H8 : oneb Q1 (dn X) P3
H9 : forall N, inv (P3 N) (R N)
============================
oneb (par P1 Q1) (dn X) (y\par P1 (P3 y)) /\
(forall N, inv (par P1 (P3 N)) (par P2 (R N)))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.5.2.1:
Variables: Q2 P2 Q1 P1 X R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q2 (dn X) R
H8 : oneb Q1 (dn X) P3
H9 : forall N, inv (P3 N) (R N)
============================
oneb (par P1 Q1) (dn X) (y\par P1 (P3 y))
Subgoal 2.5.2.2 is:
forall N, inv (par P1 (P3 N)) (par P2 (R N))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.5.2.2:
Variables: Q2 P2 Q1 P1 X R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q2 (dn X) R
H8 : oneb Q1 (dn X) P3
H9 : forall N, inv (P3 N) (R N)
============================
forall N, inv (par P1 (P3 N)) (par P2 (R N))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 2.5.2.2:
Variables: Q2 P2 Q1 P1 X R P3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q2 (dn X) R
H8 : oneb Q1 (dn X) P3
H9 : forall N, inv (P3 N) (R N)
============================
inv (par P1 (P3 N)) (par P2 (R N))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply H9 with N = N.
Subgoal 2.5.2.2:
Variables: Q2 P2 Q1 P1 X R P3 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q2 (dn X) R
H8 : oneb Q1 (dn X) P3
H9 : forall N, inv (P3 N) (R N)
H10 : inv (P3 N) (R N)
============================
inv (par P1 (P3 N)) (par P2 (R N))
Subgoal 2.6 is:
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.6:
Variables: Q2 P2 Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
============================
forall X Q3, oneb (par P2 Q2) (up X) Q3 ->
(exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < intros.
Subgoal 2.6:
Variables: Q2 P2 Q1 P1 X Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H6 : oneb (par P2 Q2) (up X) Q3
============================
exists P3, oneb (par P1 Q1) (up X) P3 /\ (nabla x, inv (P3 x) (Q3 x))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < case H6.
Subgoal 2.6.1:
Variables: Q2 P2 Q1 P1 X R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P2 (up X) R
============================
exists P3, oneb (par P1 Q1) (up X) P3 /\
(nabla x, inv (P3 x) (par (R x) Q2))
Subgoal 2.6.2 is:
exists P3, oneb (par P1 Q1) (up X) P3 /\
(nabla x, inv (P3 x) (par P2 (R x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply PPInv6 to H7.
Subgoal 2.6.1:
Variables: Q2 P2 Q1 P1 X R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P2 (up X) R
H8 : oneb P1 (up X) P3
H9 : inv (P3 n1) (R n1)
============================
exists P3, oneb (par P1 Q1) (up X) P3 /\
(nabla x, inv (P3 x) (par (R x) Q2))
Subgoal 2.6.2 is:
exists P3, oneb (par P1 Q1) (up X) P3 /\
(nabla x, inv (P3 x) (par P2 (R x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness y\par (P3 y) Q1.
Subgoal 2.6.1:
Variables: Q2 P2 Q1 P1 X R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P2 (up X) R
H8 : oneb P1 (up X) P3
H9 : inv (P3 n1) (R n1)
============================
oneb (par P1 Q1) (up X) (y\par (P3 y) Q1) /\
(nabla x, inv (par (P3 x) Q1) (par (R x) Q2))
Subgoal 2.6.2 is:
exists P3, oneb (par P1 Q1) (up X) P3 /\
(nabla x, inv (P3 x) (par P2 (R x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.6.1.1:
Variables: Q2 P2 Q1 P1 X R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P2 (up X) R
H8 : oneb P1 (up X) P3
H9 : inv (P3 n1) (R n1)
============================
oneb (par P1 Q1) (up X) (y\par (P3 y) Q1)
Subgoal 2.6.1.2 is:
nabla x, inv (par (P3 x) Q1) (par (R x) Q2)
Subgoal 2.6.2 is:
exists P3, oneb (par P1 Q1) (up X) P3 /\
(nabla x, inv (P3 x) (par P2 (R x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.6.1.2:
Variables: Q2 P2 Q1 P1 X R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb P2 (up X) R
H8 : oneb P1 (up X) P3
H9 : inv (P3 n1) (R n1)
============================
nabla x, inv (par (P3 x) Q1) (par (R x) Q2)
Subgoal 2.6.2 is:
exists P3, oneb (par P1 Q1) (up X) P3 /\
(nabla x, inv (P3 x) (par P2 (R x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.6.2:
Variables: Q2 P2 Q1 P1 X R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q2 (up X) R
============================
exists P3, oneb (par P1 Q1) (up X) P3 /\
(nabla x, inv (P3 x) (par P2 (R x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply QQInv6 to H7.
Subgoal 2.6.2:
Variables: Q2 P2 Q1 P1 X R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q2 (up X) R
H8 : oneb Q1 (up X) P3
H9 : inv (P3 n1) (R n1)
============================
exists P3, oneb (par P1 Q1) (up X) P3 /\
(nabla x, inv (P3 x) (par P2 (R x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < witness y\par P1 (P3 y).
Subgoal 2.6.2:
Variables: Q2 P2 Q1 P1 X R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q2 (up X) R
H8 : oneb Q1 (up X) P3
H9 : inv (P3 n1) (R n1)
============================
oneb (par P1 Q1) (up X) (y\par P1 (P3 y)) /\
(nabla x, inv (par P1 (P3 x)) (par P2 (R x)))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < split.
Subgoal 2.6.2.1:
Variables: Q2 P2 Q1 P1 X R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q2 (up X) R
H8 : oneb Q1 (up X) P3
H9 : inv (P3 n1) (R n1)
============================
oneb (par P1 Q1) (up X) (y\par P1 (P3 y))
Subgoal 2.6.2.2 is:
nabla x, inv (par P1 (P3 x)) (par P2 (R x))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 2.6.2.2:
Variables: Q2 P2 Q1 P1 X R P3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv P1 P2 *
H3 : inv Q1 Q2 *
PPInv1 : forall L P3, one P1 L P3 -> (exists Q1, one P2 L Q1 /\ inv P3 Q1)
PPInv2 : forall X P3, oneb P1 (dn X) P3 ->
(exists Q1, oneb P2 (dn X) Q1 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv3 : forall X P3, oneb P1 (up X) P3 ->
(exists Q1, oneb P2 (up X) Q1 /\ (nabla x, inv (P3 x) (Q1 x)))
PPInv4 : forall L Q1, one P2 L Q1 -> (exists P3, one P1 L P3 /\ inv P3 Q1)
PPInv5 : forall X Q1, oneb P2 (dn X) Q1 ->
(exists P3, oneb P1 (dn X) P3 /\ (forall N, inv (P3 N) (Q1 N)))
PPInv6 : forall X Q1, oneb P2 (up X) Q1 ->
(exists P3, oneb P1 (up X) P3 /\ (nabla x, inv (P3 x) (Q1 x)))
QQInv1 : forall L P1, one Q1 L P1 -> (exists Q3, one Q2 L Q3 /\ inv P1 Q3)
QQInv2 : forall X P1, oneb Q1 (dn X) P1 ->
(exists Q3, oneb Q2 (dn X) Q3 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv3 : forall X P1, oneb Q1 (up X) P1 ->
(exists Q3, oneb Q2 (up X) Q3 /\ (nabla x, inv (P1 x) (Q3 x)))
QQInv4 : forall L Q3, one Q2 L Q3 -> (exists P1, one Q1 L P1 /\ inv P1 Q3)
QQInv5 : forall X Q3, oneb Q2 (dn X) Q3 ->
(exists P1, oneb Q1 (dn X) P1 /\ (forall N, inv (P1 N) (Q3 N)))
QQInv6 : forall X Q3, oneb Q2 (up X) Q3 ->
(exists P1, oneb Q1 (up X) P1 /\ (nabla x, inv (P1 x) (Q3 x)))
H7 : oneb Q2 (up X) R
H8 : oneb Q1 (up X) P3
H9 : inv (P3 n1) (R n1)
============================
nabla x, inv (par P1 (P3 x)) (par P2 (R x))
Subgoal 3 is:
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < search.
Subgoal 3:
Variables: Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
============================
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < apply IH to H2.
Subgoal 3:
Variables: Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
H3 : bisim_inv (P1 n1) (Q1 n1)
============================
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < Inv1 : case H3.
Subgoal 3:
Variables: Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
============================
bisim_inv (nu P1) (nu Q1)
inv_bisim_inv < unfold.
Subgoal 3.1:
Variables: Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
============================
forall L P2, one (nu P1) L P2 -> (exists Q2, one (nu Q1) L Q2 /\ inv P2 Q2)
Subgoal 3.2 is:
forall X P2, oneb (nu P1) (dn X) P2 ->
(exists Q2, oneb (nu Q1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.3 is:
forall X P2, oneb (nu P1) (up X) P2 ->
(exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < intros.
Subgoal 3.1:
Variables: Q1 P1 L P2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H4 : one (nu P1) L P2
============================
exists Q2, one (nu Q1) L Q2 /\ inv P2 Q2
Subgoal 3.2 is:
forall X P2, oneb (nu P1) (dn X) P2 ->
(exists Q2, oneb (nu Q1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.3 is:
forall X P2, oneb (nu P1) (up X) P2 ->
(exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < case H4.
Subgoal 3.1:
Variables: Q1 P1 L Q2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : one (P1 n1) L (Q2 n1)
============================
exists Q3, one (nu Q1) L Q3 /\ inv (nu Q2) Q3
Subgoal 3.2 is:
forall X P2, oneb (nu P1) (dn X) P2 ->
(exists Q2, oneb (nu Q1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.3 is:
forall X P2, oneb (nu P1) (up X) P2 ->
(exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < apply Inv1 to H5.
Subgoal 3.1:
Variables: Q1 P1 L Q2 Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : one (P1 n1) L (Q2 n1)
H6 : one (Q1 n1) L (Q3 n1)
H7 : inv (Q2 n1) (Q3 n1)
============================
exists Q3, one (nu Q1) L Q3 /\ inv (nu Q2) Q3
Subgoal 3.2 is:
forall X P2, oneb (nu P1) (dn X) P2 ->
(exists Q2, oneb (nu Q1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.3 is:
forall X P2, oneb (nu P1) (up X) P2 ->
(exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < search.
Subgoal 3.2:
Variables: Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
============================
forall X P2, oneb (nu P1) (dn X) P2 ->
(exists Q2, oneb (nu Q1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.3 is:
forall X P2, oneb (nu P1) (up X) P2 ->
(exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < intros.
Subgoal 3.2:
Variables: Q1 P1 X P2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H4 : oneb (nu P1) (dn X) P2
============================
exists Q2, oneb (nu Q1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N))
Subgoal 3.3 is:
forall X P2, oneb (nu P1) (up X) P2 ->
(exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < case H4.
Subgoal 3.2:
Variables: Q1 P1 X R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (P1 n1) (dn X) (R n1)
============================
exists Q2, oneb (nu Q1) (dn X) Q2 /\ (forall N, inv (nu (x\R x N)) (Q2 N))
Subgoal 3.3 is:
forall X P2, oneb (nu P1) (up X) P2 ->
(exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < apply Inv2 to H5.
Subgoal 3.2:
Variables: Q1 P1 X R Q2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (P1 n1) (dn X) (R n1)
H6 : oneb (Q1 n1) (dn X) (Q2 n1)
H7 : forall N, inv (R n1 N) (Q2 n1 N)
============================
exists Q2, oneb (nu Q1) (dn X) Q2 /\ (forall N, inv (nu (x\R x N)) (Q2 N))
Subgoal 3.3 is:
forall X P2, oneb (nu P1) (up X) P2 ->
(exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < witness y\nu (x\Q2 x y).
Subgoal 3.2:
Variables: Q1 P1 X R Q2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (P1 n1) (dn X) (R n1)
H6 : oneb (Q1 n1) (dn X) (Q2 n1)
H7 : forall N, inv (R n1 N) (Q2 n1 N)
============================
oneb (nu Q1) (dn X) (y\nu (x\Q2 x y)) /\
(forall N, inv (nu (x\R x N)) (nu (x\Q2 x N)))
Subgoal 3.3 is:
forall X P2, oneb (nu P1) (up X) P2 ->
(exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < split.
Subgoal 3.2.1:
Variables: Q1 P1 X R Q2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (P1 n1) (dn X) (R n1)
H6 : oneb (Q1 n1) (dn X) (Q2 n1)
H7 : forall N, inv (R n1 N) (Q2 n1 N)
============================
oneb (nu Q1) (dn X) (y\nu (x\Q2 x y))
Subgoal 3.2.2 is:
forall N, inv (nu (x\R x N)) (nu (x\Q2 x N))
Subgoal 3.3 is:
forall X P2, oneb (nu P1) (up X) P2 ->
(exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < search.
Subgoal 3.2.2:
Variables: Q1 P1 X R Q2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (P1 n1) (dn X) (R n1)
H6 : oneb (Q1 n1) (dn X) (Q2 n1)
H7 : forall N, inv (R n1 N) (Q2 n1 N)
============================
forall N, inv (nu (x\R x N)) (nu (x\Q2 x N))
Subgoal 3.3 is:
forall X P2, oneb (nu P1) (up X) P2 ->
(exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < intros.
Subgoal 3.2.2:
Variables: Q1 P1 X R Q2 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (P1 n1) (dn X) (R n1)
H6 : oneb (Q1 n1) (dn X) (Q2 n1)
H7 : forall N, inv (R n1 N) (Q2 n1 N)
============================
inv (nu (x\R x N)) (nu (x\Q2 x N))
Subgoal 3.3 is:
forall X P2, oneb (nu P1) (up X) P2 ->
(exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < apply H7 with N = N.
Subgoal 3.2.2:
Variables: Q1 P1 X R Q2 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (P1 n1) (dn X) (R n1)
H6 : oneb (Q1 n1) (dn X) (Q2 n1)
H7 : forall N, inv (R n1 N) (Q2 n1 N)
H8 : inv (R n1 N) (Q2 n1 N)
============================
inv (nu (x\R x N)) (nu (x\Q2 x N))
Subgoal 3.3 is:
forall X P2, oneb (nu P1) (up X) P2 ->
(exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < search.
Subgoal 3.3:
Variables: Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
============================
forall X P2, oneb (nu P1) (up X) P2 ->
(exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < intros.
Subgoal 3.3:
Variables: Q1 P1 X P2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H4 : oneb (nu P1) (up X) P2
============================
exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < case H4.
Subgoal 3.3.1:
Variables: Q1 P1 X P2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : one (P1 n1) (up X n1) (P2 n1)
============================
exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x))
Subgoal 3.3.2 is:
exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (nu (x\R x x)) (Q2 x))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < apply Inv1 to H5.
Subgoal 3.3.1:
Variables: Q1 P1 X P2 Q2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : one (P1 n1) (up X n1) (P2 n1)
H6 : one (Q1 n1) (up X n1) (Q2 n1)
H7 : inv (P2 n1) (Q2 n1)
============================
exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x))
Subgoal 3.3.2 is:
exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (nu (x\R x x)) (Q2 x))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < witness Q2.
Subgoal 3.3.1:
Variables: Q1 P1 X P2 Q2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : one (P1 n1) (up X n1) (P2 n1)
H6 : one (Q1 n1) (up X n1) (Q2 n1)
H7 : inv (P2 n1) (Q2 n1)
============================
oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x))
Subgoal 3.3.2 is:
exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (nu (x\R x x)) (Q2 x))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < search.
Subgoal 3.3.2:
Variables: Q1 P1 X R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (P1 n1) (up X) (R n1)
============================
exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (nu (x\R x x)) (Q2 x))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < apply Inv3 to H5.
Subgoal 3.3.2:
Variables: Q1 P1 X R Q2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (P1 n1) (up X) (R n1)
H6 : oneb (Q1 n1) (up X) (Q2 n1)
H7 : inv (R n1 n2) (Q2 n1 n2)
============================
exists Q2, oneb (nu Q1) (up X) Q2 /\ (nabla x, inv (nu (x\R x x)) (Q2 x))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < witness y\nu (x\Q2 x y).
Subgoal 3.3.2:
Variables: Q1 P1 X R Q2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (P1 n1) (up X) (R n1)
H6 : oneb (Q1 n1) (up X) (Q2 n1)
H7 : inv (R n1 n2) (Q2 n1 n2)
============================
oneb (nu Q1) (up X) (y\nu (x\Q2 x y)) /\
(nabla x, inv (nu (x\R x x)) (nu (x\Q2 x x)))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < split.
Subgoal 3.3.2.1:
Variables: Q1 P1 X R Q2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (P1 n1) (up X) (R n1)
H6 : oneb (Q1 n1) (up X) (Q2 n1)
H7 : inv (R n1 n2) (Q2 n1 n2)
============================
oneb (nu Q1) (up X) (y\nu (x\Q2 x y))
Subgoal 3.3.2.2 is:
nabla x, inv (nu (x\R x x)) (nu (x\Q2 x x))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < search.
Subgoal 3.3.2.2:
Variables: Q1 P1 X R Q2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (P1 n1) (up X) (R n1)
H6 : oneb (Q1 n1) (up X) (Q2 n1)
H7 : inv (R n1 n2) (Q2 n1 n2)
============================
nabla x, inv (nu (x\R x x)) (nu (x\Q2 x x))
Subgoal 3.4 is:
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < search.
Subgoal 3.4:
Variables: Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
============================
forall L Q2, one (nu Q1) L Q2 -> (exists P2, one (nu P1) L P2 /\ inv P2 Q2)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < intros.
Subgoal 3.4:
Variables: Q1 P1 L Q2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H4 : one (nu Q1) L Q2
============================
exists P2, one (nu P1) L P2 /\ inv P2 Q2
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < case H4.
Subgoal 3.4:
Variables: Q1 P1 L Q3
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : one (Q1 n1) L (Q3 n1)
============================
exists P2, one (nu P1) L P2 /\ inv P2 (nu Q3)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < apply Inv4 to H5.
Subgoal 3.4:
Variables: Q1 P1 L Q3 P2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : one (Q1 n1) L (Q3 n1)
H6 : one (P1 n1) L (P2 n1)
H7 : inv (P2 n1) (Q3 n1)
============================
exists P2, one (nu P1) L P2 /\ inv P2 (nu Q3)
Subgoal 3.5 is:
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < search.
Subgoal 3.5:
Variables: Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
============================
forall X Q2, oneb (nu Q1) (dn X) Q2 ->
(exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < intros.
Subgoal 3.5:
Variables: Q1 P1 X Q2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H4 : oneb (nu Q1) (dn X) Q2
============================
exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < case H4.
Subgoal 3.5:
Variables: Q1 P1 X R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (Q1 n1) (dn X) (R n1)
============================
exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (nu (x\R x N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < apply Inv5 to H5.
Subgoal 3.5:
Variables: Q1 P1 X R P2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (Q1 n1) (dn X) (R n1)
H6 : oneb (P1 n1) (dn X) (P2 n1)
H7 : forall N, inv (P2 n1 N) (R n1 N)
============================
exists P2, oneb (nu P1) (dn X) P2 /\ (forall N, inv (P2 N) (nu (x\R x N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < witness y\nu (x\P2 x y).
Subgoal 3.5:
Variables: Q1 P1 X R P2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (Q1 n1) (dn X) (R n1)
H6 : oneb (P1 n1) (dn X) (P2 n1)
H7 : forall N, inv (P2 n1 N) (R n1 N)
============================
oneb (nu P1) (dn X) (y\nu (x\P2 x y)) /\
(forall N, inv (nu (x\P2 x N)) (nu (x\R x N)))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < split.
Subgoal 3.5.1:
Variables: Q1 P1 X R P2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (Q1 n1) (dn X) (R n1)
H6 : oneb (P1 n1) (dn X) (P2 n1)
H7 : forall N, inv (P2 n1 N) (R n1 N)
============================
oneb (nu P1) (dn X) (y\nu (x\P2 x y))
Subgoal 3.5.2 is:
forall N, inv (nu (x\P2 x N)) (nu (x\R x N))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < search.
Subgoal 3.5.2:
Variables: Q1 P1 X R P2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (Q1 n1) (dn X) (R n1)
H6 : oneb (P1 n1) (dn X) (P2 n1)
H7 : forall N, inv (P2 n1 N) (R n1 N)
============================
forall N, inv (nu (x\P2 x N)) (nu (x\R x N))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < intros.
Subgoal 3.5.2:
Variables: Q1 P1 X R P2 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (Q1 n1) (dn X) (R n1)
H6 : oneb (P1 n1) (dn X) (P2 n1)
H7 : forall N, inv (P2 n1 N) (R n1 N)
============================
inv (nu (x\P2 x N)) (nu (x\R x N))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < apply H7 with N = N.
Subgoal 3.5.2:
Variables: Q1 P1 X R P2 N
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (Q1 n1) (dn X) (R n1)
H6 : oneb (P1 n1) (dn X) (P2 n1)
H7 : forall N, inv (P2 n1 N) (R n1 N)
H8 : inv (P2 n1 N) (R n1 N)
============================
inv (nu (x\P2 x N)) (nu (x\R x N))
Subgoal 3.6 is:
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < search.
Subgoal 3.6:
Variables: Q1 P1
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
============================
forall X Q2, oneb (nu Q1) (up X) Q2 ->
(exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
inv_bisim_inv < intros.
Subgoal 3.6:
Variables: Q1 P1 X Q2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H4 : oneb (nu Q1) (up X) Q2
============================
exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x))
inv_bisim_inv < case H4.
Subgoal 3.6.1:
Variables: Q1 P1 X Q2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : one (Q1 n1) (up X n1) (Q2 n1)
============================
exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x))
Subgoal 3.6.2 is:
exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (nu (x\R x x)))
inv_bisim_inv < apply Inv4 to H5.
Subgoal 3.6.1:
Variables: Q1 P1 X Q2 P2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : one (Q1 n1) (up X n1) (Q2 n1)
H6 : one (P1 n1) (up X n1) (P2 n1)
H7 : inv (P2 n1) (Q2 n1)
============================
exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x))
Subgoal 3.6.2 is:
exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (nu (x\R x x)))
inv_bisim_inv < witness P2.
Subgoal 3.6.1:
Variables: Q1 P1 X Q2 P2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : one (Q1 n1) (up X n1) (Q2 n1)
H6 : one (P1 n1) (up X n1) (P2 n1)
H7 : inv (P2 n1) (Q2 n1)
============================
oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x))
Subgoal 3.6.2 is:
exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (nu (x\R x x)))
inv_bisim_inv < search.
Subgoal 3.6.2:
Variables: Q1 P1 X R
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (Q1 n1) (up X) (R n1)
============================
exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (nu (x\R x x)))
inv_bisim_inv < apply Inv6 to H5.
Subgoal 3.6.2:
Variables: Q1 P1 X R P2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (Q1 n1) (up X) (R n1)
H6 : oneb (P1 n1) (up X) (P2 n1)
H7 : inv (P2 n1 n2) (R n1 n2)
============================
exists P2, oneb (nu P1) (up X) P2 /\ (nabla x, inv (P2 x) (nu (x\R x x)))
inv_bisim_inv < witness y\nu (x\P2 x y).
Subgoal 3.6.2:
Variables: Q1 P1 X R P2
IH : forall P Q, inv P Q * -> bisim_inv P Q
H2 : inv (P1 n1) (Q1 n1) *
Inv1 : forall L P2, one (P1 n1) L P2 ->
(exists Q2, one (Q1 n1) L Q2 /\ inv P2 Q2)
Inv2 : forall X P2, oneb (P1 n1) (dn X) P2 ->
(exists Q2, oneb (Q1 n1) (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv3 : forall X P2, oneb (P1 n1) (up X) P2 ->
(exists Q2, oneb (Q1 n1) (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
Inv4 : forall L Q2, one (Q1 n1) L Q2 ->
(exists P2, one (P1 n1) L P2 /\ inv P2 Q2)
Inv5 : forall X Q2, oneb (Q1 n1) (dn X) Q2 ->
(exists P2, oneb (P1 n1) (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
Inv6 : forall X Q2, oneb (Q1 n1) (up X) Q2 ->
(exists P2, oneb (P1 n1) (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H5 : oneb (Q1 n1) (up X) (R n1)
H6 : oneb (P1 n1) (up X) (P2 n1)
H7 : inv (P2 n1 n2) (R n1 n2)
============================
oneb (nu P1) (up X) (y\nu (x\P2 x y)) /\
(nabla x, inv (nu (x\P2 x x)) (nu (x\R x x)))
inv_bisim_inv < search.
Proof completed.
Abella < Theorem bisim_inv_bisim :
forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q.
============================
forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q
bisim_inv_bisim < coinduction.
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
============================
forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q #
bisim_inv_bisim < intros.
Variables: P Q
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
H1 : bisim_inv P Q
============================
bisim_up_to refl_t P Q #
bisim_inv_bisim < BInv1 : case H1.
Variables: P Q
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
============================
bisim_up_to refl_t P Q #
bisim_inv_bisim < unfold.
Subgoal 1:
Variables: P Q
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
============================
forall L P1, one P L P1 ->
(exists Q1, one Q L Q1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 2 is:
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < intros.
Subgoal 1:
Variables: P Q L P1
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one P L P1
============================
exists Q1, one Q L Q1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +)
Subgoal 2 is:
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < apply BInv1 to H2.
Subgoal 1:
Variables: P Q L P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one P L P1
H3 : one Q L Q2
H4 : inv P1 Q2
============================
exists Q1, one Q L Q1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +)
Subgoal 2 is:
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < witness Q2.
Subgoal 1:
Variables: P Q L P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one P L P1
H3 : one Q L Q2
H4 : inv P1 Q2
============================
one Q L Q2 /\
(exists P2 Q1, refl_t P1 P2 Q2 Q1 /\ bisim_up_to refl_t P2 Q1 +)
Subgoal 2 is:
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < split.
Subgoal 1.1:
Variables: P Q L P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one P L P1
H3 : one Q L Q2
H4 : inv P1 Q2
============================
one Q L Q2
Subgoal 1.2 is:
exists P2 Q1, refl_t P1 P2 Q2 Q1 /\ bisim_up_to refl_t P2 Q1 +
Subgoal 2 is:
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < search.
Subgoal 1.2:
Variables: P Q L P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one P L P1
H3 : one Q L Q2
H4 : inv P1 Q2
============================
exists P2 Q1, refl_t P1 P2 Q2 Q1 /\ bisim_up_to refl_t P2 Q1 +
Subgoal 2 is:
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < witness P1.
Subgoal 1.2:
Variables: P Q L P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one P L P1
H3 : one Q L Q2
H4 : inv P1 Q2
============================
exists Q1, refl_t P1 P1 Q2 Q1 /\ bisim_up_to refl_t P1 Q1 +
Subgoal 2 is:
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < witness Q2.
Subgoal 1.2:
Variables: P Q L P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one P L P1
H3 : one Q L Q2
H4 : inv P1 Q2
============================
refl_t P1 P1 Q2 Q2 /\ bisim_up_to refl_t P1 Q2 +
Subgoal 2 is:
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < split.
Subgoal 1.2.1:
Variables: P Q L P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one P L P1
H3 : one Q L Q2
H4 : inv P1 Q2
============================
refl_t P1 P1 Q2 Q2
Subgoal 1.2.2 is:
bisim_up_to refl_t P1 Q2 +
Subgoal 2 is:
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < search.
Subgoal 1.2.2:
Variables: P Q L P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one P L P1
H3 : one Q L Q2
H4 : inv P1 Q2
============================
bisim_up_to refl_t P1 Q2 +
Subgoal 2 is:
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < backchain CH.
Subgoal 1.2.2:
Variables: P Q L P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one P L P1
H3 : one Q L Q2
H4 : inv P1 Q2
============================
bisim_inv P1 Q2
Subgoal 2 is:
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < backchain inv_bisim_inv.
Subgoal 2:
Variables: P Q
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
============================
forall X P1, oneb P (dn X) P1 ->
(exists Q1, oneb Q (dn X) Q1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < intros.
Subgoal 2:
Variables: P Q X P1
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (dn X) P1
============================
exists Q1, oneb Q (dn X) Q1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +)
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < apply BInv2 to H2.
Subgoal 2:
Variables: P Q X P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (dn X) P1
H3 : oneb Q (dn X) Q2
H4 : forall N, inv (P1 N) (Q2 N)
============================
exists Q1, oneb Q (dn X) Q1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +)
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < witness Q2.
Subgoal 2:
Variables: P Q X P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (dn X) P1
H3 : oneb Q (dn X) Q2
H4 : forall N, inv (P1 N) (Q2 N)
============================
oneb Q (dn X) Q2 /\
(exists P2 Q1, forall N, refl_t (P1 N) (P2 N) (Q2 N) (Q1 N) /\
bisim_up_to refl_t (P2 N) (Q1 N) +)
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < split.
Subgoal 2.1:
Variables: P Q X P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (dn X) P1
H3 : oneb Q (dn X) Q2
H4 : forall N, inv (P1 N) (Q2 N)
============================
oneb Q (dn X) Q2
Subgoal 2.2 is:
exists P2 Q1, forall N, refl_t (P1 N) (P2 N) (Q2 N) (Q1 N) /\
bisim_up_to refl_t (P2 N) (Q1 N) +
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < search.
Subgoal 2.2:
Variables: P Q X P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (dn X) P1
H3 : oneb Q (dn X) Q2
H4 : forall N, inv (P1 N) (Q2 N)
============================
exists P2 Q1, forall N, refl_t (P1 N) (P2 N) (Q2 N) (Q1 N) /\
bisim_up_to refl_t (P2 N) (Q1 N) +
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < witness P1.
Subgoal 2.2:
Variables: P Q X P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (dn X) P1
H3 : oneb Q (dn X) Q2
H4 : forall N, inv (P1 N) (Q2 N)
============================
exists Q1, forall N, refl_t (P1 N) (P1 N) (Q2 N) (Q1 N) /\
bisim_up_to refl_t (P1 N) (Q1 N) +
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < witness Q2.
Subgoal 2.2:
Variables: P Q X P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (dn X) P1
H3 : oneb Q (dn X) Q2
H4 : forall N, inv (P1 N) (Q2 N)
============================
forall N, refl_t (P1 N) (P1 N) (Q2 N) (Q2 N) /\
bisim_up_to refl_t (P1 N) (Q2 N) +
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < intros.
Subgoal 2.2:
Variables: P Q X P1 Q2 N
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (dn X) P1
H3 : oneb Q (dn X) Q2
H4 : forall N, inv (P1 N) (Q2 N)
============================
refl_t (P1 N) (P1 N) (Q2 N) (Q2 N) /\ bisim_up_to refl_t (P1 N) (Q2 N) +
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < split.
Subgoal 2.2.1:
Variables: P Q X P1 Q2 N
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (dn X) P1
H3 : oneb Q (dn X) Q2
H4 : forall N, inv (P1 N) (Q2 N)
============================
refl_t (P1 N) (P1 N) (Q2 N) (Q2 N)
Subgoal 2.2.2 is:
bisim_up_to refl_t (P1 N) (Q2 N) +
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < search.
Subgoal 2.2.2:
Variables: P Q X P1 Q2 N
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (dn X) P1
H3 : oneb Q (dn X) Q2
H4 : forall N, inv (P1 N) (Q2 N)
============================
bisim_up_to refl_t (P1 N) (Q2 N) +
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < backchain CH.
Subgoal 2.2.2:
Variables: P Q X P1 Q2 N
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (dn X) P1
H3 : oneb Q (dn X) Q2
H4 : forall N, inv (P1 N) (Q2 N)
============================
bisim_inv (P1 N) (Q2 N)
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < backchain inv_bisim_inv.
Subgoal 2.2.2:
Variables: P Q X P1 Q2 N
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (dn X) P1
H3 : oneb Q (dn X) Q2
H4 : forall N, inv (P1 N) (Q2 N)
============================
inv (P1 N) (Q2 N)
Subgoal 3 is:
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < backchain H4.
Subgoal 3:
Variables: P Q
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
============================
forall X P1, oneb P (up X) P1 ->
(exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < intros.
Subgoal 3:
Variables: P Q X P1
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (up X) P1
============================
exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +)
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < apply BInv3 to H2.
Subgoal 3:
Variables: P Q X P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (up X) P1
H3 : oneb Q (up X) Q2
H4 : inv (P1 n1) (Q2 n1)
============================
exists Q1, oneb Q (up X) Q1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +)
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < witness Q2.
Subgoal 3:
Variables: P Q X P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (up X) P1
H3 : oneb Q (up X) Q2
H4 : inv (P1 n1) (Q2 n1)
============================
oneb Q (up X) Q2 /\
(exists P2 Q1, nabla x, refl_t (P1 x) (P2 x) (Q2 x) (Q1 x) /\
bisim_up_to refl_t (P2 x) (Q1 x) +)
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < split.
Subgoal 3.1:
Variables: P Q X P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (up X) P1
H3 : oneb Q (up X) Q2
H4 : inv (P1 n1) (Q2 n1)
============================
oneb Q (up X) Q2
Subgoal 3.2 is:
exists P2 Q1, nabla x, refl_t (P1 x) (P2 x) (Q2 x) (Q1 x) /\
bisim_up_to refl_t (P2 x) (Q1 x) +
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < search.
Subgoal 3.2:
Variables: P Q X P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (up X) P1
H3 : oneb Q (up X) Q2
H4 : inv (P1 n1) (Q2 n1)
============================
exists P2 Q1, nabla x, refl_t (P1 x) (P2 x) (Q2 x) (Q1 x) /\
bisim_up_to refl_t (P2 x) (Q1 x) +
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < witness P1.
Subgoal 3.2:
Variables: P Q X P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (up X) P1
H3 : oneb Q (up X) Q2
H4 : inv (P1 n1) (Q2 n1)
============================
exists Q1, nabla x, refl_t (P1 x) (P1 x) (Q2 x) (Q1 x) /\
bisim_up_to refl_t (P1 x) (Q1 x) +
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < witness Q2.
Subgoal 3.2:
Variables: P Q X P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (up X) P1
H3 : oneb Q (up X) Q2
H4 : inv (P1 n1) (Q2 n1)
============================
nabla x, refl_t (P1 x) (P1 x) (Q2 x) (Q2 x) /\
bisim_up_to refl_t (P1 x) (Q2 x) +
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < intros.
Subgoal 3.2:
Variables: P Q X P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (up X) P1
H3 : oneb Q (up X) Q2
H4 : inv (P1 n1) (Q2 n1)
============================
refl_t (P1 n1) (P1 n1) (Q2 n1) (Q2 n1) /\
bisim_up_to refl_t (P1 n1) (Q2 n1) +
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < split.
Subgoal 3.2.1:
Variables: P Q X P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (up X) P1
H3 : oneb Q (up X) Q2
H4 : inv (P1 n1) (Q2 n1)
============================
refl_t (P1 n1) (P1 n1) (Q2 n1) (Q2 n1)
Subgoal 3.2.2 is:
bisim_up_to refl_t (P1 n1) (Q2 n1) +
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < search.
Subgoal 3.2.2:
Variables: P Q X P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (up X) P1
H3 : oneb Q (up X) Q2
H4 : inv (P1 n1) (Q2 n1)
============================
bisim_up_to refl_t (P1 n1) (Q2 n1) +
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < backchain CH.
Subgoal 3.2.2:
Variables: P Q X P1 Q2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb P (up X) P1
H3 : oneb Q (up X) Q2
H4 : inv (P1 n1) (Q2 n1)
============================
bisim_inv (P1 n1) (Q2 n1)
Subgoal 4 is:
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < backchain inv_bisim_inv.
Subgoal 4:
Variables: P Q
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
============================
forall L Q1, one Q L Q1 ->
(exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < intros.
Subgoal 4:
Variables: P Q L Q1
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one Q L Q1
============================
exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +)
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < apply BInv4 to H2.
Subgoal 4:
Variables: P Q L Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one Q L Q1
H3 : one P L P2
H4 : inv P2 Q1
============================
exists P1, one P L P1 /\
(exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +)
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < witness P2.
Subgoal 4:
Variables: P Q L Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one Q L Q1
H3 : one P L P2
H4 : inv P2 Q1
============================
one P L P2 /\
(exists P1 Q2, refl_t P2 P1 Q1 Q2 /\ bisim_up_to refl_t P1 Q2 +)
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < split.
Subgoal 4.1:
Variables: P Q L Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one Q L Q1
H3 : one P L P2
H4 : inv P2 Q1
============================
one P L P2
Subgoal 4.2 is:
exists P1 Q2, refl_t P2 P1 Q1 Q2 /\ bisim_up_to refl_t P1 Q2 +
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < search.
Subgoal 4.2:
Variables: P Q L Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one Q L Q1
H3 : one P L P2
H4 : inv P2 Q1
============================
exists P1 Q2, refl_t P2 P1 Q1 Q2 /\ bisim_up_to refl_t P1 Q2 +
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < witness P2.
Subgoal 4.2:
Variables: P Q L Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one Q L Q1
H3 : one P L P2
H4 : inv P2 Q1
============================
exists Q2, refl_t P2 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < witness Q1.
Subgoal 4.2:
Variables: P Q L Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one Q L Q1
H3 : one P L P2
H4 : inv P2 Q1
============================
refl_t P2 P2 Q1 Q1 /\ bisim_up_to refl_t P2 Q1 +
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < split.
Subgoal 4.2.1:
Variables: P Q L Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one Q L Q1
H3 : one P L P2
H4 : inv P2 Q1
============================
refl_t P2 P2 Q1 Q1
Subgoal 4.2.2 is:
bisim_up_to refl_t P2 Q1 +
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < search.
Subgoal 4.2.2:
Variables: P Q L Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one Q L Q1
H3 : one P L P2
H4 : inv P2 Q1
============================
bisim_up_to refl_t P2 Q1 +
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < backchain CH.
Subgoal 4.2.2:
Variables: P Q L Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : one Q L Q1
H3 : one P L P2
H4 : inv P2 Q1
============================
bisim_inv P2 Q1
Subgoal 5 is:
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < backchain inv_bisim_inv.
Subgoal 5:
Variables: P Q
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
============================
forall X Q1, oneb Q (dn X) Q1 ->
(exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +))
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < intros.
Subgoal 5:
Variables: P Q X Q1
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (dn X) Q1
============================
exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +)
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < apply BInv5 to H2.
Subgoal 5:
Variables: P Q X Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (dn X) Q1
H3 : oneb P (dn X) P2
H4 : forall N, inv (P2 N) (Q1 N)
============================
exists P1, oneb P (dn X) P1 /\
(exists P2 Q2, forall N, refl_t (P1 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +)
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < witness P2.
Subgoal 5:
Variables: P Q X Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (dn X) Q1
H3 : oneb P (dn X) P2
H4 : forall N, inv (P2 N) (Q1 N)
============================
oneb P (dn X) P2 /\
(exists P1 Q2, forall N, refl_t (P2 N) (P1 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P1 N) (Q2 N) +)
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < split.
Subgoal 5.1:
Variables: P Q X Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (dn X) Q1
H3 : oneb P (dn X) P2
H4 : forall N, inv (P2 N) (Q1 N)
============================
oneb P (dn X) P2
Subgoal 5.2 is:
exists P1 Q2, forall N, refl_t (P2 N) (P1 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P1 N) (Q2 N) +
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < search.
Subgoal 5.2:
Variables: P Q X Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (dn X) Q1
H3 : oneb P (dn X) P2
H4 : forall N, inv (P2 N) (Q1 N)
============================
exists P1 Q2, forall N, refl_t (P2 N) (P1 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P1 N) (Q2 N) +
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < witness P2.
Subgoal 5.2:
Variables: P Q X Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (dn X) Q1
H3 : oneb P (dn X) P2
H4 : forall N, inv (P2 N) (Q1 N)
============================
exists Q2, forall N, refl_t (P2 N) (P2 N) (Q1 N) (Q2 N) /\
bisim_up_to refl_t (P2 N) (Q2 N) +
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < witness Q1.
Subgoal 5.2:
Variables: P Q X Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (dn X) Q1
H3 : oneb P (dn X) P2
H4 : forall N, inv (P2 N) (Q1 N)
============================
forall N, refl_t (P2 N) (P2 N) (Q1 N) (Q1 N) /\
bisim_up_to refl_t (P2 N) (Q1 N) +
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < intros.
Subgoal 5.2:
Variables: P Q X Q1 P2 N
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (dn X) Q1
H3 : oneb P (dn X) P2
H4 : forall N, inv (P2 N) (Q1 N)
============================
refl_t (P2 N) (P2 N) (Q1 N) (Q1 N) /\ bisim_up_to refl_t (P2 N) (Q1 N) +
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < split.
Subgoal 5.2.1:
Variables: P Q X Q1 P2 N
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (dn X) Q1
H3 : oneb P (dn X) P2
H4 : forall N, inv (P2 N) (Q1 N)
============================
refl_t (P2 N) (P2 N) (Q1 N) (Q1 N)
Subgoal 5.2.2 is:
bisim_up_to refl_t (P2 N) (Q1 N) +
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < search.
Subgoal 5.2.2:
Variables: P Q X Q1 P2 N
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (dn X) Q1
H3 : oneb P (dn X) P2
H4 : forall N, inv (P2 N) (Q1 N)
============================
bisim_up_to refl_t (P2 N) (Q1 N) +
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < backchain CH.
Subgoal 5.2.2:
Variables: P Q X Q1 P2 N
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (dn X) Q1
H3 : oneb P (dn X) P2
H4 : forall N, inv (P2 N) (Q1 N)
============================
bisim_inv (P2 N) (Q1 N)
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < backchain inv_bisim_inv.
Subgoal 5.2.2:
Variables: P Q X Q1 P2 N
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (dn X) Q1
H3 : oneb P (dn X) P2
H4 : forall N, inv (P2 N) (Q1 N)
============================
inv (P2 N) (Q1 N)
Subgoal 6 is:
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < backchain H4.
Subgoal 6:
Variables: P Q
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
============================
forall X Q1, oneb Q (up X) Q1 ->
(exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +))
bisim_inv_bisim < intros.
Subgoal 6:
Variables: P Q X Q1
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (up X) Q1
============================
exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +)
bisim_inv_bisim < apply BInv6 to H2.
Subgoal 6:
Variables: P Q X Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (up X) Q1
H3 : oneb P (up X) P2
H4 : inv (P2 n1) (Q1 n1)
============================
exists P1, oneb P (up X) P1 /\
(exists P2 Q2, nabla x, refl_t (P1 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +)
bisim_inv_bisim < witness P2.
Subgoal 6:
Variables: P Q X Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (up X) Q1
H3 : oneb P (up X) P2
H4 : inv (P2 n1) (Q1 n1)
============================
oneb P (up X) P2 /\
(exists P1 Q2, nabla x, refl_t (P2 x) (P1 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P1 x) (Q2 x) +)
bisim_inv_bisim < split.
Subgoal 6.1:
Variables: P Q X Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (up X) Q1
H3 : oneb P (up X) P2
H4 : inv (P2 n1) (Q1 n1)
============================
oneb P (up X) P2
Subgoal 6.2 is:
exists P1 Q2, nabla x, refl_t (P2 x) (P1 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P1 x) (Q2 x) +
bisim_inv_bisim < search.
Subgoal 6.2:
Variables: P Q X Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (up X) Q1
H3 : oneb P (up X) P2
H4 : inv (P2 n1) (Q1 n1)
============================
exists P1 Q2, nabla x, refl_t (P2 x) (P1 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P1 x) (Q2 x) +
bisim_inv_bisim < witness P2.
Subgoal 6.2:
Variables: P Q X Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (up X) Q1
H3 : oneb P (up X) P2
H4 : inv (P2 n1) (Q1 n1)
============================
exists Q2, nabla x, refl_t (P2 x) (P2 x) (Q1 x) (Q2 x) /\
bisim_up_to refl_t (P2 x) (Q2 x) +
bisim_inv_bisim < witness Q1.
Subgoal 6.2:
Variables: P Q X Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (up X) Q1
H3 : oneb P (up X) P2
H4 : inv (P2 n1) (Q1 n1)
============================
nabla x, refl_t (P2 x) (P2 x) (Q1 x) (Q1 x) /\
bisim_up_to refl_t (P2 x) (Q1 x) +
bisim_inv_bisim < intros.
Subgoal 6.2:
Variables: P Q X Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (up X) Q1
H3 : oneb P (up X) P2
H4 : inv (P2 n1) (Q1 n1)
============================
refl_t (P2 n1) (P2 n1) (Q1 n1) (Q1 n1) /\
bisim_up_to refl_t (P2 n1) (Q1 n1) +
bisim_inv_bisim < split.
Subgoal 6.2.1:
Variables: P Q X Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (up X) Q1
H3 : oneb P (up X) P2
H4 : inv (P2 n1) (Q1 n1)
============================
refl_t (P2 n1) (P2 n1) (Q1 n1) (Q1 n1)
Subgoal 6.2.2 is:
bisim_up_to refl_t (P2 n1) (Q1 n1) +
bisim_inv_bisim < search.
Subgoal 6.2.2:
Variables: P Q X Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (up X) Q1
H3 : oneb P (up X) P2
H4 : inv (P2 n1) (Q1 n1)
============================
bisim_up_to refl_t (P2 n1) (Q1 n1) +
bisim_inv_bisim < backchain CH.
Subgoal 6.2.2:
Variables: P Q X Q1 P2
CH : forall P Q, bisim_inv P Q -> bisim_up_to refl_t P Q +
BInv1 : forall L P2, one P L P2 -> (exists Q2, one Q L Q2 /\ inv P2 Q2)
BInv2 : forall X P2, oneb P (dn X) P2 ->
(exists Q2, oneb Q (dn X) Q2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv3 : forall X P2, oneb P (up X) P2 ->
(exists Q2, oneb Q (up X) Q2 /\ (nabla x, inv (P2 x) (Q2 x)))
BInv4 : forall L Q2, one Q L Q2 -> (exists P2, one P L P2 /\ inv P2 Q2)
BInv5 : forall X Q2, oneb Q (dn X) Q2 ->
(exists P2, oneb P (dn X) P2 /\ (forall N, inv (P2 N) (Q2 N)))
BInv6 : forall X Q2, oneb Q (up X) Q2 ->
(exists P2, oneb P (up X) P2 /\ (nabla x, inv (P2 x) (Q2 x)))
H2 : oneb Q (up X) Q1
H3 : oneb P (up X) P2
H4 : inv (P2 n1) (Q1 n1)
============================
bisim_inv (P2 n1) (Q1 n1)
bisim_inv_bisim < backchain inv_bisim_inv.
Proof completed.
Abella < Theorem bisim_par_subst_1 :
forall P Q R, bisim_up_to refl_t P Q ->
bisim_up_to refl_t (par P R) (par Q R).
============================
forall P Q R, bisim_up_to refl_t P Q ->
bisim_up_to refl_t (par P R) (par Q R)
bisim_par_subst_1 < intros.
Variables: P Q R
H1 : bisim_up_to refl_t P Q
============================
bisim_up_to refl_t (par P R) (par Q R)
bisim_par_subst_1 < apply bisim_reflexive with P = R.
Variables: P Q R
H1 : bisim_up_to refl_t P Q
H2 : bisim_up_to refl_t R R
============================
bisim_up_to refl_t (par P R) (par Q R)
bisim_par_subst_1 < backchain bisim_inv_bisim.
Variables: P Q R
H1 : bisim_up_to refl_t P Q
H2 : bisim_up_to refl_t R R
============================
bisim_inv (par P R) (par Q R)
bisim_par_subst_1 < backchain inv_bisim_inv.
Proof completed.
Abella < Theorem bisim_par_subst_2 :
forall P Q R, bisim_up_to refl_t P Q ->
bisim_up_to refl_t (par R P) (par R Q).
============================
forall P Q R, bisim_up_to refl_t P Q ->
bisim_up_to refl_t (par R P) (par R Q)
bisim_par_subst_2 < intros.
Variables: P Q R
H1 : bisim_up_to refl_t P Q
============================
bisim_up_to refl_t (par R P) (par R Q)
bisim_par_subst_2 < apply bisim_reflexive with P = R.
Variables: P Q R
H1 : bisim_up_to refl_t P Q
H2 : bisim_up_to refl_t R R
============================
bisim_up_to refl_t (par R P) (par R Q)
bisim_par_subst_2 < backchain bisim_inv_bisim.
Variables: P Q R
H1 : bisim_up_to refl_t P Q
H2 : bisim_up_to refl_t R R
============================
bisim_inv (par R P) (par R Q)
bisim_par_subst_2 < backchain inv_bisim_inv.
Proof completed.
Abella < Theorem bisim_nu_subst :
forall P Q, (nabla x, bisim_up_to refl_t (P x) (Q x)) ->
bisim_up_to refl_t (nu P) (nu Q).
============================
forall P Q, (nabla x, bisim_up_to refl_t (P x) (Q x)) ->
bisim_up_to refl_t (nu P) (nu Q)
bisim_nu_subst < intros.
Variables: P Q
H1 : nabla x, bisim_up_to refl_t (P x) (Q x)
============================
bisim_up_to refl_t (nu P) (nu Q)
bisim_nu_subst < apply H1 with x = n1.
Variables: P Q
H1 : nabla x, bisim_up_to refl_t (P x) (Q x)
H2 : bisim_up_to refl_t (P n1) (Q n1)
============================
bisim_up_to refl_t (nu P) (nu Q)
bisim_nu_subst < backchain bisim_inv_bisim.
Variables: P Q
H1 : nabla x, bisim_up_to refl_t (P x) (Q x)
H2 : bisim_up_to refl_t (P n1) (Q n1)
============================
bisim_inv (nu P) (nu Q)
bisim_nu_subst < backchain inv_bisim_inv.
Proof completed.
Abella < Goodbye.