Kind name,action,proc type.
Import "ccs_core".
Define bisim_t : proc -> proc -> proc -> proc -> prop by
bisim_t P1 P2 Q1 Q2 :=
bisim_up_to refl_t P1 P2 /\ bisim_up_to refl_t Q1 Q2.
Define is_sound_fst : (proc -> proc -> proc -> proc -> prop) -> prop by
is_sound_fst Tech := forall P Q,
(exists R S, bisim_up_to refl_t P R /\ bisim_up_to Tech R S /\ bisim_up_to refl_t S Q)
-> bisim_up_to refl_t P Q.
Define is_sound_snd : (proc -> proc -> proc -> proc -> prop) -> prop by
is_sound_snd Tech := forall P Q, bisim_up_to Tech P Q ->
exists R S, bisim_up_to refl_t P R /\ bisim_up_to Tech R S /\ bisim_up_to refl_t S Q.
Theorem bisim_t_reflexive : forall P, bisim_t P P P P.
intros. unfold. backchain bisim_reflexive_. backchain bisim_reflexive_.
Theorem bisim_sound_fst : is_sound_fst bisim_t.
unfold. coinduction. intros. case H1.
rename H2 to Left. rename H3 to Middle. rename H4 to Right.
unfold.
intros Pstep.
Left : case Left. clear Left1. Left : apply Left to Pstep. clear Left. rename Left1 to PPstep.
Middle : case Middle. clear Middle1. Middle : apply Middle to PPstep. clear Middle. rename Middle1 to QQstep.
Right : case Right. clear Right1. Right : apply Right to QQstep. clear Right. rename Right1 to Qstep.
witness Q5. split. search.
witness P1. witness Q5. split. search.
case Left2. case Right2.
Bisim : case Middle2.
Link : apply bisim_transitive_ to Left3 Bisim.
Link : apply bisim_symmetric_ to Bisim1.
Link : apply bisim_transitive_ to Link1 Right3.
backchain 1 CH.
intros Qstep.
Right : case Right. Right : apply Right1 to Qstep. clear Right Right1. rename Right2 to Pstep.
Middle : case Middle. Middle : apply Middle1 to Pstep. clear Middle Middle1. rename Middle2 to PPstep.
Left : case Left. Left : apply Left1 to PPstep. clear Left Left1. rename Left2 to QQstep.
witness P5. split. search.
witness P5. witness Q1. split. search.
case Left3. case Right3.
Link : case Middle3.
Link : apply bisim_transitive_ to Left4 Link.
Link : apply bisim_symmetric_ to Link1.
Link : apply bisim_transitive_ to Link3 Right4.
backchain 1 CH.
Theorem bisim_sound_snd : is_sound_snd bisim_t.
unfold. intros.
witness P. witness Q. split.
backchain bisim_reflexive_.
search.
backchain bisim_reflexive_.
Theorem bisim_sound : is_sound bisim_t.
unfold. intros.
apply bisim_sound_snd. case H2. apply H3 to H1.
apply bisim_sound_fst. case H7. backchain H8.