Welcome to Abella 2.0.5-dev.
Abella < Kind name, action, proc type.

Abella < Import "ccs_core".
Importing from "ccs_core".
Warning: Definition can be used to defeat stratification
 (higher-order argument "Tech" occurs to the left of ->)
Warning: Definition can be used to defeat stratification
 (higher-order argument "Rel" occurs to the left of ->)
Warning: Definition can be used to defeat stratification
 (higher-order argument "Rel" occurs to the left of ->)

Abella < Import "ccs_ctx".
Importing from "ccs_ctx".
Warning: Definition can be used to defeat stratification
 (higher-order argument "Rel" occurs to the left of ->)

Abella < Define context_t : proc -> proc -> proc -> proc -> prop by 
context_t P1 P2 Q1 Q2 := exists C, at C P2 P1 /\ at C Q2 Q1.

Abella < Theorem concat_ctx2 : 
forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 -> at C1 Q1 Q2 ->
  at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3).


============================
 forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 -> at C1 Q1 Q2 ->
   at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)

concat_ctx2 < induction on 2.

IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
============================
 forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 @ ->
   at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)

concat_ctx2 < intros.

Variables: C1 C2 P1 P2 P3 Q1 Q2 Q3
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P2
H2 : at C2 P2 P3 @
H3 : at C1 Q1 Q2
H4 : at C2 Q2 Q3
============================
 exists C3, at C3 P1 P3 /\ at C3 Q1 Q3

concat_ctx2 < case H2.
Subgoal 1:

Variables: C1 P1 P3 Q1 Q2 Q3
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P3
H3 : at C1 Q1 Q2
H4 : at hole Q2 Q3
============================
 exists C3, at C3 P1 P3 /\ at C3 Q1 Q3

Subgoal 2 is:
 exists C3, at C3 P1 (plus Q R) /\ at C3 Q1 Q3

Subgoal 3 is:
 exists C3, at C3 P1 (plus R Q) /\ at C3 Q1 Q3

Subgoal 4 is:
 exists C3, at C3 P1 (par Q R) /\ at C3 Q1 Q3

Subgoal 5 is:
 exists C3, at C3 P1 (par R Q) /\ at C3 Q1 Q3

Subgoal 6 is:
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 Q3

concat_ctx2 < case H4.
Subgoal 1:

Variables: C1 P1 P3 Q1 Q3
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P3
H3 : at C1 Q1 Q3
============================
 exists C3, at C3 P1 P3 /\ at C3 Q1 Q3

Subgoal 2 is:
 exists C3, at C3 P1 (plus Q R) /\ at C3 Q1 Q3

Subgoal 3 is:
 exists C3, at C3 P1 (plus R Q) /\ at C3 Q1 Q3

Subgoal 4 is:
 exists C3, at C3 P1 (par Q R) /\ at C3 Q1 Q3

Subgoal 5 is:
 exists C3, at C3 P1 (par R Q) /\ at C3 Q1 Q3

Subgoal 6 is:
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 Q3

concat_ctx2 < search.
Subgoal 2:

Variables: C1 P1 P2 Q1 Q2 Q3 R Q C
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P2
H3 : at C1 Q1 Q2
H4 : at (plus_l C R) Q2 Q3
H5 : at C P2 Q *
============================
 exists C3, at C3 P1 (plus Q R) /\ at C3 Q1 Q3

Subgoal 3 is:
 exists C3, at C3 P1 (plus R Q) /\ at C3 Q1 Q3

Subgoal 4 is:
 exists C3, at C3 P1 (par Q R) /\ at C3 Q1 Q3

Subgoal 5 is:
 exists C3, at C3 P1 (par R Q) /\ at C3 Q1 Q3

Subgoal 6 is:
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 Q3

concat_ctx2 < case H4.
Subgoal 2:

Variables: C1 P1 P2 Q1 Q2 R Q C Q4
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P2
H3 : at C1 Q1 Q2
H5 : at C P2 Q *
H6 : at C Q2 Q4
============================
 exists C3, at C3 P1 (plus Q R) /\ at C3 Q1 (plus Q4 R)

Subgoal 3 is:
 exists C3, at C3 P1 (plus R Q) /\ at C3 Q1 Q3

Subgoal 4 is:
 exists C3, at C3 P1 (par Q R) /\ at C3 Q1 Q3

Subgoal 5 is:
 exists C3, at C3 P1 (par R Q) /\ at C3 Q1 Q3

Subgoal 6 is:
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 Q3

concat_ctx2 < apply IH to H1 H5 H3 H6.
Subgoal 2:

Variables: C1 P1 P2 Q1 Q2 R Q C Q4 C3
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P2
H3 : at C1 Q1 Q2
H5 : at C P2 Q *
H6 : at C Q2 Q4
H7 : at C3 P1 Q
H8 : at C3 Q1 Q4
============================
 exists C3, at C3 P1 (plus Q R) /\ at C3 Q1 (plus Q4 R)

Subgoal 3 is:
 exists C3, at C3 P1 (plus R Q) /\ at C3 Q1 Q3

Subgoal 4 is:
 exists C3, at C3 P1 (par Q R) /\ at C3 Q1 Q3

Subgoal 5 is:
 exists C3, at C3 P1 (par R Q) /\ at C3 Q1 Q3

Subgoal 6 is:
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 Q3

concat_ctx2 < search.
Subgoal 3:

Variables: C1 P1 P2 Q1 Q2 Q3 Q R C
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P2
H3 : at C1 Q1 Q2
H4 : at (plus_r R C) Q2 Q3
H5 : at C P2 Q *
============================
 exists C3, at C3 P1 (plus R Q) /\ at C3 Q1 Q3

Subgoal 4 is:
 exists C3, at C3 P1 (par Q R) /\ at C3 Q1 Q3

Subgoal 5 is:
 exists C3, at C3 P1 (par R Q) /\ at C3 Q1 Q3

Subgoal 6 is:
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 Q3

concat_ctx2 < case H4.
Subgoal 3:

Variables: C1 P1 P2 Q1 Q2 Q R C Q4
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P2
H3 : at C1 Q1 Q2
H5 : at C P2 Q *
H6 : at C Q2 Q4
============================
 exists C3, at C3 P1 (plus R Q) /\ at C3 Q1 (plus R Q4)

Subgoal 4 is:
 exists C3, at C3 P1 (par Q R) /\ at C3 Q1 Q3

Subgoal 5 is:
 exists C3, at C3 P1 (par R Q) /\ at C3 Q1 Q3

Subgoal 6 is:
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 Q3

concat_ctx2 < apply IH to H1 H5 H3 H6.
Subgoal 3:

Variables: C1 P1 P2 Q1 Q2 Q R C Q4 C3
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P2
H3 : at C1 Q1 Q2
H5 : at C P2 Q *
H6 : at C Q2 Q4
H7 : at C3 P1 Q
H8 : at C3 Q1 Q4
============================
 exists C3, at C3 P1 (plus R Q) /\ at C3 Q1 (plus R Q4)

Subgoal 4 is:
 exists C3, at C3 P1 (par Q R) /\ at C3 Q1 Q3

Subgoal 5 is:
 exists C3, at C3 P1 (par R Q) /\ at C3 Q1 Q3

Subgoal 6 is:
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 Q3

concat_ctx2 < search.
Subgoal 4:

Variables: C1 P1 P2 Q1 Q2 Q3 R Q C
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P2
H3 : at C1 Q1 Q2
H4 : at (par_l C R) Q2 Q3
H5 : at C P2 Q *
============================
 exists C3, at C3 P1 (par Q R) /\ at C3 Q1 Q3

Subgoal 5 is:
 exists C3, at C3 P1 (par R Q) /\ at C3 Q1 Q3

Subgoal 6 is:
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 Q3

concat_ctx2 < case H4.
Subgoal 4:

Variables: C1 P1 P2 Q1 Q2 R Q C Q4
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P2
H3 : at C1 Q1 Q2
H5 : at C P2 Q *
H6 : at C Q2 Q4
============================
 exists C3, at C3 P1 (par Q R) /\ at C3 Q1 (par Q4 R)

Subgoal 5 is:
 exists C3, at C3 P1 (par R Q) /\ at C3 Q1 Q3

Subgoal 6 is:
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 Q3

concat_ctx2 < apply IH to H1 H5 H3 H6.
Subgoal 4:

Variables: C1 P1 P2 Q1 Q2 R Q C Q4 C3
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P2
H3 : at C1 Q1 Q2
H5 : at C P2 Q *
H6 : at C Q2 Q4
H7 : at C3 P1 Q
H8 : at C3 Q1 Q4
============================
 exists C3, at C3 P1 (par Q R) /\ at C3 Q1 (par Q4 R)

Subgoal 5 is:
 exists C3, at C3 P1 (par R Q) /\ at C3 Q1 Q3

Subgoal 6 is:
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 Q3

concat_ctx2 < search.
Subgoal 5:

Variables: C1 P1 P2 Q1 Q2 Q3 Q R C
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P2
H3 : at C1 Q1 Q2
H4 : at (par_r R C) Q2 Q3
H5 : at C P2 Q *
============================
 exists C3, at C3 P1 (par R Q) /\ at C3 Q1 Q3

Subgoal 6 is:
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 Q3

concat_ctx2 < case H4.
Subgoal 5:

Variables: C1 P1 P2 Q1 Q2 Q R C Q4
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P2
H3 : at C1 Q1 Q2
H5 : at C P2 Q *
H6 : at C Q2 Q4
============================
 exists C3, at C3 P1 (par R Q) /\ at C3 Q1 (par R Q4)

Subgoal 6 is:
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 Q3

concat_ctx2 < apply IH to H1 H5 H3 H6.
Subgoal 5:

Variables: C1 P1 P2 Q1 Q2 Q R C Q4 C3
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P2
H3 : at C1 Q1 Q2
H5 : at C P2 Q *
H6 : at C Q2 Q4
H7 : at C3 P1 Q
H8 : at C3 Q1 Q4
============================
 exists C3, at C3 P1 (par R Q) /\ at C3 Q1 (par R Q4)

Subgoal 6 is:
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 Q3

concat_ctx2 < search.
Subgoal 6:

Variables: C1 P1 P2 Q1 Q2 Q3 Q A C
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P2
H3 : at C1 Q1 Q2
H4 : at (act_d A C) Q2 Q3
H5 : at C P2 Q *
============================
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 Q3

concat_ctx2 < case H4.
Subgoal 6:

Variables: C1 P1 P2 Q1 Q2 Q A C Q4
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P2
H3 : at C1 Q1 Q2
H5 : at C P2 Q *
H6 : at C Q2 Q4
============================
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 (act A Q4)

concat_ctx2 < apply IH to H1 H5 H3 H6.
Subgoal 6:

Variables: C1 P1 P2 Q1 Q2 Q A C Q4 C3
IH : forall C1 C2 P1 P2 P3 Q1 Q2 Q3, at C1 P1 P2 -> at C2 P2 P3 * ->
       at C1 Q1 Q2 -> at C2 Q2 Q3 -> (exists C3, at C3 P1 P3 /\ at C3 Q1 Q3)
H1 : at C1 P1 P2
H3 : at C1 Q1 Q2
H5 : at C P2 Q *
H6 : at C Q2 Q4
H7 : at C3 P1 Q
H8 : at C3 Q1 Q4
============================
 exists C3, at C3 P1 (act A Q) /\ at C3 Q1 (act A Q4)

concat_ctx2 < search.
Proof completed.
Abella < Theorem context_reflexive : 
forall P, bisim_up_to context_t P P.


============================
 forall P, bisim_up_to context_t P P

context_reflexive < coinduction.

CH : forall P, bisim_up_to context_t P P +
============================
 forall P, bisim_up_to context_t P P #

context_reflexive < intros.

Variables: P
CH : forall P, bisim_up_to context_t P P +
============================
 bisim_up_to context_t P P #

context_reflexive < unfold.
Subgoal 1:

Variables: P
CH : forall P, bisim_up_to context_t P P +
============================
 forall A P1, one P A P1 ->
   (exists Q1, one P A Q1 /\
        (exists P2 Q2, context_t P1 P2 Q1 Q2 /\
             bisim_up_to context_t P2 Q2 +))

Subgoal 2 is:
 forall A Q1, one P A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, context_t P1 P2 Q1 Q2 /\
             bisim_up_to context_t P2 Q2 +))

context_reflexive < intros.
Subgoal 1:

Variables: P A P1
CH : forall P, bisim_up_to context_t P P +
H1 : one P A P1
============================
 exists Q1, one P A Q1 /\
   (exists P2 Q2, context_t P1 P2 Q1 Q2 /\ bisim_up_to context_t P2 Q2 +)

Subgoal 2 is:
 forall A Q1, one P A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, context_t P1 P2 Q1 Q2 /\
             bisim_up_to context_t P2 Q2 +))

context_reflexive < witness P1.
Subgoal 1:

Variables: P A P1
CH : forall P, bisim_up_to context_t P P +
H1 : one P A P1
============================
 one P A P1 /\
   (exists P2 Q2, context_t P1 P2 P1 Q2 /\ bisim_up_to context_t P2 Q2 +)

Subgoal 2 is:
 forall A Q1, one P A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, context_t P1 P2 Q1 Q2 /\
             bisim_up_to context_t P2 Q2 +))

context_reflexive < split.
Subgoal 1.1:

Variables: P A P1
CH : forall P, bisim_up_to context_t P P +
H1 : one P A P1
============================
 one P A P1

Subgoal 1.2 is:
 exists P2 Q2, context_t P1 P2 P1 Q2 /\ bisim_up_to context_t P2 Q2 +

Subgoal 2 is:
 forall A Q1, one P A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, context_t P1 P2 Q1 Q2 /\
             bisim_up_to context_t P2 Q2 +))

context_reflexive < search.
Subgoal 1.2:

Variables: P A P1
CH : forall P, bisim_up_to context_t P P +
H1 : one P A P1
============================
 exists P2 Q2, context_t P1 P2 P1 Q2 /\ bisim_up_to context_t P2 Q2 +

Subgoal 2 is:
 forall A Q1, one P A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, context_t P1 P2 Q1 Q2 /\
             bisim_up_to context_t P2 Q2 +))

context_reflexive < witness P1.
Subgoal 1.2:

Variables: P A P1
CH : forall P, bisim_up_to context_t P P +
H1 : one P A P1
============================
 exists Q2, context_t P1 P1 P1 Q2 /\ bisim_up_to context_t P1 Q2 +

Subgoal 2 is:
 forall A Q1, one P A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, context_t P1 P2 Q1 Q2 /\
             bisim_up_to context_t P2 Q2 +))

context_reflexive < witness P1.
Subgoal 1.2:

Variables: P A P1
CH : forall P, bisim_up_to context_t P P +
H1 : one P A P1
============================
 context_t P1 P1 P1 P1 /\ bisim_up_to context_t P1 P1 +

Subgoal 2 is:
 forall A Q1, one P A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, context_t P1 P2 Q1 Q2 /\
             bisim_up_to context_t P2 Q2 +))

context_reflexive < split.
Subgoal 1.2.1:

Variables: P A P1
CH : forall P, bisim_up_to context_t P P +
H1 : one P A P1
============================
 context_t P1 P1 P1 P1

Subgoal 1.2.2 is:
 bisim_up_to context_t P1 P1 +

Subgoal 2 is:
 forall A Q1, one P A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, context_t P1 P2 Q1 Q2 /\
             bisim_up_to context_t P2 Q2 +))

context_reflexive < search.
Subgoal 1.2.2:

Variables: P A P1
CH : forall P, bisim_up_to context_t P P +
H1 : one P A P1
============================
 bisim_up_to context_t P1 P1 +

Subgoal 2 is:
 forall A Q1, one P A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, context_t P1 P2 Q1 Q2 /\
             bisim_up_to context_t P2 Q2 +))

context_reflexive < backchain CH.
Subgoal 2:

Variables: P
CH : forall P, bisim_up_to context_t P P +
============================
 forall A Q1, one P A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, context_t P1 P2 Q1 Q2 /\
             bisim_up_to context_t P2 Q2 +))

context_reflexive < intros.
Subgoal 2:

Variables: P A Q1
CH : forall P, bisim_up_to context_t P P +
H1 : one P A Q1
============================
 exists P1, one P A P1 /\
   (exists P2 Q2, context_t P1 P2 Q1 Q2 /\ bisim_up_to context_t P2 Q2 +)

context_reflexive < witness Q1.
Subgoal 2:

Variables: P A Q1
CH : forall P, bisim_up_to context_t P P +
H1 : one P A Q1
============================
 one P A Q1 /\
   (exists P2 Q2, context_t Q1 P2 Q1 Q2 /\ bisim_up_to context_t P2 Q2 +)

context_reflexive < split.
Subgoal 2.1:

Variables: P A Q1
CH : forall P, bisim_up_to context_t P P +
H1 : one P A Q1
============================
 one P A Q1

Subgoal 2.2 is:
 exists P2 Q2, context_t Q1 P2 Q1 Q2 /\ bisim_up_to context_t P2 Q2 +

context_reflexive < search.
Subgoal 2.2:

Variables: P A Q1
CH : forall P, bisim_up_to context_t P P +
H1 : one P A Q1
============================
 exists P2 Q2, context_t Q1 P2 Q1 Q2 /\ bisim_up_to context_t P2 Q2 +

context_reflexive < witness Q1.
Subgoal 2.2:

Variables: P A Q1
CH : forall P, bisim_up_to context_t P P +
H1 : one P A Q1
============================
 exists Q2, context_t Q1 Q1 Q1 Q2 /\ bisim_up_to context_t Q1 Q2 +

context_reflexive < witness Q1.
Subgoal 2.2:

Variables: P A Q1
CH : forall P, bisim_up_to context_t P P +
H1 : one P A Q1
============================
 context_t Q1 Q1 Q1 Q1 /\ bisim_up_to context_t Q1 Q1 +

context_reflexive < split.
Subgoal 2.2.1:

Variables: P A Q1
CH : forall P, bisim_up_to context_t P P +
H1 : one P A Q1
============================
 context_t Q1 Q1 Q1 Q1

Subgoal 2.2.2 is:
 bisim_up_to context_t Q1 Q1 +

context_reflexive < search.
Subgoal 2.2.2:

Variables: P A Q1
CH : forall P, bisim_up_to context_t P P +
H1 : one P A Q1
============================
 bisim_up_to context_t Q1 Q1 +

context_reflexive < backchain CH.
Proof completed.
Abella < Theorem context_substitutive : 
substitutive_rel (bisim_up_to context_t).


============================
 substitutive_rel (bisim_up_to context_t)

context_substitutive < unfold.

============================
 forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
   bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2

context_substitutive < coinduction.

CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
============================
 forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
   bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 #

context_substitutive < intros.

Variables: P1 P2 C Q1 Q2
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
============================
 bisim_up_to context_t Q1 Q2 #

context_substitutive < unfold.
Subgoal 1:

Variables: P1 P2 C Q1 Q2
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
============================
 forall A P1, one Q1 A P1 ->
   (exists Q3, one Q2 A Q3 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < intros.
Subgoal 1:

Variables: P1 P2 C Q1 Q2 A P3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
============================
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < apply ctx_faithful to H1 H4.
Subgoal 1:

Variables: P1 P2 C Q1 Q2 A P3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H5 : (exists CC, at CC P1 P3 /\
          (forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR))) \/
       (exists CC PBP B, one P1 B PBP /\ at CC PBP P3 /\
            (forall Q QBQ, one Q B QBQ ->
                 (forall Q0, at C Q Q0 ->
                      (exists RR, one Q0 A RR /\ at CC QBQ RR)))) \/
       (forall Q Q0, at C Q Q0 -> one Q0 A P3)
============================
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < case H5.
Subgoal 1.1:

Variables: P1 P2 C Q1 Q2 A P3 CC
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : at CC P1 P3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
============================
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.2 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < apply H7 to H2.
Subgoal 1.1:

Variables: P1 P2 C Q1 Q2 A P3 CC RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : at CC P1 P3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
H8 : one Q2 A RR
H9 : at CC P2 RR
============================
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.2 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < witness RR.
Subgoal 1.1:

Variables: P1 P2 C Q1 Q2 A P3 CC RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : at CC P1 P3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
H8 : one Q2 A RR
H9 : at CC P2 RR
============================
 one Q2 A RR /\
   (exists P2 Q4, context_t P3 P2 RR Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.2 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < split.
Subgoal 1.1.1:

Variables: P1 P2 C Q1 Q2 A P3 CC RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : at CC P1 P3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
H8 : one Q2 A RR
H9 : at CC P2 RR
============================
 one Q2 A RR

Subgoal 1.1.2 is:
 exists P2 Q4, context_t P3 P2 RR Q4 /\ bisim_up_to context_t P2 Q4 +

Subgoal 1.2 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < search.
Subgoal 1.1.2:

Variables: P1 P2 C Q1 Q2 A P3 CC RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : at CC P1 P3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
H8 : one Q2 A RR
H9 : at CC P2 RR
============================
 exists P2 Q4, context_t P3 P2 RR Q4 /\ bisim_up_to context_t P2 Q4 +

Subgoal 1.2 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < witness P1.
Subgoal 1.1.2:

Variables: P1 P2 C Q1 Q2 A P3 CC RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : at CC P1 P3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
H8 : one Q2 A RR
H9 : at CC P2 RR
============================
 exists Q4, context_t P3 P1 RR Q4 /\ bisim_up_to context_t P1 Q4 +

Subgoal 1.2 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < witness P2.
Subgoal 1.1.2:

Variables: P1 P2 C Q1 Q2 A P3 CC RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : at CC P1 P3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
H8 : one Q2 A RR
H9 : at CC P2 RR
============================
 context_t P3 P1 RR P2 /\ bisim_up_to context_t P1 P2 +

Subgoal 1.2 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < split.
Subgoal 1.1.2.1:

Variables: P1 P2 C Q1 Q2 A P3 CC RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : at CC P1 P3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
H8 : one Q2 A RR
H9 : at CC P2 RR
============================
 context_t P3 P1 RR P2

Subgoal 1.1.2.2 is:
 bisim_up_to context_t P1 P2 +

Subgoal 1.2 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < search.
Subgoal 1.1.2.2:

Variables: P1 P2 C Q1 Q2 A P3 CC RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : at CC P1 P3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
H8 : one Q2 A RR
H9 : at CC P2 RR
============================
 bisim_up_to context_t P1 P2 +

Subgoal 1.2 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < backchain CH.
Subgoal 1.2:

Variables: P1 P2 C Q1 Q2 A P3 CC PBP B
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : one P1 B PBP
H7 : at CC PBP P3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
============================
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < case H3.
Subgoal 1.2:

Variables: P1 P2 C Q1 Q2 A P3 CC PBP B
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q1 A P3
H6 : one P1 B PBP
H7 : at CC PBP P3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
============================
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < apply H9 to H6.
Subgoal 1.2:

Variables: P1 P2 C Q1 Q2 A P3 CC PBP B Q3 P4 Q4
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q1 A P3
H6 : one P1 B PBP
H7 : at CC PBP P3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P2 B Q3
H12 : context_t PBP P4 Q3 Q4
H13 : bisim_up_to context_t P4 Q4
============================
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < apply H8 to H11.
Subgoal 1.2:

Variables: P1 P2 C Q1 Q2 A P3 CC PBP B Q3 P4 Q4
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q1 A P3
H6 : one P1 B PBP
H7 : at CC PBP P3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P2 B Q3
H12 : context_t PBP P4 Q3 Q4
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P2 Q0 -> (exists RR, one Q0 A RR /\ at CC Q3 RR)
============================
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < apply H14 to H2.
Subgoal 1.2:

Variables: P1 P2 C Q1 Q2 A P3 CC PBP B Q3 P4 Q4 RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q1 A P3
H6 : one P1 B PBP
H7 : at CC PBP P3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P2 B Q3
H12 : context_t PBP P4 Q3 Q4
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P2 Q0 -> (exists RR, one Q0 A RR /\ at CC Q3 RR)
H15 : one Q2 A RR
H16 : at CC Q3 RR
============================
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < witness RR.
Subgoal 1.2:

Variables: P1 P2 C Q1 Q2 A P3 CC PBP B Q3 P4 Q4 RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q1 A P3
H6 : one P1 B PBP
H7 : at CC PBP P3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P2 B Q3
H12 : context_t PBP P4 Q3 Q4
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P2 Q0 -> (exists RR, one Q0 A RR /\ at CC Q3 RR)
H15 : one Q2 A RR
H16 : at CC Q3 RR
============================
 one Q2 A RR /\
   (exists P2 Q4, context_t P3 P2 RR Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < split.
Subgoal 1.2.1:

Variables: P1 P2 C Q1 Q2 A P3 CC PBP B Q3 P4 Q4 RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q1 A P3
H6 : one P1 B PBP
H7 : at CC PBP P3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P2 B Q3
H12 : context_t PBP P4 Q3 Q4
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P2 Q0 -> (exists RR, one Q0 A RR /\ at CC Q3 RR)
H15 : one Q2 A RR
H16 : at CC Q3 RR
============================
 one Q2 A RR

Subgoal 1.2.2 is:
 exists P2 Q4, context_t P3 P2 RR Q4 /\ bisim_up_to context_t P2 Q4 +

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < search.
Subgoal 1.2.2:

Variables: P1 P2 C Q1 Q2 A P3 CC PBP B Q3 P4 Q4 RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q1 A P3
H6 : one P1 B PBP
H7 : at CC PBP P3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P2 B Q3
H12 : context_t PBP P4 Q3 Q4
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P2 Q0 -> (exists RR, one Q0 A RR /\ at CC Q3 RR)
H15 : one Q2 A RR
H16 : at CC Q3 RR
============================
 exists P2 Q4, context_t P3 P2 RR Q4 /\ bisim_up_to context_t P2 Q4 +

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < case H12.
Subgoal 1.2.2:

Variables: P1 P2 C Q1 Q2 A P3 CC PBP B Q3 P4 Q4 RR C1
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q1 A P3
H6 : one P1 B PBP
H7 : at CC PBP P3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P2 B Q3
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P2 Q0 -> (exists RR, one Q0 A RR /\ at CC Q3 RR)
H15 : one Q2 A RR
H16 : at CC Q3 RR
H17 : at C1 P4 PBP
H18 : at C1 Q4 Q3
============================
 exists P2 Q4, context_t P3 P2 RR Q4 /\ bisim_up_to context_t P2 Q4 +

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < apply concat_ctx2 to H17 H7 H18 H16.
Subgoal 1.2.2:

Variables: P1 P2 C Q1 Q2 A P3 CC PBP B Q3 P4 Q4 RR C1 C3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q1 A P3
H6 : one P1 B PBP
H7 : at CC PBP P3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P2 B Q3
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P2 Q0 -> (exists RR, one Q0 A RR /\ at CC Q3 RR)
H15 : one Q2 A RR
H16 : at CC Q3 RR
H17 : at C1 P4 PBP
H18 : at C1 Q4 Q3
H19 : at C3 P4 P3
H20 : at C3 Q4 RR
============================
 exists P2 Q4, context_t P3 P2 RR Q4 /\ bisim_up_to context_t P2 Q4 +

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < witness P4.
Subgoal 1.2.2:

Variables: P1 P2 C Q1 Q2 A P3 CC PBP B Q3 P4 Q4 RR C1 C3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q1 A P3
H6 : one P1 B PBP
H7 : at CC PBP P3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P2 B Q3
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P2 Q0 -> (exists RR, one Q0 A RR /\ at CC Q3 RR)
H15 : one Q2 A RR
H16 : at CC Q3 RR
H17 : at C1 P4 PBP
H18 : at C1 Q4 Q3
H19 : at C3 P4 P3
H20 : at C3 Q4 RR
============================
 exists Q4, context_t P3 P4 RR Q4 /\ bisim_up_to context_t P4 Q4 +

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < witness Q4.
Subgoal 1.2.2:

Variables: P1 P2 C Q1 Q2 A P3 CC PBP B Q3 P4 Q4 RR C1 C3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q1 A P3
H6 : one P1 B PBP
H7 : at CC PBP P3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P2 B Q3
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P2 Q0 -> (exists RR, one Q0 A RR /\ at CC Q3 RR)
H15 : one Q2 A RR
H16 : at CC Q3 RR
H17 : at C1 P4 PBP
H18 : at C1 Q4 Q3
H19 : at C3 P4 P3
H20 : at C3 Q4 RR
============================
 context_t P3 P4 RR Q4 /\ bisim_up_to context_t P4 Q4 +

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < split.
Subgoal 1.2.2.1:

Variables: P1 P2 C Q1 Q2 A P3 CC PBP B Q3 P4 Q4 RR C1 C3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q1 A P3
H6 : one P1 B PBP
H7 : at CC PBP P3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P2 B Q3
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P2 Q0 -> (exists RR, one Q0 A RR /\ at CC Q3 RR)
H15 : one Q2 A RR
H16 : at CC Q3 RR
H17 : at C1 P4 PBP
H18 : at C1 Q4 Q3
H19 : at C3 P4 P3
H20 : at C3 Q4 RR
============================
 context_t P3 P4 RR Q4

Subgoal 1.2.2.2 is:
 bisim_up_to context_t P4 Q4 +

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < search.
Subgoal 1.2.2.2:

Variables: P1 P2 C Q1 Q2 A P3 CC PBP B Q3 P4 Q4 RR C1 C3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q1 A P3
H6 : one P1 B PBP
H7 : at CC PBP P3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P2 B Q3
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P2 Q0 -> (exists RR, one Q0 A RR /\ at CC Q3 RR)
H15 : one Q2 A RR
H16 : at CC Q3 RR
H17 : at C1 P4 PBP
H18 : at C1 Q4 Q3
H19 : at C3 P4 P3
H20 : at C3 Q4 RR
============================
 bisim_up_to context_t P4 Q4 +

Subgoal 1.3 is:
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < backchain CH.
Subgoal 1.3:

Variables: P1 P2 C Q1 Q2 A P3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A P3
============================
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < apply H6 to H2.
Subgoal 1.3:

Variables: P1 P2 C Q1 Q2 A P3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A P3
H7 : one Q2 A P3
============================
 exists Q3, one Q2 A Q3 /\
   (exists P2 Q4, context_t P3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < witness P3.
Subgoal 1.3:

Variables: P1 P2 C Q1 Q2 A P3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A P3
H7 : one Q2 A P3
============================
 one Q2 A P3 /\
   (exists P2 Q4, context_t P3 P2 P3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < split.
Subgoal 1.3.1:

Variables: P1 P2 C Q1 Q2 A P3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A P3
H7 : one Q2 A P3
============================
 one Q2 A P3

Subgoal 1.3.2 is:
 exists P2 Q4, context_t P3 P2 P3 Q4 /\ bisim_up_to context_t P2 Q4 +

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < search.
Subgoal 1.3.2:

Variables: P1 P2 C Q1 Q2 A P3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A P3
H7 : one Q2 A P3
============================
 exists P2 Q4, context_t P3 P2 P3 Q4 /\ bisim_up_to context_t P2 Q4 +

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < witness P3.
Subgoal 1.3.2:

Variables: P1 P2 C Q1 Q2 A P3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A P3
H7 : one Q2 A P3
============================
 exists Q4, context_t P3 P3 P3 Q4 /\ bisim_up_to context_t P3 Q4 +

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < witness P3.
Subgoal 1.3.2:

Variables: P1 P2 C Q1 Q2 A P3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A P3
H7 : one Q2 A P3
============================
 context_t P3 P3 P3 P3 /\ bisim_up_to context_t P3 P3 +

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < split.
Subgoal 1.3.2.1:

Variables: P1 P2 C Q1 Q2 A P3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A P3
H7 : one Q2 A P3
============================
 context_t P3 P3 P3 P3

Subgoal 1.3.2.2 is:
 bisim_up_to context_t P3 P3 +

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < search.
Subgoal 1.3.2.2:

Variables: P1 P2 C Q1 Q2 A P3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A P3
H7 : one Q2 A P3
============================
 bisim_up_to context_t P3 P3 +

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < backchain CH.
Subgoal 1.3.2.2:

Variables: P1 P2 C Q1 Q2 A P3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q1 A P3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A P3
H7 : one Q2 A P3
============================
 bisim_up_to context_t P3 P3

Subgoal 2 is:
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < backchain context_reflexive.
Subgoal 2:

Variables: P1 P2 C Q1 Q2
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
============================
 forall A Q3, one Q2 A Q3 ->
   (exists P1, one Q1 A P1 /\
        (exists P2 Q4, context_t P1 P2 Q3 Q4 /\
             bisim_up_to context_t P2 Q4 +))

context_substitutive < intros.
Subgoal 2:

Variables: P1 P2 C Q1 Q2 A Q3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
============================
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < apply ctx_faithful to H2 H4.
Subgoal 2:

Variables: P1 P2 C Q1 Q2 A Q3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H5 : (exists CC, at CC P2 Q3 /\
          (forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR))) \/
       (exists CC PBP B, one P2 B PBP /\ at CC PBP Q3 /\
            (forall Q QBQ, one Q B QBQ ->
                 (forall Q0, at C Q Q0 ->
                      (exists RR, one Q0 A RR /\ at CC QBQ RR)))) \/
       (forall Q Q0, at C Q Q0 -> one Q0 A Q3)
============================
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < case H5.
Subgoal 2.1:

Variables: P1 P2 C Q1 Q2 A Q3 CC
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : at CC P2 Q3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
============================
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.2 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < apply H7 to H1.
Subgoal 2.1:

Variables: P1 P2 C Q1 Q2 A Q3 CC RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : at CC P2 Q3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
H8 : one Q1 A RR
H9 : at CC P1 RR
============================
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.2 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < witness RR.
Subgoal 2.1:

Variables: P1 P2 C Q1 Q2 A Q3 CC RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : at CC P2 Q3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
H8 : one Q1 A RR
H9 : at CC P1 RR
============================
 one Q1 A RR /\
   (exists P2 Q4, context_t RR P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.2 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < split.
Subgoal 2.1.1:

Variables: P1 P2 C Q1 Q2 A Q3 CC RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : at CC P2 Q3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
H8 : one Q1 A RR
H9 : at CC P1 RR
============================
 one Q1 A RR

Subgoal 2.1.2 is:
 exists P2 Q4, context_t RR P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +

Subgoal 2.2 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < search.
Subgoal 2.1.2:

Variables: P1 P2 C Q1 Q2 A Q3 CC RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : at CC P2 Q3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
H8 : one Q1 A RR
H9 : at CC P1 RR
============================
 exists P2 Q4, context_t RR P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +

Subgoal 2.2 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < witness P1.
Subgoal 2.1.2:

Variables: P1 P2 C Q1 Q2 A Q3 CC RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : at CC P2 Q3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
H8 : one Q1 A RR
H9 : at CC P1 RR
============================
 exists Q4, context_t RR P1 Q3 Q4 /\ bisim_up_to context_t P1 Q4 +

Subgoal 2.2 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < witness P2.
Subgoal 2.1.2:

Variables: P1 P2 C Q1 Q2 A Q3 CC RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : at CC P2 Q3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
H8 : one Q1 A RR
H9 : at CC P1 RR
============================
 context_t RR P1 Q3 P2 /\ bisim_up_to context_t P1 P2 +

Subgoal 2.2 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < split.
Subgoal 2.1.2.1:

Variables: P1 P2 C Q1 Q2 A Q3 CC RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : at CC P2 Q3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
H8 : one Q1 A RR
H9 : at CC P1 RR
============================
 context_t RR P1 Q3 P2

Subgoal 2.1.2.2 is:
 bisim_up_to context_t P1 P2 +

Subgoal 2.2 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < search.
Subgoal 2.1.2.2:

Variables: P1 P2 C Q1 Q2 A Q3 CC RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : at CC P2 Q3
H7 : forall Q Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC Q RR)
H8 : one Q1 A RR
H9 : at CC P1 RR
============================
 bisim_up_to context_t P1 P2 +

Subgoal 2.2 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < backchain CH.
Subgoal 2.2:

Variables: P1 P2 C Q1 Q2 A Q3 CC PBP B
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : one P2 B PBP
H7 : at CC PBP Q3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
============================
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < case H3.
Subgoal 2.2:

Variables: P1 P2 C Q1 Q2 A Q3 CC PBP B
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q2 A Q3
H6 : one P2 B PBP
H7 : at CC PBP Q3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
============================
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < apply H10 to H6.
Subgoal 2.2:

Variables: P1 P2 C Q1 Q2 A Q3 CC PBP B P3 P4 Q4
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q2 A Q3
H6 : one P2 B PBP
H7 : at CC PBP Q3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P1 B P3
H12 : context_t P3 P4 PBP Q4
H13 : bisim_up_to context_t P4 Q4
============================
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < apply H8 to H11.
Subgoal 2.2:

Variables: P1 P2 C Q1 Q2 A Q3 CC PBP B P3 P4 Q4
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q2 A Q3
H6 : one P2 B PBP
H7 : at CC PBP Q3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P1 B P3
H12 : context_t P3 P4 PBP Q4
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P1 Q0 -> (exists RR, one Q0 A RR /\ at CC P3 RR)
============================
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < apply H14 to H1.
Subgoal 2.2:

Variables: P1 P2 C Q1 Q2 A Q3 CC PBP B P3 P4 Q4 RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q2 A Q3
H6 : one P2 B PBP
H7 : at CC PBP Q3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P1 B P3
H12 : context_t P3 P4 PBP Q4
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P1 Q0 -> (exists RR, one Q0 A RR /\ at CC P3 RR)
H15 : one Q1 A RR
H16 : at CC P3 RR
============================
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < witness RR.
Subgoal 2.2:

Variables: P1 P2 C Q1 Q2 A Q3 CC PBP B P3 P4 Q4 RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q2 A Q3
H6 : one P2 B PBP
H7 : at CC PBP Q3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P1 B P3
H12 : context_t P3 P4 PBP Q4
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P1 Q0 -> (exists RR, one Q0 A RR /\ at CC P3 RR)
H15 : one Q1 A RR
H16 : at CC P3 RR
============================
 one Q1 A RR /\
   (exists P2 Q4, context_t RR P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < split.
Subgoal 2.2.1:

Variables: P1 P2 C Q1 Q2 A Q3 CC PBP B P3 P4 Q4 RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q2 A Q3
H6 : one P2 B PBP
H7 : at CC PBP Q3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P1 B P3
H12 : context_t P3 P4 PBP Q4
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P1 Q0 -> (exists RR, one Q0 A RR /\ at CC P3 RR)
H15 : one Q1 A RR
H16 : at CC P3 RR
============================
 one Q1 A RR

Subgoal 2.2.2 is:
 exists P2 Q4, context_t RR P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < search.
Subgoal 2.2.2:

Variables: P1 P2 C Q1 Q2 A Q3 CC PBP B P3 P4 Q4 RR
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q2 A Q3
H6 : one P2 B PBP
H7 : at CC PBP Q3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P1 B P3
H12 : context_t P3 P4 PBP Q4
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P1 Q0 -> (exists RR, one Q0 A RR /\ at CC P3 RR)
H15 : one Q1 A RR
H16 : at CC P3 RR
============================
 exists P2 Q4, context_t RR P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < case H12.
Subgoal 2.2.2:

Variables: P1 P2 C Q1 Q2 A Q3 CC PBP B P3 P4 Q4 RR C1
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q2 A Q3
H6 : one P2 B PBP
H7 : at CC PBP Q3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P1 B P3
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P1 Q0 -> (exists RR, one Q0 A RR /\ at CC P3 RR)
H15 : one Q1 A RR
H16 : at CC P3 RR
H17 : at C1 P4 P3
H18 : at C1 Q4 PBP
============================
 exists P2 Q4, context_t RR P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < apply concat_ctx2 to H17 H16 H18 H7.
Subgoal 2.2.2:

Variables: P1 P2 C Q1 Q2 A Q3 CC PBP B P3 P4 Q4 RR C1 C3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q2 A Q3
H6 : one P2 B PBP
H7 : at CC PBP Q3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P1 B P3
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P1 Q0 -> (exists RR, one Q0 A RR /\ at CC P3 RR)
H15 : one Q1 A RR
H16 : at CC P3 RR
H17 : at C1 P4 P3
H18 : at C1 Q4 PBP
H19 : at C3 P4 RR
H20 : at C3 Q4 Q3
============================
 exists P2 Q4, context_t RR P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < witness P4.
Subgoal 2.2.2:

Variables: P1 P2 C Q1 Q2 A Q3 CC PBP B P3 P4 Q4 RR C1 C3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q2 A Q3
H6 : one P2 B PBP
H7 : at CC PBP Q3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P1 B P3
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P1 Q0 -> (exists RR, one Q0 A RR /\ at CC P3 RR)
H15 : one Q1 A RR
H16 : at CC P3 RR
H17 : at C1 P4 P3
H18 : at C1 Q4 PBP
H19 : at C3 P4 RR
H20 : at C3 Q4 Q3
============================
 exists Q4, context_t RR P4 Q3 Q4 /\ bisim_up_to context_t P4 Q4 +

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < witness Q4.
Subgoal 2.2.2:

Variables: P1 P2 C Q1 Q2 A Q3 CC PBP B P3 P4 Q4 RR C1 C3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q2 A Q3
H6 : one P2 B PBP
H7 : at CC PBP Q3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P1 B P3
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P1 Q0 -> (exists RR, one Q0 A RR /\ at CC P3 RR)
H15 : one Q1 A RR
H16 : at CC P3 RR
H17 : at C1 P4 P3
H18 : at C1 Q4 PBP
H19 : at C3 P4 RR
H20 : at C3 Q4 Q3
============================
 context_t RR P4 Q3 Q4 /\ bisim_up_to context_t P4 Q4 +

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < split.
Subgoal 2.2.2.1:

Variables: P1 P2 C Q1 Q2 A Q3 CC PBP B P3 P4 Q4 RR C1 C3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q2 A Q3
H6 : one P2 B PBP
H7 : at CC PBP Q3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P1 B P3
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P1 Q0 -> (exists RR, one Q0 A RR /\ at CC P3 RR)
H15 : one Q1 A RR
H16 : at CC P3 RR
H17 : at C1 P4 P3
H18 : at C1 Q4 PBP
H19 : at C3 P4 RR
H20 : at C3 Q4 Q3
============================
 context_t RR P4 Q3 Q4

Subgoal 2.2.2.2 is:
 bisim_up_to context_t P4 Q4 +

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < search.
Subgoal 2.2.2.2:

Variables: P1 P2 C Q1 Q2 A Q3 CC PBP B P3 P4 Q4 RR C1 C3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H4 : one Q2 A Q3
H6 : one P2 B PBP
H7 : at CC PBP Q3
H8 : forall Q QBQ, one Q B QBQ ->
       (forall Q0, at C Q Q0 -> (exists RR, one Q0 A RR /\ at CC QBQ RR))
H9 : forall A P3, one P1 A P3 ->
       (exists Q1, one P2 A Q1 /\
            (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                 bisim_up_to context_t P4 Q2))
H10 : forall A Q1, one P2 A Q1 ->
        (exists P3, one P1 A P3 /\
             (exists P4 Q2, context_t P3 P4 Q1 Q2 /\
                  bisim_up_to context_t P4 Q2))
H11 : one P1 B P3
H13 : bisim_up_to context_t P4 Q4
H14 : forall Q0, at C P1 Q0 -> (exists RR, one Q0 A RR /\ at CC P3 RR)
H15 : one Q1 A RR
H16 : at CC P3 RR
H17 : at C1 P4 P3
H18 : at C1 Q4 PBP
H19 : at C3 P4 RR
H20 : at C3 Q4 Q3
============================
 bisim_up_to context_t P4 Q4 +

Subgoal 2.3 is:
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < backchain CH.
Subgoal 2.3:

Variables: P1 P2 C Q1 Q2 A Q3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A Q3
============================
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < apply H6 to H1.
Subgoal 2.3:

Variables: P1 P2 C Q1 Q2 A Q3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A Q3
H7 : one Q1 A Q3
============================
 exists P1, one Q1 A P1 /\
   (exists P2 Q4, context_t P1 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < witness Q3.
Subgoal 2.3:

Variables: P1 P2 C Q1 Q2 A Q3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A Q3
H7 : one Q1 A Q3
============================
 one Q1 A Q3 /\
   (exists P2 Q4, context_t Q3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +)

context_substitutive < split.
Subgoal 2.3.1:

Variables: P1 P2 C Q1 Q2 A Q3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A Q3
H7 : one Q1 A Q3
============================
 one Q1 A Q3

Subgoal 2.3.2 is:
 exists P2 Q4, context_t Q3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +

context_substitutive < search.
Subgoal 2.3.2:

Variables: P1 P2 C Q1 Q2 A Q3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A Q3
H7 : one Q1 A Q3
============================
 exists P2 Q4, context_t Q3 P2 Q3 Q4 /\ bisim_up_to context_t P2 Q4 +

context_substitutive < witness Q3.
Subgoal 2.3.2:

Variables: P1 P2 C Q1 Q2 A Q3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A Q3
H7 : one Q1 A Q3
============================
 exists Q4, context_t Q3 Q3 Q3 Q4 /\ bisim_up_to context_t Q3 Q4 +

context_substitutive < witness Q3.
Subgoal 2.3.2:

Variables: P1 P2 C Q1 Q2 A Q3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A Q3
H7 : one Q1 A Q3
============================
 context_t Q3 Q3 Q3 Q3 /\ bisim_up_to context_t Q3 Q3 +

context_substitutive < split.
Subgoal 2.3.2.1:

Variables: P1 P2 C Q1 Q2 A Q3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A Q3
H7 : one Q1 A Q3
============================
 context_t Q3 Q3 Q3 Q3

Subgoal 2.3.2.2 is:
 bisim_up_to context_t Q3 Q3 +

context_substitutive < search.
Subgoal 2.3.2.2:

Variables: P1 P2 C Q1 Q2 A Q3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A Q3
H7 : one Q1 A Q3
============================
 bisim_up_to context_t Q3 Q3 +

context_substitutive < backchain CH.
Subgoal 2.3.2.2:

Variables: P1 P2 C Q1 Q2 A Q3
CH : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2 +
H1 : at C P1 Q1
H2 : at C P2 Q2
H3 : bisim_up_to context_t P1 P2
H4 : one Q2 A Q3
H6 : forall Q Q0, at C Q Q0 -> one Q0 A Q3
H7 : one Q1 A Q3
============================
 bisim_up_to context_t Q3 Q3

context_substitutive < backchain context_reflexive.
Proof completed.
Abella < Theorem context_sound : 
is_sound context_t.


============================
 is_sound context_t

context_sound < apply context_substitutive.

H1 : substitutive_rel (bisim_up_to context_t)
============================
 is_sound context_t

context_sound < case H1.

H2 : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
       bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
============================
 is_sound context_t

context_sound < rename H2 to cs_lemma.

cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
============================
 is_sound context_t

context_sound < unfold.

cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
============================
 forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q

context_sound < coinduction.

cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
============================
 forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q #

context_sound < intros.

Variables: P Q
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H3 : bisim_up_to context_t P Q
============================
 bisim_up_to refl_t P Q #

context_sound < case H3.

Variables: P Q
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
============================
 bisim_up_to refl_t P Q #

context_sound < unfold.
Subgoal 1:

Variables: P Q
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
============================
 forall A P1, one P A P1 ->
   (exists Q1, one Q A Q1 /\
        (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))

Subgoal 2 is:
 forall A Q1, one Q A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))

context_sound < intros.
Subgoal 1:

Variables: P Q A P1
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one P A P1
============================
 exists Q1, one Q A Q1 /\
   (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +)

Subgoal 2 is:
 forall A Q1, one Q A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))

context_sound < apply H4 to H6.
Subgoal 1:

Variables: P Q A P1 Q2 P3 Q3
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one P A P1
H7 : one Q A Q2
H8 : context_t P1 P3 Q2 Q3
H9 : bisim_up_to context_t P3 Q3
============================
 exists Q1, one Q A Q1 /\
   (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +)

Subgoal 2 is:
 forall A Q1, one Q A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))

context_sound < witness Q2.
Subgoal 1:

Variables: P Q A P1 Q2 P3 Q3
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one P A P1
H7 : one Q A Q2
H8 : context_t P1 P3 Q2 Q3
H9 : bisim_up_to context_t P3 Q3
============================
 one Q A Q2 /\
   (exists P2 Q1, refl_t P1 P2 Q2 Q1 /\ bisim_up_to refl_t P2 Q1 +)

Subgoal 2 is:
 forall A Q1, one Q A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))

context_sound < split.
Subgoal 1.1:

Variables: P Q A P1 Q2 P3 Q3
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one P A P1
H7 : one Q A Q2
H8 : context_t P1 P3 Q2 Q3
H9 : bisim_up_to context_t P3 Q3
============================
 one Q A 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 A Q1, one Q A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))

context_sound < search.
Subgoal 1.2:

Variables: P Q A P1 Q2 P3 Q3
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one P A P1
H7 : one Q A Q2
H8 : context_t P1 P3 Q2 Q3
H9 : bisim_up_to context_t P3 Q3
============================
 exists P2 Q1, refl_t P1 P2 Q2 Q1 /\ bisim_up_to refl_t P2 Q1 +

Subgoal 2 is:
 forall A Q1, one Q A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))

context_sound < witness P1.
Subgoal 1.2:

Variables: P Q A P1 Q2 P3 Q3
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one P A P1
H7 : one Q A Q2
H8 : context_t P1 P3 Q2 Q3
H9 : bisim_up_to context_t P3 Q3
============================
 exists Q1, refl_t P1 P1 Q2 Q1 /\ bisim_up_to refl_t P1 Q1 +

Subgoal 2 is:
 forall A Q1, one Q A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))

context_sound < witness Q2.
Subgoal 1.2:

Variables: P Q A P1 Q2 P3 Q3
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one P A P1
H7 : one Q A Q2
H8 : context_t P1 P3 Q2 Q3
H9 : bisim_up_to context_t P3 Q3
============================
 refl_t P1 P1 Q2 Q2 /\ bisim_up_to refl_t P1 Q2 +

Subgoal 2 is:
 forall A Q1, one Q A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))

context_sound < split.
Subgoal 1.2.1:

Variables: P Q A P1 Q2 P3 Q3
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one P A P1
H7 : one Q A Q2
H8 : context_t P1 P3 Q2 Q3
H9 : bisim_up_to context_t P3 Q3
============================
 refl_t P1 P1 Q2 Q2

Subgoal 1.2.2 is:
 bisim_up_to refl_t P1 Q2 +

Subgoal 2 is:
 forall A Q1, one Q A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))

context_sound < search.
Subgoal 1.2.2:

Variables: P Q A P1 Q2 P3 Q3
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one P A P1
H7 : one Q A Q2
H8 : context_t P1 P3 Q2 Q3
H9 : bisim_up_to context_t P3 Q3
============================
 bisim_up_to refl_t P1 Q2 +

Subgoal 2 is:
 forall A Q1, one Q A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))

context_sound < case H8.
Subgoal 1.2.2:

Variables: P Q A P1 Q2 P3 Q3 C
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one P A P1
H7 : one Q A Q2
H9 : bisim_up_to context_t P3 Q3
H10 : at C P3 P1
H11 : at C Q3 Q2
============================
 bisim_up_to refl_t P1 Q2 +

Subgoal 2 is:
 forall A Q1, one Q A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))

context_sound < apply cs_lemma to H10 H11 H9.
Subgoal 1.2.2:

Variables: P Q A P1 Q2 P3 Q3 C
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one P A P1
H7 : one Q A Q2
H9 : bisim_up_to context_t P3 Q3
H10 : at C P3 P1
H11 : at C Q3 Q2
H12 : bisim_up_to context_t P1 Q2
============================
 bisim_up_to refl_t P1 Q2 +

Subgoal 2 is:
 forall A Q1, one Q A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))

context_sound < backchain CH.
Subgoal 2:

Variables: P Q
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
============================
 forall A Q1, one Q A Q1 ->
   (exists P1, one P A P1 /\
        (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +))

context_sound < intros.
Subgoal 2:

Variables: P Q A Q1
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one Q A Q1
============================
 exists P1, one P A P1 /\
   (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +)

context_sound < apply H5 to H6.
Subgoal 2:

Variables: P Q A Q1 P2 P3 Q3
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one Q A Q1
H7 : one P A P2
H8 : context_t P2 P3 Q1 Q3
H9 : bisim_up_to context_t P3 Q3
============================
 exists P1, one P A P1 /\
   (exists P2 Q2, refl_t P1 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +)

context_sound < witness P2.
Subgoal 2:

Variables: P Q A Q1 P2 P3 Q3
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one Q A Q1
H7 : one P A P2
H8 : context_t P2 P3 Q1 Q3
H9 : bisim_up_to context_t P3 Q3
============================
 one P A P2 /\
   (exists P1 Q2, refl_t P2 P1 Q1 Q2 /\ bisim_up_to refl_t P1 Q2 +)

context_sound < split.
Subgoal 2.1:

Variables: P Q A Q1 P2 P3 Q3
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one Q A Q1
H7 : one P A P2
H8 : context_t P2 P3 Q1 Q3
H9 : bisim_up_to context_t P3 Q3
============================
 one P A P2

Subgoal 2.2 is:
 exists P1 Q2, refl_t P2 P1 Q1 Q2 /\ bisim_up_to refl_t P1 Q2 +

context_sound < search.
Subgoal 2.2:

Variables: P Q A Q1 P2 P3 Q3
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one Q A Q1
H7 : one P A P2
H8 : context_t P2 P3 Q1 Q3
H9 : bisim_up_to context_t P3 Q3
============================
 exists P1 Q2, refl_t P2 P1 Q1 Q2 /\ bisim_up_to refl_t P1 Q2 +

context_sound < witness P2.
Subgoal 2.2:

Variables: P Q A Q1 P2 P3 Q3
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one Q A Q1
H7 : one P A P2
H8 : context_t P2 P3 Q1 Q3
H9 : bisim_up_to context_t P3 Q3
============================
 exists Q2, refl_t P2 P2 Q1 Q2 /\ bisim_up_to refl_t P2 Q2 +

context_sound < witness Q1.
Subgoal 2.2:

Variables: P Q A Q1 P2 P3 Q3
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one Q A Q1
H7 : one P A P2
H8 : context_t P2 P3 Q1 Q3
H9 : bisim_up_to context_t P3 Q3
============================
 refl_t P2 P2 Q1 Q1 /\ bisim_up_to refl_t P2 Q1 +

context_sound < split.
Subgoal 2.2.1:

Variables: P Q A Q1 P2 P3 Q3
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one Q A Q1
H7 : one P A P2
H8 : context_t P2 P3 Q1 Q3
H9 : bisim_up_to context_t P3 Q3
============================
 refl_t P2 P2 Q1 Q1

Subgoal 2.2.2 is:
 bisim_up_to refl_t P2 Q1 +

context_sound < search.
Subgoal 2.2.2:

Variables: P Q A Q1 P2 P3 Q3
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one Q A Q1
H7 : one P A P2
H8 : context_t P2 P3 Q1 Q3
H9 : bisim_up_to context_t P3 Q3
============================
 bisim_up_to refl_t P2 Q1 +

context_sound < case H8.
Subgoal 2.2.2:

Variables: P Q A Q1 P2 P3 Q3 C
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one Q A Q1
H7 : one P A P2
H9 : bisim_up_to context_t P3 Q3
H10 : at C P3 P2
H11 : at C Q3 Q1
============================
 bisim_up_to refl_t P2 Q1 +

context_sound < apply cs_lemma to H10 H11 H9.
Subgoal 2.2.2:

Variables: P Q A Q1 P2 P3 Q3 C
cs_lemma : forall P1 P2 C Q1 Q2, at C P1 Q1 -> at C P2 Q2 ->
             bisim_up_to context_t P1 P2 -> bisim_up_to context_t Q1 Q2
CH : forall P Q, bisim_up_to context_t P Q -> bisim_up_to refl_t P Q +
H4 : forall A P2, one P A P2 ->
       (exists Q2, one Q A Q2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H5 : forall A Q2, one Q A Q2 ->
       (exists P2, one P A P2 /\
            (exists P3 Q3, context_t P2 P3 Q2 Q3 /\
                 bisim_up_to context_t P3 Q3))
H6 : one Q A Q1
H7 : one P A P2
H9 : bisim_up_to context_t P3 Q3
H10 : at C P3 P2
H11 : at C Q3 Q1
H12 : bisim_up_to context_t P2 Q1
============================
 bisim_up_to refl_t P2 Q1 +

context_sound < backchain CH.
Proof completed.
Abella <