Up to index of Isabelle/HOL/HOL-Complex/CSP-Prover
theory CSP_law_step2 = CSP_proc: (*-------------------------------------------*
| CSP-Prover |
| December 2004 |
| Yoshinao Isobe (AIST JAPAN) |
*-------------------------------------------*)
theory CSP_law_step2 = CSP_proc:
(* The following simplification is sometimes unexpected. *)
(* *)
(* not_None_eq: (x ~= None) = (EX y. x = Some y) *)
declare not_None_eq [simp del]
(*****************************************************************
1. step laws
2.
3.
4.
*****************************************************************)
consts
Renaming_step ::
"('a * 'a) set => 'a set => ('a => ('n,'a) proc) => ('n,'a) proc"
defs
Renaming_step_def :
"Renaming_step r X Pf ==
? y:(r `` X) -> (! x:{x. x:X & (x,y):r} .. (Pf x)[[r]])"
consts
Seq_compo_step ::
"'a set => ('a => ('n,'a) proc) => ('n,'a) proc => ('n,'a) proc"
defs
Seq_compo_step_def :
"Seq_compo_step X Pf Q == ? x:X -> (Pf x ;; Q)"
(*********************************************************
Renaming expansion
*********************************************************)
(*** domT ***)
lemma domT_Renaming_step:
"[[(? :X -> Pf) [[r]] ]]T ev =
[[Renaming_step r X Pf]]T ev"
apply (simp add: Renaming_step_def)
apply (rule eq_iffI)
(* => *)
apply (rule)
apply (simp add: Renaming_mem)
apply (simp add: Ext_pre_choice_mem)
apply (elim disjE conjE exE)
(* 1 *)
apply (simp)
(* 2 *)
apply (rule disjI2)
apply (simp add: ren_tr_Ev_decompo)
apply (elim conjE exE)
apply (rule_tac x="b" in exI)
apply (rule_tac x="ta" in exI)
apply (simp)
apply (rule conjI)
apply (simp add: Rep_int_choice_mem)
apply (simp add: Renaming_mem)
apply (fast)
apply (simp add: Image_iff)
apply (fast)
(* <= *)
apply (rule)
apply (simp add: Ext_pre_choice_mem)
apply (erule disjE, simp)
apply (simp add: Rep_int_choice_mem)
apply (elim disjE conjE exE)
apply (simp add: Image_iff)
apply (erule bexE)
apply (simp add: Renaming_mem)
apply (rule_tac x="[Ev x]t" in exI)
apply (simp add: Ext_pre_choice_mem)
(* *)
apply (simp add: Renaming_mem)
apply (elim conjE exE)
apply (rule_tac x="[Ev aa]t @t sa" in exI)
apply (simp add: Ext_pre_choice_mem)
apply (fast)
done
(*** domF ***)
lemma domF_Renaming_step:
"[[(? :X -> Pf) [[r]] ]]F ev =
[[Renaming_step r X Pf]]F ev"
apply (simp add: Renaming_step_def)
apply (rule eq_iffI)
(* => *)
apply (rule)
apply (simp add: Renaming_mem)
apply (simp add: Ext_pre_choice_mem)
apply (elim disjE conjE exE)
(* 1 *)
apply (simp add: ren_inv_def)
apply (force)
(* 2 *)
apply (simp add: ren_tr_Ev_decompo)
apply (elim conjE exE)
apply (rule disjI2)
apply (rule_tac x="b" in exI)
apply (rule_tac x="t" in exI)
apply (simp)
apply (simp add: Rep_int_choice_mem)
apply (rule conjI)
apply (simp add: Renaming_mem)
apply (fast)
apply (fast)
(* <= *)
apply (rule)
apply (simp add: Ext_pre_choice_mem)
apply (elim disjE conjE exE)
(* 1 *)
apply (simp add: Ext_pre_choice_mem)
apply (simp add: Renaming_mem)
apply (simp add: Ext_pre_choice_mem)
apply (simp add: ren_inv_def)
apply (force)
(* 2 *)
apply (simp add: Rep_int_choice_mem)
apply (simp add: Renaming_mem)
apply (elim conjE exE)
apply (rule_tac x="[Ev aa]t @t sb" in exI)
apply (simp add: Ext_pre_choice_mem)
apply (fast)
done
(*** domSF ***)
lemma domSF_Renaming_step:
"[[(? :X -> Pf) [[r]] ]]SF ev =
[[Renaming_step r X Pf]]SF ev"
apply (simp add: proc_eqSF_decompo)
apply (simp add: domT_Renaming_step)
apply (simp add: domF_Renaming_step)
done
(*------------------*
| csp law |
*------------------*)
lemma csp_Renaming_step:
"LET:fp df IN (? :X -> Pf) [[r]] =F
LET:fp df IN Renaming_step r X Pf"
apply (induct_tac fp)
by (simp_all add: eqF_def domSF_Renaming_step)
(*********************************************************
Sequential composition expansion
*********************************************************)
(*** domT ***)
lemma domT_Seq_compo_step:
"[[(? :X -> Pf) ;; Q]]T ev =
[[Seq_compo_step X Pf Q]]T ev"
apply (simp add: Seq_compo_step_def)
apply (rule eq_iffI)
(* => *)
apply (rule)
apply (simp add: Seq_compo_mem)
apply (simp add: Ext_pre_choice_mem)
apply (elim conjE exE disjE)
(* 1 *)
apply (simp)
(* 2 *)
apply (simp add: Seq_compo_mem)
apply (fast)
(* 3 *)
apply (simp)
apply (insert trace_last_nil_or_unnil)
apply (drule_tac x="sa" in spec)
apply (simp add: not_None_T)
apply (erule disjE, simp)
apply (elim conjE exE, simp)
apply (simp add: appt_ass_rev del: appt_ass)
apply (rule_tac x="a" in exI)
apply (rule_tac x="sb @t ta" in exI)
apply (simp)
apply (simp add: Seq_compo_mem)
apply (fast)
(* <= *)
apply (rule)
apply (simp add: Ext_pre_choice_mem)
apply (erule disjE, simp)
apply (simp add: Seq_compo_mem)
apply (elim conjE exE disjE)
(* 1 *)
apply (rule disjI1)
apply (rule_tac x="[Ev a]t @t sa" in exI, simp)
apply (simp add: Ext_pre_choice_mem)
apply (fast)
(* 2 *)
apply (rule disjI2)
apply (rule_tac x="[Ev a]t @t sa" in exI)
apply (rule_tac x="ta" in exI, simp)
apply (simp add: Ext_pre_choice_mem)
apply (fast)
done
(*** domF ***)
lemma domF_Seq_compo_step:
"[[(? :X -> Pf) ;; Q]]F ev =
[[Seq_compo_step X Pf Q]]F ev"
apply (simp add: Seq_compo_step_def)
apply (rule eq_iffI)
(* => *)
apply (rule)
apply (simp add: Seq_compo_mem)
apply (simp add: Ext_pre_choice_mem)
apply (elim conjE exE disjE)
(* 1 *)
apply (simp)
(* 2 *)
apply (simp add: Seq_compo_mem)
apply (fast)
(* 3 *)
apply (simp)
apply (insert trace_last_nil_or_unnil)
apply (drule_tac x="sb" in spec)
apply (simp add: not_None_T)
apply (erule disjE, simp)
apply (elim conjE exE, simp)
apply (simp add: appt_ass_rev del: appt_ass)
apply (rule_tac x="a" in exI)
apply (rule_tac x="sc @t t" in exI)
apply (simp)
apply (simp add: Seq_compo_mem)
apply (fast)
(* <= *)
apply (rule)
apply (simp add: Ext_pre_choice_mem)
apply (erule disjE)
(* 1 *)
apply (simp add: Seq_compo_mem)
apply (rule disjI1)
apply (simp add: Ext_pre_choice_mem)
apply (fast)
(* 2 *)
apply (elim conjE exE, simp)
apply (simp add: Seq_compo_mem)
apply (elim conjE exE disjE)
(* 2-1 *)
apply (simp add: Ext_pre_choice_mem)
apply (fast)
(* 2-2 *)
apply (rule disjI2)
apply (simp add: Ext_pre_choice_mem)
apply (rule_tac x="[Ev a]t @t sb" in exI)
apply (rule_tac x="t" in exI, simp)
apply (rule_tac x="a" in exI)
apply (rule_tac x="sb @t [Tick]t" in exI, simp)
done
(*** domSF ***)
lemma domSF_Seq_compo_step:
"[[(? :X -> Pf) ;; Q]]SF ev =
[[Seq_compo_step X Pf Q]]SF ev"
apply (simp add: proc_eqSF_decompo)
apply (simp add: domT_Seq_compo_step)
apply (simp add: domF_Seq_compo_step)
done
(*------------------*
| csp law |
*------------------*)
lemma csp_Seq_compo_step:
"LET:fp df IN (? :X -> Pf) ;; Q =F
LET:fp df IN Seq_compo_step X Pf Q"
apply (induct_tac fp)
by (simp_all add: eqF_def domSF_Seq_compo_step)
(****************** to add them again ******************)
declare not_None_eq [simp]
end
lemma domT_Renaming_step:
[[(? :X -> Pf) [[r]]]]T ev = [[Renaming_step r X Pf]]T ev
lemma domF_Renaming_step:
[[(? :X -> Pf) [[r]]]]F ev = [[Renaming_step r X Pf]]F ev
lemma domSF_Renaming_step:
[[(? :X -> Pf) [[r]]]]SF ev = [[Renaming_step r X Pf]]SF ev
lemma csp_Renaming_step:
LET:fp df IN (? :X -> Pf) [[r]] =F LET:fp df IN Renaming_step r X Pf
lemma domT_Seq_compo_step:
[[? :X -> Pf ;; Q]]T ev = [[Seq_compo_step X Pf Q]]T ev
lemma domF_Seq_compo_step:
[[? :X -> Pf ;; Q]]F ev = [[Seq_compo_step X Pf Q]]F ev
lemma domSF_Seq_compo_step:
[[? :X -> Pf ;; Q]]SF ev = [[Seq_compo_step X Pf Q]]SF ev
lemma csp_Seq_compo_step:
LET:fp df IN ? :X -> Pf ;; Q =F LET:fp df IN Seq_compo_step X Pf Q