Up to index of Isabelle/HOL/HOL-Complex/CSP/CSP_T/CSP_F/FNF_F
theory FNF_F_sf_hide(*-------------------------------------------* | CSP-Prover on Isabelle2005 | | Februaru 2006 | | April 2006 (modified) | | | | Yoshinao Isobe (AIST JAPAN) | *-------------------------------------------*) theory FNF_F_sf_hide = FNF_F_sf_induct + FNF_F_sf_ext: (* The following simplification rules are deleted in this theory file *) (* because they unexpectly rewrite UnionT and InterT. *) (* disj_not1: (~ P | Q) = (P --> Q) *) declare disj_not1 [simp del] (* The following simplification rules are deleted in this theory file *) (* P (if Q then x else y) = ((Q --> P x) & (~ Q --> P y)) *) declare split_if [split del] (***************************************************************** 1. full sequentialization for Hiding (P -- X) 2. 3. *****************************************************************) (*============================================================* | | | Hiding P -- X | | | *============================================================*) consts Pfun_Hiding :: "'a set => ('a proc => 'a proc)" SP_step_Hiding :: "'a set => ('a set => ('a => 'a proc) => 'a proc => ('a => 'a proc) => 'a proc)" fsfF_Hiding :: "'a proc => 'a set => 'a proc" ("(1_ /--seq _)" [84,85] 84) defs Pfun_Hiding_def : "Pfun_Hiding X == (%P1. P1 -- X)" SP_step_Hiding_def : "SP_step_Hiding X == (%A1 Pf1 Q1 SPf. (if (Q1 = STOP) then if (A1 Int X = {}) then ((? :A1 -> SPf) [+] Q1) else (((? :(A1-X) -> SPf) [+] Q1) [>seq (! :(A1 Int X) ..seq SPf)) else (((? :(A1-X) -> SPf) [+] Q1) |~|seq (! :(A1 Int X) ..seq SPf))))" fsfF_Hiding_def : "P1 --seq X == (fsfF_induct1 (Pfun_Hiding X) (SP_step_Hiding X) P1)" (*------------------------------------------------------------* | in fsfF_proc | *------------------------------------------------------------*) lemma fsfF_Hiding_in: "P1 : fsfF_proc ==> P1 --seq X : fsfF_proc" apply (simp add: fsfF_Hiding_def) apply (rule fsfF_induct1_in) apply (simp_all add: SP_step_Hiding_def) apply (simp split: split_if) apply (intro conjI impI) apply (simp_all add: fsfF_proc.intros) apply (rule fsfF_Int_choice_in) apply (simp_all add: fsfF_proc.intros) apply (simp add: fsfF_Rep_int_choice_com_in) apply (rule fsfF_Timeout_in) apply (simp_all add: fsfF_proc.intros) apply (simp add: fsfF_Rep_int_choice_com_in) apply (rule fsfF_Int_choice_in) apply (simp add: fsfF_proc.intros) apply (simp add: fsfF_Rep_int_choice_com_in) done (*------------------------------------------------------------* | syntactical transformation to fsfF | *------------------------------------------------------------*) lemma cspF_fsfF_Hiding_eqF: "P1 -- X =F P1 --seq X" apply (simp add: fsfF_Hiding_def) apply (rule cspF_rw_right) apply (rule cspF_fsfF_induct1_eqF[THEN cspF_sym]) apply (simp_all add: Pfun_Hiding_def SP_step_Hiding_def) apply (case_tac "Q1 = STOP") apply (rule cspF_rw_left) apply (rule cspF_decompo) apply (simp) apply (simp) apply (rule cspF_unit) apply (rule cspF_rw_left) apply (rule cspF_step) apply (simp) apply (simp split: split_if) apply (intro conjI impI) apply (rule cspF_rw_left) apply (rule cspF_IF) apply (rule cspF_rw_right) apply (rule cspF_unit) apply (rule cspF_reflex) apply (rule cspF_rw_left) apply (rule cspF_IF) apply (rule cspF_rw_right) apply (rule cspF_fsfF_Timeout_eqF[THEN cspF_sym]) apply (rule cspF_decompo) apply (rule cspF_decompo) apply (rule cspF_rw_right) apply (rule cspF_unit) apply (simp) apply (simp) apply (rule cspF_rw_right) apply (rule cspF_fsfF_Rep_int_choice_com_eqF[THEN cspF_sym]) apply (simp) (* Q1 ~= STOP *) apply (simp) apply (rule cspF_rw_left) apply (rule cspF_SKIP_or_DIV) apply (simp) apply (rule cspF_rw_right) apply (rule cspF_fsfF_Int_choice_eqF[THEN cspF_sym]) apply (rule cspF_decompo) apply (rule cspF_reflex) apply (rule cspF_rw_right) apply (rule cspF_fsfF_Rep_int_choice_com_eqF[THEN cspF_sym]) apply (rule cspF_reflex) (* congruence *) apply (simp split: split_if) apply (intro conjI impI) apply (rule cspF_rw_left, (simp | rule cspF_fsfF_Int_choice_eqF[THEN cspF_sym] | rule cspF_fsfF_Rep_int_choice_eqF[THEN cspF_sym] | rule cspF_fsfF_Rep_int_choice_com_eqF[THEN cspF_sym] | rule cspF_fsfF_Timeout_eqF[THEN cspF_sym] | rule cspF_decompo | rule cspF_reflex)+ , rule cspF_rw_right, (simp | rule cspF_fsfF_Int_choice_eqF[THEN cspF_sym] | rule cspF_fsfF_Rep_int_choice_eqF[THEN cspF_sym] | rule cspF_fsfF_Rep_int_choice_com_eqF[THEN cspF_sym] | rule cspF_fsfF_Timeout_eqF[THEN cspF_sym] | rule cspF_decompo | rule cspF_reflex)+)+ done (****************** to add them again ******************) declare split_if [split] declare disj_not1 [simp] end
lemma fsfF_Hiding_in:
P1.0 ∈ fsfF_proc ==> P1.0 --seq X ∈ fsfF_proc
lemma cspF_fsfF_Hiding_eqF:
P1.0 -- X =F P1.0 --seq X