(*-------------------------------------------* | CSP-Prover on Isabelle2004 | | November 2004 | | June 2005 (modified) | | | | CSP-Prover on Isabelle2005 | | October 2005 (modified) | | April 2006 (modified) | | | | Yoshinao Isobe (AIST JAPAN) | *-------------------------------------------*) theory CSP_syntax = Infra: (* The following simplification rules are deleted in this theory file *) (* because they unexpectly rewrite UnionT and InterT. *) (* Union (B ` A) = (UN x:A. B x) *) (* Inter (B ` A) = (INT x:A. B x) *) declare Union_image_eq [simp del] declare Inter_image_eq [simp del] (*-----------------------------------------------------------* | | | Process Type Definitions | | | | 'a proc : type of process expressions | | 'a : event | | | *-----------------------------------------------------------*) (********************************************************************* process expression *********************************************************************) datatype 'a proc = STOP | SKIP | DIV | Act_prefix "'a" "'a proc" ("(1_ /-> _)" [150,80] 80) | Ext_pre_choice "'a set" "'a => 'a proc" ("(1? :_ /-> _)" [900,80] 80) | Ext_choice "'a proc" "'a proc" ("(1_ /[+] _)" [72,73] 72) | Int_choice "'a proc" "'a proc" ("(1_ /|~| _)" [64,65] 64) | Rep_int_choice "'a selector set" "'a selector => 'a proc" ("(1!! :_ .. /_)" [900,68] 68) | IF "bool" "'a proc" "'a proc" ("(0IF _ /THEN _ /ELSE _)" [900,60,60] 88) | Parallel "'a proc" "'a set" "'a proc" ("(1_ /|[_]| _)" [76,0,77] 76) | Hiding "'a proc" "'a set" ("(1_ /-- _)" [84,85] 84) | Renaming "'a proc" "('a * 'a) set" ("(1_ /[[_]])" [84,0] 84) | Seq_compo "'a proc" "'a proc" ("(1_ /;; _)" [79,78] 78) | Depth_rest "'a proc" "nat" ("(1_ /|. _)" [84,900] 84) (*--------------------------------------------------------------------* | | | (1) binding power: | | IF > {Hiding, Renaming, Restriction} > | | {Act_prefix, Ext_pre_choice} > Seq_compo > Parallel > | | Ext_choice > Rep_int_choice > int_choice | | | | The binding power 90 is higher than ones of processes ops. | | | | (2) About ("(1_ /-> _)" [150,80] 80) | | The nth operator ! has the power 101. | | So, 150 > 101 is needed. | | | | (3) "selector" is necessary for having our CSP expressive | | with respect to the domain for stable-failures model F. | | | *--------------------------------------------------------------------*) (*** external prefix ***) syntax "@Ext_pre_choice" :: "pttrn => 'a set => 'a proc => 'a proc" ("(1? _:_ /-> _)" [900,900,80] 80) translations "? x:X -> P" == "? :X -> (%x. P)" (*** internal choice ***) consts Rep_int_choice_fun :: "('b => ('a selector)) => 'b set => ('b => 'a proc) => 'a proc" ("(1!!<_> :_ .. /_)" [0,900,68] 68) defs Rep_int_choice_fun_def : "!!<f> :X .. Pf == !! :(f ` X) .. (%x. (Pf ((inv f) x)))" (********* internal choice *********) syntax "@Rep_int_choice":: "pttrn => ('a selector) set => 'a proc => 'a proc" ("(1!! _:_ .. /_)" [900,900,68] 68) "@Rep_int_choice_UNIV":: "pttrn => 'a proc => 'a proc" ("(1!! _ .. /_)" [900,68] 68) "@Rep_int_choice_fun":: "('b => ('a selector)) => pttrn => 'b set => 'a proc => 'a proc" ("(1!!<_> _:_ .. /_)" [0,900,900,68] 68) "@Rep_int_choice_UNIV_fun":: "('b => ('a selector)) => pttrn => 'a proc => 'a proc" ("(1!!<_> _ .. /_)" [0,900,68] 68) translations "!! c:C .. P" == "!! :C .. (%c. P)" "!! c .. P" == "!! c:UNIV .. P" "!!<f> x:X .. P" == "!!<f> :X .. (%x. P)" "!!<f> x .. P" == "!!<f> x:UNIV .. P" (*** set, nat **) syntax "@Rep_int_choice_fun_set" :: "('a set) set => ('a set => 'a proc) => 'a proc" ("(1!set :_ .. /_)" [900,68] 68) "@Rep_int_choice_fun_nat" :: "nat set => (nat => 'a proc) => 'a proc" ("(1!nat :_ .. /_)" [900,68] 68) translations "!set :Xs .. Pf" == "!!<sel_set> :Xs .. Pf" "!nat :N .. Pf" == "!!<sel_nat> :N .. Pf" syntax "@Rep_int_choice_set" :: "pttrn => ('a set) set => ('a set => 'a proc) => 'a proc" ("(1!set _:_ .. /_)" [900,900,68] 68) "@Rep_int_choice_nat" :: "pttrn => nat set => (nat => 'a proc) => 'a proc" ("(1!nat _:_ .. /_)" [900,900,68] 68) translations "!set X:Xs .. P" == "!set :Xs .. (%X. P)" "!nat n:N .. P" == "!nat :N .. (%n. P)" syntax "@Rep_int_choice_set_UNIV" :: "pttrn => ('a set => 'a proc) => 'a proc" ("(1!set _ .. /_)" [900,68] 68) "@Rep_int_choice_nat_UNIV" :: "pttrn => (nat => 'a proc) => 'a proc" ("(1!nat _ .. /_)" [900,68] 68) translations "!set X .. P" == "!set X:UNIV .. P" "!nat n .. P" == "!nat n:UNIV .. P" (*** com ***) consts Rep_int_choice_com :: "'a set => ('a => 'a proc) => 'a proc" ("(1! :_ .. /_)" [900,68] 68) defs Rep_int_choice_com_def : "! :A .. Pf == !set X:{{a} |a. a : A} .. Pf (contents(X))" syntax "@Rep_int_choice_com" :: "pttrn => 'a set => ('a => 'a proc) => 'a proc" ("(1! _:_ .. /_)" [900,900,68] 68) "@Rep_int_choice_com_UNIV" :: "pttrn => ('a => 'a proc) => 'a proc" ("(1! _ .. /_)" [900,68] 68) translations "! x:X .. P" == "! :X .. (%x. P)" "! x .. P" == "! x:UNIV .. P" (*** f ***) consts Rep_int_choice_f :: "('b => 'a) => 'b set => ('b => 'a proc) => 'a proc" ("(1!<_> :_ .. /_)" [0,900,68] 68) defs Rep_int_choice_f_def : "!<f> :X .. Pf == ! :(f ` X) .. (%x. (Pf ((inv f) x)))" syntax "@Rep_int_choice_f":: "('b => 'a) => pttrn => 'b set => 'a proc => 'a proc" ("(1!<_> _:_ .. /_)" [0,900,900,68] 68) "@Rep_int_choice_f_UNIV":: "('b => 'a) => pttrn => 'a proc => 'a proc" ("(1!<_> _ .. /_)" [900,900,68] 68) translations "!<f> x:X .. P" == "!<f> :X .. (%x. P)" "!<f> x .. P" == "!<f> x:UNIV .. P" (*** internal prefix choice ***) consts Int_pre_choice :: "'a set => ('a => 'a proc) => 'a proc" ("(1! :_ /-> _)" [900,80] 80) defs Int_pre_choice_def : "! :X -> Pf == ! :X .. (%x. x -> (Pf x))" syntax "@Int_pre_choice" :: "pttrn => 'a set => 'a proc => 'a proc" ("(1! _:_ /-> _)" [900,900,80] 80) "@Int_pre_choice_UNIV" :: "pttrn => 'a proc => 'a proc" ("(1! _ /-> _)" [900,80] 80) translations "! x:X -> P" == "! :X -> (%x. P)" "! x -> P" == "! x:UNIV -> P" (*** sending and receiving prefixes ***) consts Send_prefix :: "('x => 'a) => 'x => 'a proc => 'a proc" ("(1_ ! _ /-> _)" [900,1000,80] 80) Nondet_send_prefix :: "('x => 'a) => 'x set => ('x => 'a proc) => 'a proc" Rec_prefix :: "('x => 'a) => 'x set => ('x => 'a proc) => 'a proc" defs Send_prefix_def : "a ! x -> P == a x -> P" Nondet_send_prefix_def : "Nondet_send_prefix f X Pf == ! :(f ` X) -> (%x. (Pf ((inv f) x)))" Rec_prefix_def : "Rec_prefix f X Pf == ? :(f ` X) -> (%x. (Pf ((inv f) x)))" syntax "@Nondet_send_prefix" :: "('x => 'a) => pttrn => 'x set => 'a proc => 'a proc" ("(1_ !? _:_ /-> _)" [900,900,1000,80] 80) "@Nondet_send_prefix_UNIV" :: "('x => 'a) => pttrn => 'a proc => 'a proc" ("(1_ !? _ /-> _)" [900,900,80] 80) "@Rec_prefix" :: "('x => 'a) => pttrn => 'x set => 'a proc => 'a proc" ("(1_ ? _:_ /-> _)" [900,900,1000,80] 80) "@Rec_Prefix_UNIV" :: "('x => 'a) => pttrn => 'a proc => 'a proc" ("(1_ ? _ /-> _)" [900,900,80] 80) translations "a !? x:X -> P" == "Nondet_send_prefix a X (%x. P)" "a !? x -> P" == "a !? x:UNIV -> P" "a ? x:X -> P" == "Rec_prefix a X (%x. P)" "a ? x -> P" == "a? x:UNIV -> P" (*** unfolding syntactic sugar ***) lemmas csp_prefix_ss_def = Int_pre_choice_def Send_prefix_def Nondet_send_prefix_def Rec_prefix_def (*** parallel ***) syntax "_Interleave" :: "'a proc => 'a proc => 'a proc" ("(1_ /||| _)" [76,77] 76) "_Synchro" :: "'a proc => 'a proc => 'a proc" ("(1_ /|| _)" [76,77] 76) translations "P ||| Q" == "P |[{}]| Q" "P || Q" == "P |[UNIV]| Q" consts Alpha_parallel :: "'a proc => 'a set => 'a set => 'a proc => 'a proc" ("(1_ /(2|[_,/_]|)/ _)" [76,0,0,77] 76) defs Alpha_parallel_def : "P |[X,Y]| Q == (P |[- X]| SKIP) |[X Int Y]| (Q |[- Y]| SKIP)" consts Inductive_parallel :: "('a proc * 'a set) list => 'a proc" ("(1[||] _)" [77] 77) primrec "[||] [] = SKIP" "[||] (PX # PXs) = (fst PX) |[snd PX, Union (snd ` set PXs)]| ([||] PXs)" consts Rep_parallel :: "'i set => ('i => ('a proc * 'a set)) => 'a proc" ("(1[||]:_ /_)" [90,77] 77) defs Rep_parallel_def : "[||]:I PXf == [||] (map PXf (SOME Is. Is isListOf I))" syntax "@Rep_parallel" :: "pttrn => 'i set => ('a proc * 'a set) => 'a proc" ("(1[||] _:_ .. /_)" [900,90,77] 77) translations "[||] i:I .. PX" == "[||]:I (%i. PX)" (************************************ | empty Index | ************************************) lemma Rep_parallel_empty[simp]: "I = {} ==> [||]:I PXf = SKIP" by (simp add: Rep_parallel_def) (************************************ | one Index | ************************************) lemma Rep_parallel_one: "I = {i} ==> [||]:I PXf = (fst (PXf i)) |[snd (PXf i), {}]| SKIP" by (simp add: Rep_parallel_def) (*** timeout ***) syntax "_Timeout" :: "'a proc => 'a proc => 'a proc" ("(1_ /[> _)" [73,74] 73) translations "P [> Q" == "(P |~| STOP) [+] Q" (*** it is sometimes useful to prevent automatical unfolding [> ***) consts Timeout :: "'a proc => 'a proc => 'a proc" ("(1_ /[>def _)" [73,74] 73) defs Timeout_def : "P [>def Q == P [> Q" (*------------------------------------* | | | X-Symbols | | | *------------------------------------*) syntax (output) "_PrefixX" :: "'a => 'a proc => 'a proc" ("(1_ /-> _)" [150,80] 80) "_Ext_pre_choiceX" :: "pttrn => 'a set => 'a proc => 'a proc" ("(1? _:_ /-> _)" [900,900,80] 80) "_Ext_choiceX" :: "'a proc => 'a proc => 'a proc" ("(1_ /[+] _)" [72,73] 72) "_Int_choiceX" :: "'a proc => 'a proc => 'a proc" ("(1_ /|~| _)" [64,65] 64) "_Int_pre_choiceX" :: "pttrn => 'a set => 'a proc => 'a proc" ("(1! _:_ /-> _)" [900,900,80] 80) syntax (xsymbols) "_PrefixX" :: "'a => 'a proc => 'a proc" ("(1_ /-> _)" [150,80] 80) "_Ext_pre_choiceX" :: "pttrn => 'a set => 'a proc => 'a proc" ("(1? _:_ /-> _)" [900,900,80] 80) "_Ext_choiceX" :: "'a proc => 'a proc => 'a proc" ("(1_ /\<box> _)" [72,73] 72) "_Int_choiceX" :: "'a proc => 'a proc => 'a proc" ("(1_ /\<sqinter> _)" [64,65] 64) "_Int_pre_choiceX" :: "pttrn => 'a set => 'a proc => 'a proc" ("(1! _:_ /-> _)" [900,900,80] 80) translations "a -> P" == "a -> P" "? x:X -> P" == "? x:X -> P" "P \<box> Q" == "P [+] Q" "P \<sqinter> Q" == "P |~| Q" "! x:X -> P" == "! x:X -> P" syntax (output) "_Nondet_send_prefixX" :: "('x => 'a) => pttrn => 'x set => 'a proc => 'a proc" ("(1_ !? _:_ /-> _)" [900,900,1000,80] 80) "_Nondet_send_prefix_UNIVX" :: "('x => 'a) => pttrn => 'a proc => 'a proc" ("(1_ !? _ /-> _)" [900,900,80] 80) "_Send_prefixX" :: "('x => 'a) => 'x => 'a proc => 'a proc" ("(1_ ! _ /-> _)" [900,1000,80] 80) "_Rec_prefixX" :: "('x => 'a) => pttrn => 'x set => 'a proc => 'a proc" ("(1_ ? _:_ /-> _)" [900,900,1000,80] 80) "_Rec_prefix_UNIVX" :: "('x => 'a) => pttrn => 'a proc => 'a proc" ("(1_ ? _ /-> _)" [900,900,80] 80) syntax (xsymbols) "_Nondet_send_prefixX" :: "('x => 'a) => pttrn => 'x set => 'a proc => 'a proc" ("(1_ !? _:_ /-> _)" [900,900,1000,80] 80) "_Nondet_send_prefix_UNIVX" :: "('x => 'a) => pttrn => 'a proc => 'a proc" ("(1_ !? _ /-> _)" [900,900,80] 80) "_Send_prefixX" :: "('x => 'a) => 'x => 'a proc => 'a proc" ("(1_ ! _ /-> _)" [900,1000,80] 80) "_Rec_prefixX" :: "('x => 'a) => pttrn => 'x set => 'a proc => 'a proc" ("(1_ ? _:_ /-> _)" [900,900,1000,80] 80) "_Rec_prefix_UNIVX" :: "('x => 'a) => pttrn => 'a proc => 'a proc" ("(1_ ? _ /-> _)" [900,900,80] 80) translations "a !? x:X -> P" == "a !? x:X -> P" "a !? x -> P" == "a !? x:UNIV -> P" "a ! x -> P" == "a ! x -> P" "a ? x:X -> P" == "a ? x:X -> P" "a ? x -> P" == "a ? x:UNIV -> P" syntax (output) "_Proc_nameX" :: "'n => 'a proc" ("<_>" [0] 90) "_TimeoutX" :: "'a proc => 'a proc => 'a proc" ("(1_ /[> _)" [73,74] 73) "_TimeoutdefX" :: "'a proc => 'a proc => 'a proc" ("(1_ /[>def _)" [73,74] 73) "_HidingX" :: "'a proc => 'a set => 'a proc" ("(1_ /-- _)" [84,85] 84) "_RenamingX" :: "'a proc => ('a * 'a) set => 'a proc" ("(1_ /[[_]])" [84,0] 84) "_Depth_rest" :: "'a proc => 'a proc => 'a proc" ("(1_ /|. _)" [84,900] 84) syntax (xsymbols) "_Proc_nameX" :: "'n => 'a proc" ("〈_〉" [0] 90) "_TimeoutX" :: "'a proc => 'a proc => 'a proc" ("(1_ /\<rhd> _)" [73,74] 73) "_TimeoutdefX":: "'a proc => 'a proc => 'a proc" ("(1_ /\<unrhd> _)" [73,74] 73) "_HidingX" :: "'a proc => 'a set => 'a proc" ("(1_ /\<midarrow> _)" [84,85] 84) "_RenamingX" :: "'a proc => ('a * 'a) set => 'a proc" ("(1_ /[|_|])" [84,0] 84) "_Depth_rest" :: "'a proc => 'a proc => 'a proc" ("(1_ /⌊ _)" [84,900] 84) translations "P \<rhd> Q" == "(P |~| STOP) [+] Q" "P \<unrhd> Q" == "P [>def Q" "P \<midarrow> X" == "P -- X" "P [|r|]" == "P [[r]]" "P ⌊ n" == "P |. n" (********************************************************************* recursive process (fixed point) and process expression (process with variable) *********************************************************************) types ('p,'a) procfun = "('p => 'a proc) => 'a proc" types ('p,'a) procFun = "('p => 'a proc) => ('p => 'a proc)" types ('p,'a) procDef = "(('p => 'a proc) * 'p) => 'a proc" (* Tarski's fixed point *) consts FIXn :: "nat => ('p,'a) procFun => ('p => 'a proc)" ("FIX[_] _" [0,1000] 55) FIX :: "('p,'a) procFun => ('p => 'a proc)" ("FIX _" [1000] 55) defs FIXn_def : "FIX[n] PF == (PF^n) (%q. DIV)" FIX_def : "FIX PF == (%p. (!nat n .. ((FIX[n] PF) p)))" (* Banach's fixed point *) consts FIX1n :: "nat => ('p,'a) procFun => ('p => 'a proc)" ("FIX![_] _" [0,1000] 55) FIX1 :: "('p,'a) procFun => ('p => 'a proc)" ("FIX! _" [1000] 55) AnyInitProc :: "'a proc" (* note: The type of AnyInitProc is declared, *) (* note: but it is not needed to be defined. *) defs FIX1n_def : "FIX![n] PF == (PF^n) (%q. AnyInitProc)" FIX1_def : "FIX! PF == (%p. (!nat n .. (((FIX![n] PF) p) |. n)))" (*** Procx ***) consts Procfun :: "('p,'a) procfun set" ProcFun :: "('p,'a) procFun set" defs ProcFun_def: "ProcFun == {PF. (ALL p. (%f. PF f p) : Procfun)}" inductive "Procfun" intros Procfun_p: "(%f. f p) : Procfun" Procfun_STOP: "(%f. STOP) : Procfun" Procfun_SKIP: "(%f. SKIP) : Procfun" Procfun_DIV: "(%f. DIV) : Procfun" Procfun_Act_prefix: "Pf : Procfun ==> (%f. a -> (Pf f)) : Procfun" Procfun_Ext_pre_choice: "[| ALL a. Pff a : Procfun |] ==> (%f. ? a:X -> (Pff a f)) : Procfun" Procfun_Ext_choice: "[| Pf : Procfun ; Qf : Procfun |] ==> (%f. (Pf f) [+] (Qf f)) : Procfun" Procfun_Int_choice: "[| Pf : Procfun ; Qf : Procfun |] ==> (%f. (Pf f) |~| (Qf f)) : Procfun" Procfun_Rep_int_choice0: "[| ALL c. Pff c : Procfun |] ==> (%f. !! c:C .. (Pff c f)) : Procfun" Procfun_IF: "[| Pf : Procfun ; Qf : Procfun |] ==> (%f. IF b THEN (Pf f) ELSE (Qf f)) : Procfun" Procfun_Parallel: "[| Pf : Procfun ; Qf : Procfun |] ==> (%f. (Pf f) |[X]| (Qf f)) : Procfun" Procfun_Hiding: "Pf : Procfun ==> (%f. (Pf f) -- X) : Procfun" Procfun_Renaming: "Pf : Procfun ==> (%f. (Pf f) [[r]]) : Procfun" Procfun_Seq_compo: "[| Pf : Procfun ; Qf : Procfun |] ==> (%f. (Pf f) ;; (Qf f)) : Procfun" Procfun_Depth_rest: "Pf : Procfun ==> (%f. (Pf f) |. n) : Procfun" lemma Procfun_Rep_int_choice_fun: "[| ALL a. Pff a : Procfun |] ==> (%f. !!<g> a:X .. (Pff a f)) : Procfun" by (simp add: Rep_int_choice_fun_def Procfun_Rep_int_choice0) lemma Procfun_Rep_int_choice_com: "[| ALL a. Pff a : Procfun |] ==> (%f. ! a:X .. (Pff a f)) : Procfun" apply (simp add: Rep_int_choice_com_def) apply (simp add: Procfun_Rep_int_choice_fun) done lemma Procfun_Rep_int_choice_f: "[| ALL a. Pff a : Procfun |] ==> (%f. !<g> a:X .. (Pff a f)) : Procfun" apply (simp add: Rep_int_choice_f_def) apply (rule Procfun_Rep_int_choice_com) by (auto) lemmas Procfun_Rep_int_choice = Procfun_Rep_int_choice0 Procfun_Rep_int_choice_fun Procfun_Rep_int_choice_com Procfun_Rep_int_choice_f lemmas Procfun_basic_def = Procfun_p Procfun_STOP Procfun_SKIP Procfun_DIV Procfun_Act_prefix Procfun_Ext_pre_choice Procfun_Ext_choice Procfun_Int_choice Procfun_Rep_int_choice Procfun_IF Procfun_Parallel Procfun_Hiding Procfun_Renaming Procfun_Seq_compo Procfun_Depth_rest lemma Procfun_const: "(%f. P) : Procfun" apply (induct_tac P) apply (simp_all add: Procfun_basic_def) done (*** simp for Procfun ***) lemma Procfun_p_iff: "(%f. f p) : Procfun" by (simp add: Procfun_basic_def) lemma Procfun_STOP_iff: "(%f. STOP) : Procfun" by (simp add: Procfun_basic_def) lemma Procfun_SKIP_iff: "(%f. SKIP) : Procfun" by (simp add: Procfun_basic_def) lemma Procfun_DIV_iff: "(%f. DIV) : Procfun" by (simp add: Procfun_basic_def) lemma Procfun_Act_prefix_iff: "(%f. a -> (Pf f)) : Procfun = (Pf : Procfun)" apply (rule) apply (erule Procfun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pf = Pfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: Procfun_basic_def) lemma Procfun_Ext_pre_choice_iff: "(%f. ? a:X -> (Pff a f)) : Procfun = (ALL a. Pff a : Procfun)" apply (rule) apply (erule Procfun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pff = Pffa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: Procfun_basic_def) lemma Procfun_Ext_choice_iff: "(%f. (Pf f) [+] (Qf f)) : Procfun = (Pf : Procfun & Qf : Procfun)" apply (rule) apply (erule Procfun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: Procfun_basic_def) lemma Procfun_Int_choice_iff: "(%f. (Pf f) |~| (Qf f)) : Procfun = (Pf : Procfun & Qf : Procfun)" apply (rule) apply (erule Procfun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: Procfun_basic_def) lemma Procfun_Rep_int_choice0_iff: "(%f. !! c:C .. (Pff c f)) : Procfun = (ALL c. Pff c : Procfun)" apply (rule) apply (erule Procfun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pff = Pffa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: Procfun_basic_def) lemma Procfun_IF_iff: "(%f. IF b THEN (Pf f) ELSE (Qf f)) : Procfun = (Pf : Procfun & Qf : Procfun)" apply (rule) apply (erule Procfun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: Procfun_basic_def) lemma Procfun_Parallel_iff: "(%f. (Pf f) |[X]| (Qf f)) : Procfun = (Pf : Procfun & Qf : Procfun)" apply (rule) apply (erule Procfun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: Procfun_basic_def) lemma Procfun_Hiding_iff: "(%f. Pf f -- X) : Procfun = (Pf : Procfun)" apply (rule) apply (erule Procfun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (simp add: expand_fun_eq[THEN sym]) by (simp add: Procfun_basic_def) lemma Procfun_Renaming_iff: "(%f. (Pf f) [[r]]) : Procfun = (Pf : Procfun)" apply (rule) apply (erule Procfun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pf = Pfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: Procfun_basic_def) lemma Procfun_Seq_compo_iff: "(%f. (Pf f) ;; (Qf f)) : Procfun = (Pf : Procfun & Qf : Procfun)" apply (rule) apply (erule Procfun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: Procfun_basic_def) lemma Procfun_Depth_rest_iff: "(%f. (Pf f) |. n) : Procfun = (Pf : Procfun)" apply (rule) apply (erule Procfun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pf = Pfa") apply (simp) apply (simp add: expand_fun_eq) apply (simp add: Procfun_basic_def) done lemmas Procfun_iff = Procfun_p_iff Procfun_SKIP_iff Procfun_STOP_iff Procfun_DIV_iff Procfun_Act_prefix_iff Procfun_Ext_pre_choice_iff Procfun_Ext_choice_iff Procfun_Int_choice_iff Procfun_Rep_int_choice0_iff Procfun_IF_iff Procfun_Parallel_iff Procfun_Hiding_iff Procfun_Renaming_iff Procfun_Seq_compo_iff Procfun_Depth_rest_iff declare Procfun_iff [simp] lemma Procfun_Rep_int_choice_fun_iff[simp]: "inj g ==> (%f. !!<g> a:X .. (Pff a f)) : Procfun = (ALL a. Pff a : Procfun)" apply (auto simp add: Rep_int_choice_fun_def) apply (drule_tac x="g a" in spec) apply (simp) done lemma Procfun_Rep_int_choice_com_iff[simp]: "(%f. ! a:X .. (Pff a f)) : Procfun = (ALL a. Pff a : Procfun)" apply (auto simp add: Rep_int_choice_com_def) apply (drule_tac x="{a}" in spec) apply (simp) done lemma Procfun_Rep_int_choice_f_iff[simp]: "inj g ==> (%f. !<g> a:X .. (Pff a f)) : Procfun = (ALL a. Pff a : Procfun)" apply (simp add: Rep_int_choice_f_def) apply (auto) apply (drule_tac x="g a" in spec) apply (simp) done lemma Procfun_Alpha_parallel_iff[simp]: "(%f. (Pf f) |[X,Y]| (Qf f)) : Procfun = (Pf : Procfun & Qf : Procfun)" apply (simp add: Alpha_parallel_def) done (* lemma Procfun_basic_def_test: "[| ALL a. Pff a : Procfun |] ==> (%f. ! a:X .. (Pff a f)) : Procfun" by (simp) *) (*------------------------------------------------------* | "Procfun.induct" is available. | | | | apply (rule Procfun.induct[of P PR]) | | | *------------------------------------------------------*) lemma compo_in_Procfun1: "[| Pf : Procfun ; QF : ProcFun |] ==> (%f. Pf (QF f)) : Procfun" apply (rule Procfun.induct[of Pf "(%Pf. (%f. Pf (QF f)) : Procfun)"]) apply (simp_all) apply (simp add: ProcFun_def) done lemma compo_in_Procfun2: "[| Pf : Procfun ; QF : ProcFun |] ==> Pf o QF : Procfun" by (simp add: comp_def compo_in_Procfun1) lemmas compo_in_Procfun = compo_in_Procfun1 compo_in_Procfun2 lemma compo_in_Procfun_ALL: "ALL Pf QF. (Pf : Procfun & QF : ProcFun ) --> (%f. Pf (QF f)) : Procfun" by (simp add: compo_in_Procfun) lemma compo_in_ProcFun1: "[| PF : ProcFun ; QF : ProcFun |] ==> (%f. PF (QF f)): ProcFun" apply (simp add: ProcFun_def) apply (intro allI) apply (drule_tac x="p" in spec) apply (insert compo_in_Procfun_ALL) apply (drule_tac x="(%f. PF f p)" in spec) apply (drule_tac x="QF" in spec) apply (simp add: ProcFun_def) done lemma compo_in_ProcFun2: "[| PF : ProcFun ; QF : ProcFun |] ==> PF o QF : ProcFun" by (simp add: comp_def compo_in_ProcFun1) lemmas compo_in_ProcFun = compo_in_ProcFun1 compo_in_ProcFun2 lemma iteration_in_ProcFun: "PF : ProcFun ==> PF ^ n : ProcFun" apply (induct_tac n) apply (simp add: ProcFun_def) apply (simp add: compo_in_ProcFun) done lemma iteration_in_Procfun: "PF : ProcFun ==> (%f. (PF ^ n) f p) : Procfun" apply (insert iteration_in_ProcFun[of PF n]) apply (simp) apply (simp add: ProcFun_def) done (*------------------------------------------------------* | | | single recursion by MU operator | | | *------------------------------------------------------*) datatype mup = MUp consts MUX :: "('a proc => 'a proc) => 'a proc" MUX1 :: "('a proc => 'a proc) => 'a proc" ("MUX!") defs MUX_def : "MUX PX == (FIX (%f. (%p. (PX (f MUp))))) MUp" MUX1_def : "MUX1 PX == (FIX! (%f. (%p. (PX (f MUp))))) MUp" syntax "@MU" :: "pttrn => 'a proc => 'a proc" ("(1MU _ .. _)" [900,62] 62) "@MU1" :: "pttrn => 'a proc => 'a proc" ("(1MU! _ .. _)" [900,62] 62) translations "MU X .. P" == "MUX (%X. P)" "MU! X .. P" == "MUX! (%X. P)" syntax (output) "_MU" :: "pttrn => 'a proc => 'a proc" ("(1MU _ .. _)" [900,62] 62) "_MU1" :: "pttrn => 'a proc => 'a proc" ("(1MU! _ .. _)" [900,62] 62) syntax (xsymbols) "_MU" :: "pttrn => 'a proc => 'a proc" ("(1μ _ .. _)" [900,62] 62) "_MU1" :: "pttrn => 'a proc => 'a proc" ("(1μ! _ .. _)" [900,62] 62) translations "μ X .. P" == "MU X .. P" "μ! X .. P" == "MU! X .. P" consts ProcX :: "('a proc => 'a proc) set" defs ProcX_def: "ProcX == {PX. (%X. PX (X MUp)) : Procfun}" (*** Procfun lemma ***) lemma Procfun_MU[simp]: "(ALL Pf:Procfun. (%f. (PfX f (Pf f))) : Procfun) ==> (%f. MUX (PfX f)) : Procfun" apply (simp add: MUX_def FIX_def) apply (rule allI) apply (simp add: FIXn_def) apply (induct_tac n) apply (simp) apply (simp) done lemma Procfun_MU1[simp]: "(ALL Pf:Procfun. (%f. (PfX f (Pf f))) : Procfun) ==> (%f. MUX! (PfX f)) : Procfun" apply (simp add: MUX1_def FIX1_def) apply (rule allI) apply (simp add: FIX1n_def) apply (induct_tac n) apply (simp add: Procfun_const) apply (simp) done lemmas Procfun_def = Procfun_basic_def Procfun_MU Procfun_MU1 (*** Procfun test ***) lemma "(%Z. (MU X .. a -> (MU! Y .. b -> X [+] c -> Y |~| d -> Z))) : ProcX" apply (simp add: ProcX_def) done (************************************************************* Syntactical functions *************************************************************) (*** guarded (rec_proc_fun) ***) consts gSKIPfun :: "('p,'a) procfun set" nohidefun :: "('p,'a) procfun set" gProcfun :: "('p,'a) procfun set" (*** gSKIP ***) inductive "gSKIPfun" intros gSKIPfun_STOP: "(%f. STOP) : gSKIPfun" gSKIPfun_DIV: "(%f. DIV) : gSKIPfun" gSKIPfun_Act_prefix: "Pf : Procfun ==> (%f. a -> (Pf f)) : gSKIPfun" gSKIPfun_Ext_pre_choice: "[| ALL a. Pff a : Procfun |] ==> (%f. ? a:X -> (Pff a f)) : gSKIPfun" gSKIPfun_Ext_choice: "[| Pf : gSKIPfun ; Qf : gSKIPfun |] ==> (%f. (Pf f) [+] (Qf f)) : gSKIPfun" gSKIPfun_Int_choice: "[| Pf : gSKIPfun ; Qf : gSKIPfun |] ==> (%f. (Pf f) |~| (Qf f)) : gSKIPfun" gSKIPfun_Rep_int_choice0: "[| ALL c. Pff c : gSKIPfun |] ==> (%f. !! c:C .. (Pff c f)) : gSKIPfun" gSKIPfun_IF: "[| Pf : gSKIPfun ; Qf : gSKIPfun |] ==> (%f. IF b THEN (Pf f) ELSE (Qf f)) : gSKIPfun" gSKIPfun_Parallel: "[| (Pf : gSKIPfun & Qf : Procfun) | (Pf : Procfun & Qf : gSKIPfun) |] ==> (%f. (Pf f) |[X]| (Qf f)) : gSKIPfun" gSKIPfun_Renaming: "Pf : gSKIPfun ==> (%f. (Pf f) [[r]]) : gSKIPfun" gSKIPfun_Seq_compo: "[| (Pf : gSKIPfun & Qf : Procfun) | (Pf : Procfun & Qf : gSKIPfun) |] ==> (%f. (Pf f) ;; (Qf f)) : gSKIPfun" gSKIPfun_Depth_rest_fun: "Pf : gSKIPfun ==> (%f. (Pf f) |. n) : gSKIPfun" gSKIPfun_Depth_rest_const: "(%f. P |. 0) : gSKIPfun" lemmas gSKIPfun_Depth_rest = gSKIPfun_Depth_rest_fun gSKIPfun_Depth_rest_const lemma gSKIPfun_Rep_int_choice_fun: "[| ALL a. Pff a : gSKIPfun |] ==> (%f. !!<g> a:X .. (Pff a f)) : gSKIPfun" by (simp add: Rep_int_choice_fun_def gSKIPfun_Rep_int_choice0) lemma gSKIPfun_Rep_int_choice_com: "[| ALL a. Pff a : gSKIPfun |] ==> (%f. ! a:X .. (Pff a f)) : gSKIPfun" apply (simp add: Rep_int_choice_com_def) apply (simp add: gSKIPfun_Rep_int_choice_fun) done lemma gSKIPfun_Rep_int_choice_f: "[| ALL a. Pff a : gSKIPfun |] ==> (%f. !<g> a:X .. (Pff a f)) : gSKIPfun" apply (simp add: Rep_int_choice_f_def) apply (rule gSKIPfun_Rep_int_choice_com) by (auto) lemmas gSKIPfun_Rep_int_choice = gSKIPfun_Rep_int_choice0 gSKIPfun_Rep_int_choice_fun gSKIPfun_Rep_int_choice_com gSKIPfun_Rep_int_choice_f lemmas gSKIPfun_basic_def = gSKIPfun_STOP gSKIPfun_DIV gSKIPfun_Act_prefix gSKIPfun_Ext_pre_choice gSKIPfun_Ext_choice gSKIPfun_Int_choice gSKIPfun_Rep_int_choice gSKIPfun_IF gSKIPfun_Parallel gSKIPfun_Renaming gSKIPfun_Seq_compo gSKIPfun_Depth_rest lemma gSKIPfun_implies_Procfun[simp]: "Pf : gSKIPfun ==> Pf : Procfun" apply (rule gSKIPfun.induct[of Pf]) apply (auto) apply (simp add: Procfun_const) done lemma gSKIPfun_subseteq_Procfun: "gSKIPfun <= Procfun" apply (auto) done (*** no hide ***) inductive "nohidefun" intros nohidefun_p: "(%f. f p) : nohidefun" nohidefun_STOP: "(%f. STOP) : nohidefun" nohidefun_SKIP: "(%f. SKIP) : nohidefun" nohidefun_DIV: "(%f. DIV) : nohidefun" nohidefun_Act_prefix: "[| Pf : nohidefun |] ==> (%f. a -> (Pf f)) : nohidefun" nohidefun_Ext_pre_choice: "[| ALL a. Pff a : nohidefun |] ==> (%f. ? a:X -> (Pff a f)) : nohidefun" nohidefun_Ext_choice: "[| Pf : nohidefun ; Qf : nohidefun |] ==> (%f. (Pf f) [+] (Qf f)) : nohidefun" nohidefun_Int_choice: "[| Pf : nohidefun ; Qf : nohidefun |] ==> (%f. (Pf f) |~| (Qf f)) : nohidefun" nohidefun_Rep_int_choice0: "[| ALL c. Pff c : nohidefun |] ==> (%f. !! c:C .. (Pff c f)) : nohidefun" nohidefun_IF: "[| Pf : nohidefun ; Qf : nohidefun |] ==> (%f. IF b THEN (Pf f) ELSE (Qf f)) : nohidefun" nohidefun_Parallel: "[| Pf : nohidefun ; Qf : nohidefun |] ==> (%f. (Pf f) |[X]| (Qf f)) : nohidefun" nohidefun_Hiding: "(%f. P -- X) : nohidefun" nohidefun_Renaming: "Pf : nohidefun ==> (%f. (Pf f) [[r]]) : nohidefun" nohidefun_Seq_compo: "[| Pf : nohidefun ; Qf : nohidefun |] ==> (%f. (Pf f) ;; (Qf f)) : nohidefun" nohidefun_Depth_rest: "Pf : nohidefun ==> (%f. (Pf f) |. n) : nohidefun" lemma nohidefun_Rep_int_choice_fun: "[| ALL a. Pff a : nohidefun |] ==> (%f. !!<g> a:X .. (Pff a f)) : nohidefun" by (simp add: Rep_int_choice_fun_def nohidefun_Rep_int_choice0) lemma nohidefun_Rep_int_choice_com: "[| ALL a. Pff a : nohidefun |] ==> (%f. ! a:X .. (Pff a f)) : nohidefun" apply (simp add: Rep_int_choice_com_def) apply (simp add: nohidefun_Rep_int_choice_fun) done lemma nohidefun_Rep_int_choice_f: "[| ALL a. Pff a : nohidefun |] ==> (%f. !<g> a:X .. (Pff a f)) : nohidefun" apply (simp add: Rep_int_choice_f_def) apply (rule nohidefun_Rep_int_choice_com) by (auto) lemmas nohidefun_Rep_int_choice = nohidefun_Rep_int_choice0 nohidefun_Rep_int_choice_fun nohidefun_Rep_int_choice_com nohidefun_Rep_int_choice_f lemmas nohidefun_basic_def = nohidefun_p nohidefun_STOP nohidefun_SKIP nohidefun_DIV nohidefun_Act_prefix nohidefun_Ext_pre_choice nohidefun_Ext_choice nohidefun_Int_choice nohidefun_Rep_int_choice nohidefun_IF nohidefun_Parallel nohidefun_Renaming nohidefun_Seq_compo nohidefun_Depth_rest nohidefun_Hiding lemma nohidefun_implies_Procfun[simp]: "Pf : nohidefun ==> Pf : Procfun" apply (rule nohidefun.induct[of Pf]) apply (simp_all) apply (simp add: Procfun_const) done lemma nohidefun_subseteq_Procfun: "nohidefun <= Procfun" by (auto) lemma nohidefun_const: "(%f. P) : nohidefun" apply (induct_tac P) apply (simp_all add: nohidefun_basic_def) done (*** gProc ***) inductive "gProcfun" intros gProcfun_STOP: "(%f. STOP) : gProcfun" gProcfun_SKIP: "(%f. SKIP) : gProcfun" gProcfun_DIV: "(%f. DIV) : gProcfun" gProcfun_Act_prefix: "Pf : nohidefun ==> (%f. a -> (Pf f)) : gProcfun" gProcfun_Ext_pre_choice: "[| ALL a. Pff a : nohidefun |] ==> (%f. ? a:X -> (Pff a f)) : gProcfun" gProcfun_Ext_choice: "[| Pf : gProcfun ; Qf : gProcfun |] ==> (%f. (Pf f) [+] (Qf f)) : gProcfun" gProcfun_Int_choice: "[| Pf : gProcfun ; Qf : gProcfun |] ==> (%f. (Pf f) |~| (Qf f)) : gProcfun" gProcfun_Rep_int_choice0: "[| ALL c. Pff c : gProcfun |] ==> (%f. !! c:C .. (Pff c f)) : gProcfun" gProcfun_IF: "[| Pf : gProcfun ; Qf : gProcfun |] ==> (%f. IF b THEN (Pf f) ELSE (Qf f)) : gProcfun" gProcfun_Parallel: "[| Pf : gProcfun ; Qf : gProcfun |] ==> (%f. (Pf f) |[X]| (Qf f)) : gProcfun" gProcfun_Hiding: "(%f. P -- X) : gProcfun" gProcfun_Renaming: "Pf : gProcfun ==> (%f. (Pf f) [[r]]) : gProcfun" gProcfun_Seq_compo: "[| ((Pf : gProcfun & Pf : gSKIPfun & Qf : nohidefun) | (Pf : gProcfun & Qf : gProcfun)) |] ==> (%f. (Pf f) ;; (Qf f)) : gProcfun" gProcfun_Depth_rest: "Pf : gProcfun ==> (%f. (Pf f) |. n) : gProcfun" lemma gProcfun_Rep_int_choice_fun: "[| ALL a. Pff a : gProcfun |] ==> (%f. !!<g> a:X .. (Pff a f)) : gProcfun" by (simp add: Rep_int_choice_fun_def gProcfun_Rep_int_choice0) lemma gProcfun_Rep_int_choice_com: "[| ALL a. Pff a : gProcfun |] ==> (%f. ! a:X .. (Pff a f)) : gProcfun" apply (simp add: Rep_int_choice_com_def) apply (simp add: gProcfun_Rep_int_choice_fun) done lemma gProcfun_Rep_int_choice_f: "[| ALL a. Pff a : gProcfun |] ==> (%f. !<g> a:X .. (Pff a f)) : gProcfun" apply (simp add: Rep_int_choice_f_def) apply (rule gProcfun_Rep_int_choice_com) by (auto) lemmas gProcfun_Rep_int_choice = gProcfun_Rep_int_choice0 gProcfun_Rep_int_choice_fun gProcfun_Rep_int_choice_com gProcfun_Rep_int_choice_f lemmas gProcfun_basic_def = gProcfun_STOP gProcfun_SKIP gProcfun_DIV gProcfun_Act_prefix gProcfun_Ext_pre_choice gProcfun_Ext_choice gProcfun_Int_choice gProcfun_Rep_int_choice gProcfun_IF gProcfun_Parallel gProcfun_Renaming gProcfun_Seq_compo gProcfun_Depth_rest gProcfun_Hiding lemma gProcfun_implies_nohidefun[simp]: "Pf : gProcfun ==> Pf : nohidefun" apply (rule gProcfun.induct[of Pf]) apply (auto simp add: nohidefun_basic_def) done lemma gProcfun_implies_Procfun: "Pf : gProcfun ==> Pf : Procfun" apply (simp) done lemma gProcfun_subseteq_Procfun: "gProcfun <= Procfun" by (auto) lemma gProcfun_const: "(%f. P) : gProcfun" apply (induct_tac P) apply (simp_all add: gProcfun_basic_def) done (*** simp for gSKIPfun ***) lemma gSKIPfun_p_iff: "(%f. f p) : gSKIPfun = False" apply (rule) apply (erule gSKIPfun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) done lemma gSKIPfun_STOP_iff: "(%f. STOP) : gSKIPfun" by (simp add: gSKIPfun_basic_def) lemma gSKIPfun_SKIP_iff: "(%f. SKIP) : gSKIPfun = False" apply (rule) apply (erule gSKIPfun.elims) apply (simp_all add: expand_fun_eq) done lemma gSKIPfun_DIV_iff: "(%f. DIV) : gSKIPfun" by (simp add: gSKIPfun_basic_def) lemma gSKIPfun_Act_prefix_iff: "((%f. a -> (Pf f)) : gSKIPfun) = (Pf : Procfun)" apply (rule) apply (erule gSKIPfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pf = Pfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: gSKIPfun_basic_def) lemma gSKIPfun_Ext_pre_choice_iff: "(%f. ? a:X -> (Pff a f)) : gSKIPfun = (ALL a. Pff a : Procfun)" apply (rule) apply (erule gSKIPfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pff = Pffa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: gSKIPfun_basic_def) lemma gSKIPfun_Ext_choice_iff: "(%f. (Pf f) [+] (Qf f)) : gSKIPfun = (Pf : gSKIPfun & Qf : gSKIPfun)" apply (rule) apply (erule gSKIPfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: gSKIPfun_basic_def) lemma gSKIPfun_Int_choice_iff: "(%f. (Pf f) |~| (Qf f)) : gSKIPfun = (Pf : gSKIPfun & Qf : gSKIPfun)" apply (rule) apply (erule gSKIPfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: gSKIPfun_basic_def) lemma gSKIPfun_Rep_int_choice0_iff: "(%f. !! c:C .. (Pff c f)) : gSKIPfun = (ALL c. Pff c : gSKIPfun)" apply (rule) apply (erule gSKIPfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pff = Pffa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: gSKIPfun_basic_def) lemma gSKIPfun_IF_iff: "(%f. IF b THEN (Pf f) ELSE (Qf f)) : gSKIPfun = (Pf : gSKIPfun & Qf : gSKIPfun)" apply (rule) apply (erule gSKIPfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: gSKIPfun_basic_def) lemma gSKIPfun_Parallel_iff: "(%f. (Pf f) |[X]| (Qf f)) : gSKIPfun = ((Pf : gSKIPfun & Qf : Procfun) | (Pf : Procfun & Qf : gSKIPfun))" apply (rule) apply (erule gSKIPfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (erule disjE) apply (simp_all) apply (simp add: expand_fun_eq) by (simp add: gSKIPfun_basic_def) lemma gSKIPfun_Hiding_iff: "(%f. Pf f -- X) : gSKIPfun = False" apply (rule) apply (erule gSKIPfun.elims) apply (simp_all add: expand_fun_eq) done lemma gSKIPfun_Renaming_iff: "(%f. (Pf f) [[r]]) : gSKIPfun = (Pf : gSKIPfun)" apply (rule) apply (erule gSKIPfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pf = Pfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: gSKIPfun_basic_def) lemma gSKIPfun_Seq_compo_iff: "(%f. (Pf f) ;; (Qf f)) : gSKIPfun = ((Pf : gSKIPfun & Qf : Procfun) | (Pf : Procfun & Qf : gSKIPfun))" apply (rule) apply (erule gSKIPfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (erule disjE) apply (simp_all) apply (simp add: expand_fun_eq) by (simp add: gSKIPfun_basic_def) lemma gSKIPfun_Depth_rest_iff: "(%f. (Pf f) |. n) : gSKIPfun = ((Pf : gSKIPfun) | (EX P. Pf = (%f. P) & n = 0))" apply (rule) apply (erule gSKIPfun.elims) apply (simp_all add: expand_fun_eq) apply (simp add: expand_fun_eq[THEN sym]) apply (elim disjE conjE exE) apply (simp add: gSKIPfun_basic_def) apply (simp add: gSKIPfun_basic_def) done lemmas gSKIPfun_iff = gSKIPfun_p_iff gSKIPfun_SKIP_iff gSKIPfun_STOP_iff gSKIPfun_DIV_iff gSKIPfun_Act_prefix_iff gSKIPfun_Ext_pre_choice_iff gSKIPfun_Ext_choice_iff gSKIPfun_Int_choice_iff gSKIPfun_Rep_int_choice0_iff gSKIPfun_IF_iff gSKIPfun_Parallel_iff gSKIPfun_Hiding_iff gSKIPfun_Renaming_iff gSKIPfun_Seq_compo_iff gSKIPfun_Depth_rest_iff declare gSKIPfun_iff [simp] (*** simp for nohidefun ***) lemma nohidefun_p_iff: "(%f. f p) : nohidefun" by (simp add: nohidefun_basic_def) lemma nohidefun_STOP_iff: "(%f. STOP) : nohidefun" by (simp add: nohidefun_basic_def) lemma nohidefun_SKIP_iff: "(%f. SKIP) : nohidefun" by (simp add: nohidefun_basic_def) lemma nohidefun_DIV_iff: "(%f. DIV) : nohidefun" by (simp add: nohidefun_basic_def) lemma nohidefun_Act_prefix_iff: "(%f. a -> (Pf f)) : nohidefun = (Pf : nohidefun)" apply (rule) apply (erule nohidefun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pf = Pfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: nohidefun_basic_def) lemma nohidefun_Ext_pre_choice_iff: "(%f. ? a:X -> (Pff a f)) : nohidefun = (ALL a. Pff a : nohidefun)" apply (rule) apply (erule nohidefun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pff = Pffa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: nohidefun_basic_def) lemma nohidefun_Ext_choice_iff: "(%f. (Pf f) [+] (Qf f)) : nohidefun = (Pf : nohidefun & Qf : nohidefun)" apply (rule) apply (erule nohidefun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: nohidefun_basic_def) lemma nohidefun_Int_choice_iff: "(%f. (Pf f) |~| (Qf f)) : nohidefun = (Pf : nohidefun & Qf : nohidefun)" apply (rule) apply (erule nohidefun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: nohidefun_basic_def) lemma nohidefun_Rep_int_choice0_iff: "(%f. !! c:C .. (Pff c f)) : nohidefun = (ALL c. Pff c : nohidefun)" apply (rule) apply (erule nohidefun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pff = Pffa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: nohidefun_basic_def) lemma nohidefun_IF_iff: "(%f. IF b THEN (Pf f) ELSE (Qf f)) : nohidefun = (Pf : nohidefun & Qf : nohidefun)" apply (rule) apply (erule nohidefun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: nohidefun_basic_def) lemma nohidefun_Parallel_iff: "(%f. (Pf f) |[X]| (Qf f)) : nohidefun = (Pf : nohidefun & Qf : nohidefun)" apply (rule) apply (erule nohidefun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: nohidefun_basic_def) lemma nohidefun_Hiding_iff: "(%f. Pf f -- X) : nohidefun = (EX P. Pf = (%f. P))" apply (rule) apply (erule nohidefun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (simp add: expand_fun_eq[THEN sym]) apply (elim exE) by (simp add: nohidefun_basic_def) lemma nohidefun_Renaming_iff: "(%f. (Pf f) [[r]]) : nohidefun = (Pf : nohidefun)" apply (rule) apply (erule nohidefun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pf = Pfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: nohidefun_basic_def) lemma nohidefun_Seq_compo_iff: "(%f. (Pf f) ;; (Qf f)) : nohidefun = (Pf : nohidefun & Qf : nohidefun)" apply (rule) apply (erule nohidefun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: nohidefun_basic_def) lemma nohidefun_Depth_rest_iff: "(%f. (Pf f) |. n) : nohidefun = (Pf : nohidefun)" apply (rule) apply (erule nohidefun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (subgoal_tac "Pf = Pfa") apply (simp) apply (simp add: expand_fun_eq) apply (simp add: nohidefun_basic_def) done lemmas nohidefun_iff = nohidefun_p_iff nohidefun_SKIP_iff nohidefun_STOP_iff nohidefun_DIV_iff nohidefun_Act_prefix_iff nohidefun_Ext_pre_choice_iff nohidefun_Ext_choice_iff nohidefun_Int_choice_iff nohidefun_Rep_int_choice0_iff nohidefun_IF_iff nohidefun_Parallel_iff nohidefun_Hiding_iff nohidefun_Renaming_iff nohidefun_Seq_compo_iff nohidefun_Depth_rest_iff declare nohidefun_iff [simp] (*** simp for gProcfun ***) lemma gProcfun_p_iff: "(%f. f p) : gProcfun = False" apply (rule) apply (erule gProcfun.elims) apply (simp_all add: expand_fun_eq) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. STOP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) apply (drule_tac x="(%f. SKIP)" in spec, simp) done lemma gProcfun_STOP_iff: "(%f. STOP) : gProcfun" by (simp add: gProcfun_basic_def) lemma gProcfun_SKIP_iff: "(%f. SKIP) : gProcfun" by (simp add: gProcfun_basic_def) lemma gProcfun_DIV_iff: "(%f. DIV) : gProcfun" by (simp add: gProcfun_basic_def) lemma gProcfun_Act_prefix_iff: "((%f. a -> (Pf f)) : gProcfun) = (Pf : nohidefun)" apply (rule) apply (erule gProcfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pf = Pfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: gProcfun_basic_def) lemma gProcfun_Ext_pre_choice_iff: "(%f. ? a:X -> (Pff a f)) : gProcfun = (ALL a. Pff a : nohidefun)" apply (rule) apply (erule gProcfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pff = Pffa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: gProcfun_basic_def) lemma gProcfun_Ext_choice_iff: "(%f. (Pf f) [+] (Qf f)) : gProcfun = (Pf : gProcfun & Qf : gProcfun)" apply (rule) apply (erule gProcfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: gProcfun_basic_def) lemma gProcfun_Int_choice_iff: "(%f. (Pf f) |~| (Qf f)) : gProcfun = (Pf : gProcfun & Qf : gProcfun)" apply (rule) apply (erule gProcfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: gProcfun_basic_def) lemma gProcfun_Rep_int_choice0_iff: "(%f. !! c:C .. (Pff c f)) : gProcfun = (ALL c. Pff c : gProcfun)" apply (rule) apply (erule gProcfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pff = Pffa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: gProcfun_basic_def) lemma gProcfun_IF_iff: "(%f. IF b THEN (Pf f) ELSE (Qf f)) : gProcfun = (Pf : gProcfun & Qf : gProcfun)" apply (rule) apply (erule gProcfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: gProcfun_basic_def) lemma gProcfun_Parallel_iff: "(%f. (Pf f) |[X]| (Qf f)) : gProcfun = (Pf : gProcfun & Qf : gProcfun)" apply (rule) apply (erule gProcfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: gProcfun_basic_def) lemma gProcfun_Hiding_iff: "(%f. Pf f -- X) : gProcfun = (EX P. Pf = (%f. P))" apply (rule) apply (erule gProcfun.elims) apply (simp_all add: expand_fun_eq) apply (simp add: expand_fun_eq[THEN sym]) apply (elim exE) by (simp add: gProcfun_basic_def) lemma gProcfun_Renaming_iff: "(%f. (Pf f) [[r]]) : gProcfun = (Pf : gProcfun)" apply (rule) apply (erule gProcfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pf = Pfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: gProcfun_basic_def) lemma gProcfun_Seq_compo_iff: "(%f. (Pf f) ;; (Qf f)) : gProcfun = ((Pf : gProcfun & Pf : gSKIPfun & Qf : nohidefun) | (Pf : gProcfun & Qf : gProcfun))" apply (rule) apply (erule gProcfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pf = Pfa & Qf = Qfa") apply (simp) apply (simp add: expand_fun_eq) by (simp add: gProcfun_basic_def) lemma gProcfun_Depth_rest_iff: "(%f. (Pf f) |. n) : gProcfun = (Pf : gProcfun)" apply (rule) apply (erule gProcfun.elims) apply (simp_all add: expand_fun_eq) apply (subgoal_tac "Pf = Pfa") apply (simp) apply (simp add: expand_fun_eq) apply (simp add: gProcfun_basic_def) done lemmas gProcfun_iff = gProcfun_p_iff gProcfun_SKIP_iff gProcfun_STOP_iff gProcfun_DIV_iff gProcfun_Act_prefix_iff gProcfun_Ext_pre_choice_iff gProcfun_Ext_choice_iff gProcfun_Int_choice_iff gProcfun_Rep_int_choice0_iff gProcfun_IF_iff gProcfun_Parallel_iff gProcfun_Hiding_iff gProcfun_Renaming_iff gProcfun_Seq_compo_iff gProcfun_Depth_rest_iff declare gProcfun_iff [simp] (****** short notations ******) (* gSKIP *) lemma gSKIPfun_Rep_int_choice_fun_iff[simp]: "inj g ==> (%f. !!<g> a:X .. (Pff a f)) : gSKIPfun = (ALL a. Pff a : gSKIPfun)" apply (auto simp add: Rep_int_choice_fun_def) apply (drule_tac x="g a" in spec) apply (simp) done lemma gSKIPfun_Rep_int_choice_com_iff[simp]: "(%f. ! a:X .. (Pff a f)) : gSKIPfun = (ALL a. Pff a : gSKIPfun)" apply (auto simp add: Rep_int_choice_com_def) apply (drule_tac x="{a}" in spec) apply (simp) done lemma gSKIPfun_Rep_int_choice_f_iff[simp]: "inj g ==> (%f. !<g> a:X .. (Pff a f)) : gSKIPfun = (ALL a. Pff a : gSKIPfun)" apply (simp add: Rep_int_choice_f_def) apply (auto) apply (drule_tac x="g a" in spec) apply (simp) done lemma gSKIPfun_Alpha_parallel_iff[simp]: "(%f. (Pf f) |[X,Y]| (Qf f)) : gSKIPfun = ((Pf : gSKIPfun & Qf : Procfun) | (Pf : Procfun & Qf : gSKIPfun))" apply (simp add: Alpha_parallel_def) done lemma gSKIPfun_MU[simp]: "(ALL Pf: gSKIPfun. (%f. (PfX f (Pf f))) : gSKIPfun) ==> (%f. MUX (PfX f)) : gSKIPfun" apply (simp add: MUX_def FIX_def) apply (rule allI) apply (simp add: FIXn_def) apply (induct_tac n) apply (simp) apply (simp) done (* note: forall f *) lemma gSKIPfun_MU1[simp]: "(ALL Pf. (%f. (PfX f (Pf f))) : gSKIPfun) ==> (%f. MUX! (PfX f)) : gSKIPfun" apply (simp add: MUX1_def FIX1_def) apply (rule allI) apply (simp add: FIX1n_def) apply (induct_tac n) apply (auto) done lemmas gSKIPfun_def = gSKIPfun_basic_def gSKIPfun_MU gSKIPfun_MU1 (*** gSKIPfun test ***) lemma "(%Z. (MU X .. a -> (MU! Y .. b -> X [+] c -> Y |~| d -> Z i))) : gSKIPfun" apply (simp) done lemma "ALL a. P a : gSKIPfun ==> (%f. (!set X:Xs .. P X f)) : gSKIPfun" by (simp) (* nohide *) lemma nohidefun_Rep_int_choice_fun_iff[simp]: "inj g ==> (%f. !!<g> a:X .. (Pff a f)) : nohidefun = (ALL a. Pff a : nohidefun)" apply (auto simp add: Rep_int_choice_fun_def) apply (drule_tac x="g a" in spec) apply (simp) done lemma nohidefun_Rep_int_choice_com_iff[simp]: "(%f. ! a:X .. (Pff a f)) : nohidefun = (ALL a. Pff a : nohidefun)" apply (auto simp add: Rep_int_choice_com_def) apply (drule_tac x="{a}" in spec) apply (simp) done lemma nohidefun_Rep_int_choice_f_iff[simp]: "inj g ==> (%f. !<g> a:X .. (Pff a f)) : nohidefun = (ALL a. Pff a : nohidefun)" apply (simp add: Rep_int_choice_f_def) apply (auto) apply (drule_tac x="g a" in spec) apply (simp) done lemma nohidefun_Alpha_parallel_iff[simp]: "(%f. (Pf f) |[X,Y]| (Qf f)) : nohidefun = (Pf : nohidefun & Qf : nohidefun)" apply (simp add: Alpha_parallel_def) done lemma nohidefun_MU[simp]: "(ALL Pf: nohidefun. (%f. (PfX f (Pf f))) : nohidefun) ==> (%f. MUX (PfX f)) : nohidefun" apply (simp add: MUX_def FIX_def) apply (rule allI) apply (simp add: FIXn_def) apply (induct_tac n) apply (simp) apply (simp) done lemma nohidefun_MU1[simp]: "(ALL Pf: nohidefun. (%f. (PfX f (Pf f))) : nohidefun) ==> (%f. MUX! (PfX f)) : nohidefun" apply (simp add: MUX1_def FIX1_def) apply (rule allI) apply (simp add: FIX1n_def) apply (induct_tac n) apply (simp add: nohidefun_const) apply (simp) done lemmas nohidefun_def = nohidefun_basic_def nohidefun_MU nohidefun_MU1 (*** nohidefun test ***) lemma "(%Z. (MU X .. a -> (MU! Y .. b -> X [+] c -> Y |~| d -> Z i))) : nohidefun" apply (simp) done (************ gProc ************) lemma gProcfun_Rep_int_choice_fun_iff[simp]: "inj g ==> (%f. !!<g> a:X .. (Pff a f)) : gProcfun = (ALL a. Pff a : gProcfun)" apply (auto simp add: Rep_int_choice_fun_def) apply (drule_tac x="g a" in spec) apply (simp) done lemma gProcfun_Rep_int_choice_com_iff[simp]: "(%f. ! a:X .. (Pff a f)) : gProcfun = (ALL a. Pff a : gProcfun)" apply (auto simp add: Rep_int_choice_com_def) apply (drule_tac x="{a}" in spec) apply (simp) done lemma gProcfun_Rep_int_choice_f_iff[simp]: "inj g ==> (%f. !<g> a:X .. (Pff a f)) : gProcfun = (ALL a. Pff a : gProcfun)" apply (simp add: Rep_int_choice_f_def) apply (auto) apply (drule_tac x="g a" in spec) apply (simp) done lemma gProcfun_Alpha_parallel_iff[simp]: "(%f. (Pf f) |[X,Y]| (Qf f)) : gProcfun = (Pf : gProcfun & Qf : gProcfun)" apply (simp add: Alpha_parallel_def) done lemma gProcfun_MU[simp]: "(ALL Pf: gProcfun. (%f. (PfX f (Pf f))) : gProcfun) ==> (%f. MUX (PfX f)) : gProcfun" apply (simp add: MUX_def FIX_def) apply (rule allI) apply (simp add: FIXn_def) apply (induct_tac n) apply (simp) apply (simp) done lemma gProcfun_MU1[simp]: "(ALL Pf: gProcfun. (%f. (PfX f (Pf f))) : gProcfun) ==> (%f. MUX! (PfX f)) : gProcfun" apply (simp add: MUX1_def FIX1_def) apply (rule allI) apply (simp add: FIX1n_def) apply (induct_tac n) apply (simp add: gProcfun_const) apply (simp) done lemmas gProcfun_def = gProcfun_basic_def gProcfun_MU gProcfun_MU1 (*** gProcfun test ***) lemma "(%Z. (MU! X .. a -> (MU! Y .. b -> X [+] c -> Y |~| d -> Z i))) : gProcfun" apply (simp) done lemma "(%Z. (MU X .. a -> (MU! Y .. b -> X [+] c -> Y |~| d -> Z i)) |~| Z j) : gProcfun = False" apply (simp) done (************ Fun ************) consts gSKIPFun :: "('p,'a) procFun set" nohideFun :: "('p,'a) procFun set" gProcFun :: "('p,'a) procFun set" defs gSKIPFun_def : "gSKIPFun == {PF. (ALL p. (%f. (PF f p)) : gSKIPfun)}" nohideFun_def : "nohideFun == {PF. (ALL p. (%f. (PF f p)) : nohidefun)}" gProcFun_def : "gProcFun == {PF. (ALL p. (%f. (PF f p)) : gProcfun)}" (************ for MU and MU! ************) consts gSKIPX :: "('a proc => 'a proc) set" nohideX :: "('a proc => 'a proc) set" gProcX :: "('a proc => 'a proc) set" defs gSKIPX_def : "gSKIPX == {PX. (%f. PX (f MUp)) : gSKIPfun}" nohideX_def: "nohideX == {PX. (%f. PX (f MUp)) : nohidefun}" gProcX_def : "gProcX == {PX. (%f. PX (f MUp)) : gProcfun}" (************ implies ************) lemma gSKIPFun_implies_ProcFun[simp]: "PF : gSKIPFun ==> PF : ProcFun" by (simp add: gSKIPFun_def ProcFun_def) lemma nohideFun_implies_ProcFun[simp]: "PF : nohideFun ==> PF : ProcFun" by (simp add: nohideFun_def ProcFun_def) lemma gProcFun_implies_ProcFun[simp]: "PF : gProcFun ==> PF : ProcFun" by (simp add: gProcFun_def ProcFun_def) (** PX **) lemma gSKIPX_implies_ProcX[simp]: "PX : gSKIPX ==> PX : ProcX" by (simp add: gSKIPX_def ProcX_def) lemma nohideX_implies_ProcX[simp]: "PX : nohideX ==> PX : ProcX" by (simp add: nohideX_def ProcX_def) lemma gProcX_implies_ProcX[simp]: "PX : gProcX ==> PX : ProcX" by (simp add: gProcX_def ProcX_def) (********************************************************* termination relation for proc *********************************************************) consts procterm :: "('a proc * 'a proc) set" inductive procterm intros "(P, a -> P) : procterm" "(Pf a, ? :X -> Pf) : procterm" "(P, P [+] Q) : procterm" "(Q, P [+] Q) : procterm" "(P, P |~| Q) : procterm" "(Q, P |~| Q) : procterm" "(Pf c, !! :C .. Pf) : procterm" "(P, IF b THEN P ELSE Q) : procterm" "(Q, IF b THEN P ELSE Q) : procterm" "(P, P |[X]| Q) : procterm" "(Q, P |[X]| Q) : procterm" "(P, P -- X) : procterm" "(P, P [[r]]) : procterm" "(P, P ;; Q) : procterm" "(Q, P ;; Q) : procterm" "(P, P |. n) : procterm" lemma wf_procterm: "wf procterm" apply (unfold wf_def) apply (intro strip) apply (induct_tac x) apply (erule allE, erule mp, intro strip, erule procterm.elims, simp, simp, simp, simp, simp, simp, simp, simp, simp, simp, simp, simp, simp, simp, simp, simp)+ done (*-------------------------------------------------------* | | | decompostion controlled by Not_Decompo_Flag | | | *-------------------------------------------------------*) consts Not_Decompo_Flag :: bool defs Not_Decompo_Flag_def : "Not_Decompo_Flag == True" lemma on_Not_Decompo_Flag: "Not_Decompo_Flag & R ==> R" by (simp) lemma off_Not_Decompo_Flag: "R ==> Not_Decompo_Flag & R" by (simp add: Not_Decompo_Flag_def) lemma off_Not_Decompo_Flag_True: "Not_Decompo_Flag" by (simp add: Not_Decompo_Flag_def) ML_setup {* val ON_Not_Decompo_Flag = thms "on_Not_Decompo_Flag"; val OFF_Not_Decompo_Flag = thms "off_Not_Decompo_Flag"; val OFF_Not_Decompo_Flag_True = thms "off_Not_Decompo_Flag_True"; *} (*-------------------------------------------------------* | | | unfold PF: ***Fun | | | *-------------------------------------------------------*) lemmas CSP_Fun_def = ProcFun_def gSKIPFun_def gProcFun_def nohideFun_def (*------------------------------------------------------------* | convenient lemmas | *------------------------------------------------------------*) lemma Rep_int_choice_fun_SET_eq: "(!set :Xs1 .. Pf = !set :Xs2 .. Pf) = (Xs1 = Xs2)" apply (rule) apply (simp add: Rep_int_choice_fun_def) apply (erule equalityE) apply (rule) apply (rule subsetI) apply (elim subsetE) apply (drule_tac x="sel_set x" in bspec) apply (simp add: image_iff) apply (simp add: image_iff) apply (rule subsetI) apply (elim subsetE) apply (rotate_tac -1) apply (drule_tac x="sel_set x" in bspec) apply (simp add: image_iff) apply (simp add: image_iff) apply (simp) done lemma Rep_int_choice_fun_SET_decompo: "!set :Xs1 .. Pf1 = !set :Xs2 .. Pf2 ==> Xs1 = Xs2 & (ALL X:Xs2. Pf1 X = Pf2 X)" apply (simp add: Rep_int_choice_fun_def) apply (erule conjE) apply (erule equalityE) apply (rule conjI) apply (rule) apply (rule subsetI) apply (elim subsetE) apply (drule_tac x="sel_set x" in bspec) apply (simp add: image_iff) apply (simp add: image_iff) apply (rule subsetI) apply (elim subsetE) apply (rotate_tac -1) apply (drule_tac x="sel_set x" in bspec) apply (simp add: image_iff) apply (simp add: image_iff) apply (rule ballI) apply (simp add: expand_fun_eq) apply (drule_tac x="sel_set X" in spec) apply (simp) done (****************** to add them again ******************) declare Union_image_eq [simp] declare Inter_image_eq [simp] end
lemmas csp_prefix_ss_def:
! :X -> Pf == ! x:X .. x -> Pf x
a ! x -> P == a x -> P
Nondet_send_prefix f X Pf == ! x:(f ` X) -> Pf (inv f x)
Rec_prefix f X Pf == ? x:(f ` X) -> Pf (inv f x)
lemmas csp_prefix_ss_def:
! :X -> Pf == ! x:X .. x -> Pf x
a ! x -> P == a x -> P
Nondet_send_prefix f X Pf == ! x:(f ` X) -> Pf (inv f x)
Rec_prefix f X Pf == ? x:(f ` X) -> Pf (inv f x)
lemma Rep_parallel_empty:
I = {} ==> [||]:I PXf = SKIP
lemma Rep_parallel_one:
I = {i} ==> [||]:I PXf = fst (PXf i) |[snd (PXf i),{}]| SKIP
lemma Procfun_Rep_int_choice_fun:
∀a. Pff a ∈ Procfun ==> (%f. !!<g> a:X .. Pff a f) ∈ Procfun
lemma Procfun_Rep_int_choice_com:
∀a. Pff a ∈ Procfun ==> (%f. ! a:X .. Pff a f) ∈ Procfun
lemma Procfun_Rep_int_choice_f:
∀a. Pff a ∈ Procfun ==> (%f. !<g> a:X .. Pff a f) ∈ Procfun
lemmas Procfun_Rep_int_choice:
∀c. Pff c ∈ Procfun ==> (%f. !! c:C .. Pff c f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. !!<g> a:X .. Pff a f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. ! a:X .. Pff a f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. !<g> a:X .. Pff a f) ∈ Procfun
lemmas Procfun_Rep_int_choice:
∀c. Pff c ∈ Procfun ==> (%f. !! c:C .. Pff c f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. !!<g> a:X .. Pff a f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. ! a:X .. Pff a f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. !<g> a:X .. Pff a f) ∈ Procfun
lemmas Procfun_basic_def:
(%f. f p) ∈ Procfun
(%f. STOP) ∈ Procfun
(%f. SKIP) ∈ Procfun
(%f. DIV) ∈ Procfun
Pf ∈ Procfun ==> (%f. a -> Pf f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. ? a:X -> Pff a f) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. Pf f [+] Qf f) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. Pf f |~| Qf f) ∈ Procfun
∀c. Pff c ∈ Procfun ==> (%f. !! c:C .. Pff c f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. !!<g> a:X .. Pff a f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. ! a:X .. Pff a f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. !<g> a:X .. Pff a f) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. IF b THEN Pf f ELSE Qf f) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. Pf f |[X]| Qf f) ∈ Procfun
Pf ∈ Procfun ==> (%f. Pf f -- X) ∈ Procfun
Pf ∈ Procfun ==> (%f. Pf f [[r]]) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. Pf f ;; Qf f) ∈ Procfun
Pf ∈ Procfun ==> (%f. Pf f |. n) ∈ Procfun
lemmas Procfun_basic_def:
(%f. f p) ∈ Procfun
(%f. STOP) ∈ Procfun
(%f. SKIP) ∈ Procfun
(%f. DIV) ∈ Procfun
Pf ∈ Procfun ==> (%f. a -> Pf f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. ? a:X -> Pff a f) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. Pf f [+] Qf f) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. Pf f |~| Qf f) ∈ Procfun
∀c. Pff c ∈ Procfun ==> (%f. !! c:C .. Pff c f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. !!<g> a:X .. Pff a f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. ! a:X .. Pff a f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. !<g> a:X .. Pff a f) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. IF b THEN Pf f ELSE Qf f) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. Pf f |[X]| Qf f) ∈ Procfun
Pf ∈ Procfun ==> (%f. Pf f -- X) ∈ Procfun
Pf ∈ Procfun ==> (%f. Pf f [[r]]) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. Pf f ;; Qf f) ∈ Procfun
Pf ∈ Procfun ==> (%f. Pf f |. n) ∈ Procfun
lemma Procfun_const:
(%f. P) ∈ Procfun
lemma Procfun_p_iff:
(%f. f p) ∈ Procfun
lemma Procfun_STOP_iff:
(%f. STOP) ∈ Procfun
lemma Procfun_SKIP_iff:
(%f. SKIP) ∈ Procfun
lemma Procfun_DIV_iff:
(%f. DIV) ∈ Procfun
lemma Procfun_Act_prefix_iff:
((%f. a -> Pf f) ∈ Procfun) = (Pf ∈ Procfun)
lemma Procfun_Ext_pre_choice_iff:
((%f. ? a:X -> Pff a f) ∈ Procfun) = (∀a. Pff a ∈ Procfun)
lemma Procfun_Ext_choice_iff:
((%f. Pf f [+] Qf f) ∈ Procfun) = (Pf ∈ Procfun ∧ Qf ∈ Procfun)
lemma Procfun_Int_choice_iff:
((%f. Pf f |~| Qf f) ∈ Procfun) = (Pf ∈ Procfun ∧ Qf ∈ Procfun)
lemma Procfun_Rep_int_choice0_iff:
((%f. !! c:C .. Pff c f) ∈ Procfun) = (∀c. Pff c ∈ Procfun)
lemma Procfun_IF_iff:
((%f. IF b THEN Pf f ELSE Qf f) ∈ Procfun) = (Pf ∈ Procfun ∧ Qf ∈ Procfun)
lemma Procfun_Parallel_iff:
((%f. Pf f |[X]| Qf f) ∈ Procfun) = (Pf ∈ Procfun ∧ Qf ∈ Procfun)
lemma Procfun_Hiding_iff:
((%f. Pf f -- X) ∈ Procfun) = (Pf ∈ Procfun)
lemma Procfun_Renaming_iff:
((%f. Pf f [[r]]) ∈ Procfun) = (Pf ∈ Procfun)
lemma Procfun_Seq_compo_iff:
((%f. Pf f ;; Qf f) ∈ Procfun) = (Pf ∈ Procfun ∧ Qf ∈ Procfun)
lemma Procfun_Depth_rest_iff:
((%f. Pf f |. n) ∈ Procfun) = (Pf ∈ Procfun)
lemmas Procfun_iff:
(%f. f p) ∈ Procfun
(%f. SKIP) ∈ Procfun
(%f. STOP) ∈ Procfun
(%f. DIV) ∈ Procfun
((%f. a -> Pf f) ∈ Procfun) = (Pf ∈ Procfun)
((%f. ? a:X -> Pff a f) ∈ Procfun) = (∀a. Pff a ∈ Procfun)
((%f. Pf f [+] Qf f) ∈ Procfun) = (Pf ∈ Procfun ∧ Qf ∈ Procfun)
((%f. Pf f |~| Qf f) ∈ Procfun) = (Pf ∈ Procfun ∧ Qf ∈ Procfun)
((%f. !! c:C .. Pff c f) ∈ Procfun) = (∀c. Pff c ∈ Procfun)
((%f. IF b THEN Pf f ELSE Qf f) ∈ Procfun) = (Pf ∈ Procfun ∧ Qf ∈ Procfun)
((%f. Pf f |[X]| Qf f) ∈ Procfun) = (Pf ∈ Procfun ∧ Qf ∈ Procfun)
((%f. Pf f -- X) ∈ Procfun) = (Pf ∈ Procfun)
((%f. Pf f [[r]]) ∈ Procfun) = (Pf ∈ Procfun)
((%f. Pf f ;; Qf f) ∈ Procfun) = (Pf ∈ Procfun ∧ Qf ∈ Procfun)
((%f. Pf f |. n) ∈ Procfun) = (Pf ∈ Procfun)
lemmas Procfun_iff:
(%f. f p) ∈ Procfun
(%f. SKIP) ∈ Procfun
(%f. STOP) ∈ Procfun
(%f. DIV) ∈ Procfun
((%f. a -> Pf f) ∈ Procfun) = (Pf ∈ Procfun)
((%f. ? a:X -> Pff a f) ∈ Procfun) = (∀a. Pff a ∈ Procfun)
((%f. Pf f [+] Qf f) ∈ Procfun) = (Pf ∈ Procfun ∧ Qf ∈ Procfun)
((%f. Pf f |~| Qf f) ∈ Procfun) = (Pf ∈ Procfun ∧ Qf ∈ Procfun)
((%f. !! c:C .. Pff c f) ∈ Procfun) = (∀c. Pff c ∈ Procfun)
((%f. IF b THEN Pf f ELSE Qf f) ∈ Procfun) = (Pf ∈ Procfun ∧ Qf ∈ Procfun)
((%f. Pf f |[X]| Qf f) ∈ Procfun) = (Pf ∈ Procfun ∧ Qf ∈ Procfun)
((%f. Pf f -- X) ∈ Procfun) = (Pf ∈ Procfun)
((%f. Pf f [[r]]) ∈ Procfun) = (Pf ∈ Procfun)
((%f. Pf f ;; Qf f) ∈ Procfun) = (Pf ∈ Procfun ∧ Qf ∈ Procfun)
((%f. Pf f |. n) ∈ Procfun) = (Pf ∈ Procfun)
lemma Procfun_Rep_int_choice_fun_iff:
inj g ==> ((%f. !!<g> a:X .. Pff a f) ∈ Procfun) = (∀a. Pff a ∈ Procfun)
lemma Procfun_Rep_int_choice_com_iff:
((%f. ! a:X .. Pff a f) ∈ Procfun) = (∀a. Pff a ∈ Procfun)
lemma Procfun_Rep_int_choice_f_iff:
inj g ==> ((%f. !<g> a:X .. Pff a f) ∈ Procfun) = (∀a. Pff a ∈ Procfun)
lemma Procfun_Alpha_parallel_iff:
((%f. Pf f |[X,Y]| Qf f) ∈ Procfun) = (Pf ∈ Procfun ∧ Qf ∈ Procfun)
lemma compo_in_Procfun1:
[| Pf ∈ Procfun; QF ∈ ProcFun |] ==> (%f. Pf (QF f)) ∈ Procfun
lemma compo_in_Procfun2:
[| Pf ∈ Procfun; QF ∈ ProcFun |] ==> Pf o QF ∈ Procfun
lemmas compo_in_Procfun:
[| Pf ∈ Procfun; QF ∈ ProcFun |] ==> (%f. Pf (QF f)) ∈ Procfun
[| Pf ∈ Procfun; QF ∈ ProcFun |] ==> Pf o QF ∈ Procfun
lemmas compo_in_Procfun:
[| Pf ∈ Procfun; QF ∈ ProcFun |] ==> (%f. Pf (QF f)) ∈ Procfun
[| Pf ∈ Procfun; QF ∈ ProcFun |] ==> Pf o QF ∈ Procfun
lemma compo_in_Procfun_ALL:
∀Pf QF. Pf ∈ Procfun ∧ QF ∈ ProcFun --> (%f. Pf (QF f)) ∈ Procfun
lemma compo_in_ProcFun1:
[| PF ∈ ProcFun; QF ∈ ProcFun |] ==> (%f. PF (QF f)) ∈ ProcFun
lemma compo_in_ProcFun2:
[| PF ∈ ProcFun; QF ∈ ProcFun |] ==> PF o QF ∈ ProcFun
lemmas compo_in_ProcFun:
[| PF ∈ ProcFun; QF ∈ ProcFun |] ==> (%f. PF (QF f)) ∈ ProcFun
[| PF ∈ ProcFun; QF ∈ ProcFun |] ==> PF o QF ∈ ProcFun
lemmas compo_in_ProcFun:
[| PF ∈ ProcFun; QF ∈ ProcFun |] ==> (%f. PF (QF f)) ∈ ProcFun
[| PF ∈ ProcFun; QF ∈ ProcFun |] ==> PF o QF ∈ ProcFun
lemma iteration_in_ProcFun:
PF ∈ ProcFun ==> PF ^ n ∈ ProcFun
lemma iteration_in_Procfun:
PF ∈ ProcFun ==> (%f. (PF ^ n) f p) ∈ Procfun
lemma Procfun_MU:
∀Pf∈Procfun. (%f. PfX f (Pf f)) ∈ Procfun ==> (%f. MUX (PfX f)) ∈ Procfun
lemma Procfun_MU1:
∀Pf∈Procfun. (%f. PfX f (Pf f)) ∈ Procfun ==> (%f. MUX! (PfX f)) ∈ Procfun
lemmas Procfun_def:
(%f. f p) ∈ Procfun
(%f. STOP) ∈ Procfun
(%f. SKIP) ∈ Procfun
(%f. DIV) ∈ Procfun
Pf ∈ Procfun ==> (%f. a -> Pf f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. ? a:X -> Pff a f) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. Pf f [+] Qf f) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. Pf f |~| Qf f) ∈ Procfun
∀c. Pff c ∈ Procfun ==> (%f. !! c:C .. Pff c f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. !!<g> a:X .. Pff a f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. ! a:X .. Pff a f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. !<g> a:X .. Pff a f) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. IF b THEN Pf f ELSE Qf f) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. Pf f |[X]| Qf f) ∈ Procfun
Pf ∈ Procfun ==> (%f. Pf f -- X) ∈ Procfun
Pf ∈ Procfun ==> (%f. Pf f [[r]]) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. Pf f ;; Qf f) ∈ Procfun
Pf ∈ Procfun ==> (%f. Pf f |. n) ∈ Procfun
∀Pf∈Procfun. (%f. PfX f (Pf f)) ∈ Procfun ==> (%f. MUX (PfX f)) ∈ Procfun
∀Pf∈Procfun. (%f. PfX f (Pf f)) ∈ Procfun ==> (%f. MUX! (PfX f)) ∈ Procfun
lemmas Procfun_def:
(%f. f p) ∈ Procfun
(%f. STOP) ∈ Procfun
(%f. SKIP) ∈ Procfun
(%f. DIV) ∈ Procfun
Pf ∈ Procfun ==> (%f. a -> Pf f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. ? a:X -> Pff a f) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. Pf f [+] Qf f) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. Pf f |~| Qf f) ∈ Procfun
∀c. Pff c ∈ Procfun ==> (%f. !! c:C .. Pff c f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. !!<g> a:X .. Pff a f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. ! a:X .. Pff a f) ∈ Procfun
∀a. Pff a ∈ Procfun ==> (%f. !<g> a:X .. Pff a f) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. IF b THEN Pf f ELSE Qf f) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. Pf f |[X]| Qf f) ∈ Procfun
Pf ∈ Procfun ==> (%f. Pf f -- X) ∈ Procfun
Pf ∈ Procfun ==> (%f. Pf f [[r]]) ∈ Procfun
[| Pf ∈ Procfun; Qf ∈ Procfun |] ==> (%f. Pf f ;; Qf f) ∈ Procfun
Pf ∈ Procfun ==> (%f. Pf f |. n) ∈ Procfun
∀Pf∈Procfun. (%f. PfX f (Pf f)) ∈ Procfun ==> (%f. MUX (PfX f)) ∈ Procfun
∀Pf∈Procfun. (%f. PfX f (Pf f)) ∈ Procfun ==> (%f. MUX! (PfX f)) ∈ Procfun
lemma
(%Z. MU X .. a -> (MU! Y .. b -> X [+] c -> Y |~| d -> Z)) ∈ ProcX
lemmas gSKIPfun_Depth_rest:
Pf ∈ gSKIPfun ==> (%f. Pf f |. n) ∈ gSKIPfun
(%f. P |. 0) ∈ gSKIPfun
lemmas gSKIPfun_Depth_rest:
Pf ∈ gSKIPfun ==> (%f. Pf f |. n) ∈ gSKIPfun
(%f. P |. 0) ∈ gSKIPfun
lemma gSKIPfun_Rep_int_choice_fun:
∀a. Pff a ∈ gSKIPfun ==> (%f. !!<g> a:X .. Pff a f) ∈ gSKIPfun
lemma gSKIPfun_Rep_int_choice_com:
∀a. Pff a ∈ gSKIPfun ==> (%f. ! a:X .. Pff a f) ∈ gSKIPfun
lemma gSKIPfun_Rep_int_choice_f:
∀a. Pff a ∈ gSKIPfun ==> (%f. !<g> a:X .. Pff a f) ∈ gSKIPfun
lemmas gSKIPfun_Rep_int_choice:
∀c. Pff c ∈ gSKIPfun ==> (%f. !! c:C .. Pff c f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. !!<g> a:X .. Pff a f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. ! a:X .. Pff a f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. !<g> a:X .. Pff a f) ∈ gSKIPfun
lemmas gSKIPfun_Rep_int_choice:
∀c. Pff c ∈ gSKIPfun ==> (%f. !! c:C .. Pff c f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. !!<g> a:X .. Pff a f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. ! a:X .. Pff a f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. !<g> a:X .. Pff a f) ∈ gSKIPfun
lemmas gSKIPfun_basic_def:
(%f. STOP) ∈ gSKIPfun
(%f. DIV) ∈ gSKIPfun
Pf ∈ Procfun ==> (%f. a -> Pf f) ∈ gSKIPfun
∀a. Pff a ∈ Procfun ==> (%f. ? a:X -> Pff a f) ∈ gSKIPfun
[| Pf ∈ gSKIPfun; Qf ∈ gSKIPfun |] ==> (%f. Pf f [+] Qf f) ∈ gSKIPfun
[| Pf ∈ gSKIPfun; Qf ∈ gSKIPfun |] ==> (%f. Pf f |~| Qf f) ∈ gSKIPfun
∀c. Pff c ∈ gSKIPfun ==> (%f. !! c:C .. Pff c f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. !!<g> a:X .. Pff a f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. ! a:X .. Pff a f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. !<g> a:X .. Pff a f) ∈ gSKIPfun
[| Pf ∈ gSKIPfun; Qf ∈ gSKIPfun |] ==> (%f. IF b THEN Pf f ELSE Qf f) ∈ gSKIPfun
Pf ∈ gSKIPfun ∧ Qf ∈ Procfun ∨ Pf ∈ Procfun ∧ Qf ∈ gSKIPfun ==> (%f. Pf f |[X]| Qf f) ∈ gSKIPfun
Pf ∈ gSKIPfun ==> (%f. Pf f [[r]]) ∈ gSKIPfun
Pf ∈ gSKIPfun ∧ Qf ∈ Procfun ∨ Pf ∈ Procfun ∧ Qf ∈ gSKIPfun ==> (%f. Pf f ;; Qf f) ∈ gSKIPfun
Pf ∈ gSKIPfun ==> (%f. Pf f |. n) ∈ gSKIPfun
(%f. P |. 0) ∈ gSKIPfun
lemmas gSKIPfun_basic_def:
(%f. STOP) ∈ gSKIPfun
(%f. DIV) ∈ gSKIPfun
Pf ∈ Procfun ==> (%f. a -> Pf f) ∈ gSKIPfun
∀a. Pff a ∈ Procfun ==> (%f. ? a:X -> Pff a f) ∈ gSKIPfun
[| Pf ∈ gSKIPfun; Qf ∈ gSKIPfun |] ==> (%f. Pf f [+] Qf f) ∈ gSKIPfun
[| Pf ∈ gSKIPfun; Qf ∈ gSKIPfun |] ==> (%f. Pf f |~| Qf f) ∈ gSKIPfun
∀c. Pff c ∈ gSKIPfun ==> (%f. !! c:C .. Pff c f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. !!<g> a:X .. Pff a f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. ! a:X .. Pff a f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. !<g> a:X .. Pff a f) ∈ gSKIPfun
[| Pf ∈ gSKIPfun; Qf ∈ gSKIPfun |] ==> (%f. IF b THEN Pf f ELSE Qf f) ∈ gSKIPfun
Pf ∈ gSKIPfun ∧ Qf ∈ Procfun ∨ Pf ∈ Procfun ∧ Qf ∈ gSKIPfun ==> (%f. Pf f |[X]| Qf f) ∈ gSKIPfun
Pf ∈ gSKIPfun ==> (%f. Pf f [[r]]) ∈ gSKIPfun
Pf ∈ gSKIPfun ∧ Qf ∈ Procfun ∨ Pf ∈ Procfun ∧ Qf ∈ gSKIPfun ==> (%f. Pf f ;; Qf f) ∈ gSKIPfun
Pf ∈ gSKIPfun ==> (%f. Pf f |. n) ∈ gSKIPfun
(%f. P |. 0) ∈ gSKIPfun
lemma gSKIPfun_implies_Procfun:
Pf ∈ gSKIPfun ==> Pf ∈ Procfun
lemma gSKIPfun_subseteq_Procfun:
gSKIPfun ⊆ Procfun
lemma nohidefun_Rep_int_choice_fun:
∀a. Pff a ∈ nohidefun ==> (%f. !!<g> a:X .. Pff a f) ∈ nohidefun
lemma nohidefun_Rep_int_choice_com:
∀a. Pff a ∈ nohidefun ==> (%f. ! a:X .. Pff a f) ∈ nohidefun
lemma nohidefun_Rep_int_choice_f:
∀a. Pff a ∈ nohidefun ==> (%f. !<g> a:X .. Pff a f) ∈ nohidefun
lemmas nohidefun_Rep_int_choice:
∀c. Pff c ∈ nohidefun ==> (%f. !! c:C .. Pff c f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. !!<g> a:X .. Pff a f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. ! a:X .. Pff a f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. !<g> a:X .. Pff a f) ∈ nohidefun
lemmas nohidefun_Rep_int_choice:
∀c. Pff c ∈ nohidefun ==> (%f. !! c:C .. Pff c f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. !!<g> a:X .. Pff a f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. ! a:X .. Pff a f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. !<g> a:X .. Pff a f) ∈ nohidefun
lemmas nohidefun_basic_def:
(%f. f p) ∈ nohidefun
(%f. STOP) ∈ nohidefun
(%f. SKIP) ∈ nohidefun
(%f. DIV) ∈ nohidefun
Pf ∈ nohidefun ==> (%f. a -> Pf f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. ? a:X -> Pff a f) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. Pf f [+] Qf f) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. Pf f |~| Qf f) ∈ nohidefun
∀c. Pff c ∈ nohidefun ==> (%f. !! c:C .. Pff c f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. !!<g> a:X .. Pff a f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. ! a:X .. Pff a f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. !<g> a:X .. Pff a f) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. IF b THEN Pf f ELSE Qf f) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. Pf f |[X]| Qf f) ∈ nohidefun
Pf ∈ nohidefun ==> (%f. Pf f [[r]]) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. Pf f ;; Qf f) ∈ nohidefun
Pf ∈ nohidefun ==> (%f. Pf f |. n) ∈ nohidefun
(%f. P -- X) ∈ nohidefun
lemmas nohidefun_basic_def:
(%f. f p) ∈ nohidefun
(%f. STOP) ∈ nohidefun
(%f. SKIP) ∈ nohidefun
(%f. DIV) ∈ nohidefun
Pf ∈ nohidefun ==> (%f. a -> Pf f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. ? a:X -> Pff a f) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. Pf f [+] Qf f) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. Pf f |~| Qf f) ∈ nohidefun
∀c. Pff c ∈ nohidefun ==> (%f. !! c:C .. Pff c f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. !!<g> a:X .. Pff a f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. ! a:X .. Pff a f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. !<g> a:X .. Pff a f) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. IF b THEN Pf f ELSE Qf f) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. Pf f |[X]| Qf f) ∈ nohidefun
Pf ∈ nohidefun ==> (%f. Pf f [[r]]) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. Pf f ;; Qf f) ∈ nohidefun
Pf ∈ nohidefun ==> (%f. Pf f |. n) ∈ nohidefun
(%f. P -- X) ∈ nohidefun
lemma nohidefun_implies_Procfun:
Pf ∈ nohidefun ==> Pf ∈ Procfun
lemma nohidefun_subseteq_Procfun:
nohidefun ⊆ Procfun
lemma nohidefun_const:
(%f. P) ∈ nohidefun
lemma gProcfun_Rep_int_choice_fun:
∀a. Pff a ∈ gProcfun ==> (%f. !!<g> a:X .. Pff a f) ∈ gProcfun
lemma gProcfun_Rep_int_choice_com:
∀a. Pff a ∈ gProcfun ==> (%f. ! a:X .. Pff a f) ∈ gProcfun
lemma gProcfun_Rep_int_choice_f:
∀a. Pff a ∈ gProcfun ==> (%f. !<g> a:X .. Pff a f) ∈ gProcfun
lemmas gProcfun_Rep_int_choice:
∀c. Pff c ∈ gProcfun ==> (%f. !! c:C .. Pff c f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. !!<g> a:X .. Pff a f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. ! a:X .. Pff a f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. !<g> a:X .. Pff a f) ∈ gProcfun
lemmas gProcfun_Rep_int_choice:
∀c. Pff c ∈ gProcfun ==> (%f. !! c:C .. Pff c f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. !!<g> a:X .. Pff a f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. ! a:X .. Pff a f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. !<g> a:X .. Pff a f) ∈ gProcfun
lemmas gProcfun_basic_def:
(%f. STOP) ∈ gProcfun
(%f. SKIP) ∈ gProcfun
(%f. DIV) ∈ gProcfun
Pf ∈ nohidefun ==> (%f. a -> Pf f) ∈ gProcfun
∀a. Pff a ∈ nohidefun ==> (%f. ? a:X -> Pff a f) ∈ gProcfun
[| Pf ∈ gProcfun; Qf ∈ gProcfun |] ==> (%f. Pf f [+] Qf f) ∈ gProcfun
[| Pf ∈ gProcfun; Qf ∈ gProcfun |] ==> (%f. Pf f |~| Qf f) ∈ gProcfun
∀c. Pff c ∈ gProcfun ==> (%f. !! c:C .. Pff c f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. !!<g> a:X .. Pff a f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. ! a:X .. Pff a f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. !<g> a:X .. Pff a f) ∈ gProcfun
[| Pf ∈ gProcfun; Qf ∈ gProcfun |] ==> (%f. IF b THEN Pf f ELSE Qf f) ∈ gProcfun
[| Pf ∈ gProcfun; Qf ∈ gProcfun |] ==> (%f. Pf f |[X]| Qf f) ∈ gProcfun
Pf ∈ gProcfun ==> (%f. Pf f [[r]]) ∈ gProcfun
Pf ∈ gProcfun ∧ Pf ∈ gSKIPfun ∧ Qf ∈ nohidefun ∨ Pf ∈ gProcfun ∧ Qf ∈ gProcfun ==> (%f. Pf f ;; Qf f) ∈ gProcfun
Pf ∈ gProcfun ==> (%f. Pf f |. n) ∈ gProcfun
(%f. P -- X) ∈ gProcfun
lemmas gProcfun_basic_def:
(%f. STOP) ∈ gProcfun
(%f. SKIP) ∈ gProcfun
(%f. DIV) ∈ gProcfun
Pf ∈ nohidefun ==> (%f. a -> Pf f) ∈ gProcfun
∀a. Pff a ∈ nohidefun ==> (%f. ? a:X -> Pff a f) ∈ gProcfun
[| Pf ∈ gProcfun; Qf ∈ gProcfun |] ==> (%f. Pf f [+] Qf f) ∈ gProcfun
[| Pf ∈ gProcfun; Qf ∈ gProcfun |] ==> (%f. Pf f |~| Qf f) ∈ gProcfun
∀c. Pff c ∈ gProcfun ==> (%f. !! c:C .. Pff c f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. !!<g> a:X .. Pff a f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. ! a:X .. Pff a f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. !<g> a:X .. Pff a f) ∈ gProcfun
[| Pf ∈ gProcfun; Qf ∈ gProcfun |] ==> (%f. IF b THEN Pf f ELSE Qf f) ∈ gProcfun
[| Pf ∈ gProcfun; Qf ∈ gProcfun |] ==> (%f. Pf f |[X]| Qf f) ∈ gProcfun
Pf ∈ gProcfun ==> (%f. Pf f [[r]]) ∈ gProcfun
Pf ∈ gProcfun ∧ Pf ∈ gSKIPfun ∧ Qf ∈ nohidefun ∨ Pf ∈ gProcfun ∧ Qf ∈ gProcfun ==> (%f. Pf f ;; Qf f) ∈ gProcfun
Pf ∈ gProcfun ==> (%f. Pf f |. n) ∈ gProcfun
(%f. P -- X) ∈ gProcfun
lemma gProcfun_implies_nohidefun:
Pf ∈ gProcfun ==> Pf ∈ nohidefun
lemma gProcfun_implies_Procfun:
Pf ∈ gProcfun ==> Pf ∈ Procfun
lemma gProcfun_subseteq_Procfun:
gProcfun ⊆ Procfun
lemma gProcfun_const:
(%f. P) ∈ gProcfun
lemma gSKIPfun_p_iff:
((%f. f p) ∈ gSKIPfun) = False
lemma gSKIPfun_STOP_iff:
(%f. STOP) ∈ gSKIPfun
lemma gSKIPfun_SKIP_iff:
((%f. SKIP) ∈ gSKIPfun) = False
lemma gSKIPfun_DIV_iff:
(%f. DIV) ∈ gSKIPfun
lemma gSKIPfun_Act_prefix_iff:
((%f. a -> Pf f) ∈ gSKIPfun) = (Pf ∈ Procfun)
lemma gSKIPfun_Ext_pre_choice_iff:
((%f. ? a:X -> Pff a f) ∈ gSKIPfun) = (∀a. Pff a ∈ Procfun)
lemma gSKIPfun_Ext_choice_iff:
((%f. Pf f [+] Qf f) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∧ Qf ∈ gSKIPfun)
lemma gSKIPfun_Int_choice_iff:
((%f. Pf f |~| Qf f) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∧ Qf ∈ gSKIPfun)
lemma gSKIPfun_Rep_int_choice0_iff:
((%f. !! c:C .. Pff c f) ∈ gSKIPfun) = (∀c. Pff c ∈ gSKIPfun)
lemma gSKIPfun_IF_iff:
((%f. IF b THEN Pf f ELSE Qf f) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∧ Qf ∈ gSKIPfun)
lemma gSKIPfun_Parallel_iff:
((%f. Pf f |[X]| Qf f) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∧ Qf ∈ Procfun ∨ Pf ∈ Procfun ∧ Qf ∈ gSKIPfun)
lemma gSKIPfun_Hiding_iff:
((%f. Pf f -- X) ∈ gSKIPfun) = False
lemma gSKIPfun_Renaming_iff:
((%f. Pf f [[r]]) ∈ gSKIPfun) = (Pf ∈ gSKIPfun)
lemma gSKIPfun_Seq_compo_iff:
((%f. Pf f ;; Qf f) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∧ Qf ∈ Procfun ∨ Pf ∈ Procfun ∧ Qf ∈ gSKIPfun)
lemma gSKIPfun_Depth_rest_iff:
((%f. Pf f |. n) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∨ (∃P. Pf = (%f. P) ∧ n = 0))
lemmas gSKIPfun_iff:
((%f. f p) ∈ gSKIPfun) = False
((%f. SKIP) ∈ gSKIPfun) = False
(%f. STOP) ∈ gSKIPfun
(%f. DIV) ∈ gSKIPfun
((%f. a -> Pf f) ∈ gSKIPfun) = (Pf ∈ Procfun)
((%f. ? a:X -> Pff a f) ∈ gSKIPfun) = (∀a. Pff a ∈ Procfun)
((%f. Pf f [+] Qf f) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∧ Qf ∈ gSKIPfun)
((%f. Pf f |~| Qf f) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∧ Qf ∈ gSKIPfun)
((%f. !! c:C .. Pff c f) ∈ gSKIPfun) = (∀c. Pff c ∈ gSKIPfun)
((%f. IF b THEN Pf f ELSE Qf f) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∧ Qf ∈ gSKIPfun)
((%f. Pf f |[X]| Qf f) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∧ Qf ∈ Procfun ∨ Pf ∈ Procfun ∧ Qf ∈ gSKIPfun)
((%f. Pf f -- X) ∈ gSKIPfun) = False
((%f. Pf f [[r]]) ∈ gSKIPfun) = (Pf ∈ gSKIPfun)
((%f. Pf f ;; Qf f) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∧ Qf ∈ Procfun ∨ Pf ∈ Procfun ∧ Qf ∈ gSKIPfun)
((%f. Pf f |. n) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∨ (∃P. Pf = (%f. P) ∧ n = 0))
lemmas gSKIPfun_iff:
((%f. f p) ∈ gSKIPfun) = False
((%f. SKIP) ∈ gSKIPfun) = False
(%f. STOP) ∈ gSKIPfun
(%f. DIV) ∈ gSKIPfun
((%f. a -> Pf f) ∈ gSKIPfun) = (Pf ∈ Procfun)
((%f. ? a:X -> Pff a f) ∈ gSKIPfun) = (∀a. Pff a ∈ Procfun)
((%f. Pf f [+] Qf f) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∧ Qf ∈ gSKIPfun)
((%f. Pf f |~| Qf f) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∧ Qf ∈ gSKIPfun)
((%f. !! c:C .. Pff c f) ∈ gSKIPfun) = (∀c. Pff c ∈ gSKIPfun)
((%f. IF b THEN Pf f ELSE Qf f) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∧ Qf ∈ gSKIPfun)
((%f. Pf f |[X]| Qf f) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∧ Qf ∈ Procfun ∨ Pf ∈ Procfun ∧ Qf ∈ gSKIPfun)
((%f. Pf f -- X) ∈ gSKIPfun) = False
((%f. Pf f [[r]]) ∈ gSKIPfun) = (Pf ∈ gSKIPfun)
((%f. Pf f ;; Qf f) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∧ Qf ∈ Procfun ∨ Pf ∈ Procfun ∧ Qf ∈ gSKIPfun)
((%f. Pf f |. n) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∨ (∃P. Pf = (%f. P) ∧ n = 0))
lemma nohidefun_p_iff:
(%f. f p) ∈ nohidefun
lemma nohidefun_STOP_iff:
(%f. STOP) ∈ nohidefun
lemma nohidefun_SKIP_iff:
(%f. SKIP) ∈ nohidefun
lemma nohidefun_DIV_iff:
(%f. DIV) ∈ nohidefun
lemma nohidefun_Act_prefix_iff:
((%f. a -> Pf f) ∈ nohidefun) = (Pf ∈ nohidefun)
lemma nohidefun_Ext_pre_choice_iff:
((%f. ? a:X -> Pff a f) ∈ nohidefun) = (∀a. Pff a ∈ nohidefun)
lemma nohidefun_Ext_choice_iff:
((%f. Pf f [+] Qf f) ∈ nohidefun) = (Pf ∈ nohidefun ∧ Qf ∈ nohidefun)
lemma nohidefun_Int_choice_iff:
((%f. Pf f |~| Qf f) ∈ nohidefun) = (Pf ∈ nohidefun ∧ Qf ∈ nohidefun)
lemma nohidefun_Rep_int_choice0_iff:
((%f. !! c:C .. Pff c f) ∈ nohidefun) = (∀c. Pff c ∈ nohidefun)
lemma nohidefun_IF_iff:
((%f. IF b THEN Pf f ELSE Qf f) ∈ nohidefun) = (Pf ∈ nohidefun ∧ Qf ∈ nohidefun)
lemma nohidefun_Parallel_iff:
((%f. Pf f |[X]| Qf f) ∈ nohidefun) = (Pf ∈ nohidefun ∧ Qf ∈ nohidefun)
lemma nohidefun_Hiding_iff:
((%f. Pf f -- X) ∈ nohidefun) = (∃P. Pf = (%f. P))
lemma nohidefun_Renaming_iff:
((%f. Pf f [[r]]) ∈ nohidefun) = (Pf ∈ nohidefun)
lemma nohidefun_Seq_compo_iff:
((%f. Pf f ;; Qf f) ∈ nohidefun) = (Pf ∈ nohidefun ∧ Qf ∈ nohidefun)
lemma nohidefun_Depth_rest_iff:
((%f. Pf f |. n) ∈ nohidefun) = (Pf ∈ nohidefun)
lemmas nohidefun_iff:
(%f. f p) ∈ nohidefun
(%f. SKIP) ∈ nohidefun
(%f. STOP) ∈ nohidefun
(%f. DIV) ∈ nohidefun
((%f. a -> Pf f) ∈ nohidefun) = (Pf ∈ nohidefun)
((%f. ? a:X -> Pff a f) ∈ nohidefun) = (∀a. Pff a ∈ nohidefun)
((%f. Pf f [+] Qf f) ∈ nohidefun) = (Pf ∈ nohidefun ∧ Qf ∈ nohidefun)
((%f. Pf f |~| Qf f) ∈ nohidefun) = (Pf ∈ nohidefun ∧ Qf ∈ nohidefun)
((%f. !! c:C .. Pff c f) ∈ nohidefun) = (∀c. Pff c ∈ nohidefun)
((%f. IF b THEN Pf f ELSE Qf f) ∈ nohidefun) = (Pf ∈ nohidefun ∧ Qf ∈ nohidefun)
((%f. Pf f |[X]| Qf f) ∈ nohidefun) = (Pf ∈ nohidefun ∧ Qf ∈ nohidefun)
((%f. Pf f -- X) ∈ nohidefun) = (∃P. Pf = (%f. P))
((%f. Pf f [[r]]) ∈ nohidefun) = (Pf ∈ nohidefun)
((%f. Pf f ;; Qf f) ∈ nohidefun) = (Pf ∈ nohidefun ∧ Qf ∈ nohidefun)
((%f. Pf f |. n) ∈ nohidefun) = (Pf ∈ nohidefun)
lemmas nohidefun_iff:
(%f. f p) ∈ nohidefun
(%f. SKIP) ∈ nohidefun
(%f. STOP) ∈ nohidefun
(%f. DIV) ∈ nohidefun
((%f. a -> Pf f) ∈ nohidefun) = (Pf ∈ nohidefun)
((%f. ? a:X -> Pff a f) ∈ nohidefun) = (∀a. Pff a ∈ nohidefun)
((%f. Pf f [+] Qf f) ∈ nohidefun) = (Pf ∈ nohidefun ∧ Qf ∈ nohidefun)
((%f. Pf f |~| Qf f) ∈ nohidefun) = (Pf ∈ nohidefun ∧ Qf ∈ nohidefun)
((%f. !! c:C .. Pff c f) ∈ nohidefun) = (∀c. Pff c ∈ nohidefun)
((%f. IF b THEN Pf f ELSE Qf f) ∈ nohidefun) = (Pf ∈ nohidefun ∧ Qf ∈ nohidefun)
((%f. Pf f |[X]| Qf f) ∈ nohidefun) = (Pf ∈ nohidefun ∧ Qf ∈ nohidefun)
((%f. Pf f -- X) ∈ nohidefun) = (∃P. Pf = (%f. P))
((%f. Pf f [[r]]) ∈ nohidefun) = (Pf ∈ nohidefun)
((%f. Pf f ;; Qf f) ∈ nohidefun) = (Pf ∈ nohidefun ∧ Qf ∈ nohidefun)
((%f. Pf f |. n) ∈ nohidefun) = (Pf ∈ nohidefun)
lemma gProcfun_p_iff:
((%f. f p) ∈ gProcfun) = False
lemma gProcfun_STOP_iff:
(%f. STOP) ∈ gProcfun
lemma gProcfun_SKIP_iff:
(%f. SKIP) ∈ gProcfun
lemma gProcfun_DIV_iff:
(%f. DIV) ∈ gProcfun
lemma gProcfun_Act_prefix_iff:
((%f. a -> Pf f) ∈ gProcfun) = (Pf ∈ nohidefun)
lemma gProcfun_Ext_pre_choice_iff:
((%f. ? a:X -> Pff a f) ∈ gProcfun) = (∀a. Pff a ∈ nohidefun)
lemma gProcfun_Ext_choice_iff:
((%f. Pf f [+] Qf f) ∈ gProcfun) = (Pf ∈ gProcfun ∧ Qf ∈ gProcfun)
lemma gProcfun_Int_choice_iff:
((%f. Pf f |~| Qf f) ∈ gProcfun) = (Pf ∈ gProcfun ∧ Qf ∈ gProcfun)
lemma gProcfun_Rep_int_choice0_iff:
((%f. !! c:C .. Pff c f) ∈ gProcfun) = (∀c. Pff c ∈ gProcfun)
lemma gProcfun_IF_iff:
((%f. IF b THEN Pf f ELSE Qf f) ∈ gProcfun) = (Pf ∈ gProcfun ∧ Qf ∈ gProcfun)
lemma gProcfun_Parallel_iff:
((%f. Pf f |[X]| Qf f) ∈ gProcfun) = (Pf ∈ gProcfun ∧ Qf ∈ gProcfun)
lemma gProcfun_Hiding_iff:
((%f. Pf f -- X) ∈ gProcfun) = (∃P. Pf = (%f. P))
lemma gProcfun_Renaming_iff:
((%f. Pf f [[r]]) ∈ gProcfun) = (Pf ∈ gProcfun)
lemma gProcfun_Seq_compo_iff:
((%f. Pf f ;; Qf f) ∈ gProcfun) = (Pf ∈ gProcfun ∧ Pf ∈ gSKIPfun ∧ Qf ∈ nohidefun ∨ Pf ∈ gProcfun ∧ Qf ∈ gProcfun)
lemma gProcfun_Depth_rest_iff:
((%f. Pf f |. n) ∈ gProcfun) = (Pf ∈ gProcfun)
lemmas gProcfun_iff:
((%f. f p) ∈ gProcfun) = False
(%f. SKIP) ∈ gProcfun
(%f. STOP) ∈ gProcfun
(%f. DIV) ∈ gProcfun
((%f. a -> Pf f) ∈ gProcfun) = (Pf ∈ nohidefun)
((%f. ? a:X -> Pff a f) ∈ gProcfun) = (∀a. Pff a ∈ nohidefun)
((%f. Pf f [+] Qf f) ∈ gProcfun) = (Pf ∈ gProcfun ∧ Qf ∈ gProcfun)
((%f. Pf f |~| Qf f) ∈ gProcfun) = (Pf ∈ gProcfun ∧ Qf ∈ gProcfun)
((%f. !! c:C .. Pff c f) ∈ gProcfun) = (∀c. Pff c ∈ gProcfun)
((%f. IF b THEN Pf f ELSE Qf f) ∈ gProcfun) = (Pf ∈ gProcfun ∧ Qf ∈ gProcfun)
((%f. Pf f |[X]| Qf f) ∈ gProcfun) = (Pf ∈ gProcfun ∧ Qf ∈ gProcfun)
((%f. Pf f -- X) ∈ gProcfun) = (∃P. Pf = (%f. P))
((%f. Pf f [[r]]) ∈ gProcfun) = (Pf ∈ gProcfun)
((%f. Pf f ;; Qf f) ∈ gProcfun) = (Pf ∈ gProcfun ∧ Pf ∈ gSKIPfun ∧ Qf ∈ nohidefun ∨ Pf ∈ gProcfun ∧ Qf ∈ gProcfun)
((%f. Pf f |. n) ∈ gProcfun) = (Pf ∈ gProcfun)
lemmas gProcfun_iff:
((%f. f p) ∈ gProcfun) = False
(%f. SKIP) ∈ gProcfun
(%f. STOP) ∈ gProcfun
(%f. DIV) ∈ gProcfun
((%f. a -> Pf f) ∈ gProcfun) = (Pf ∈ nohidefun)
((%f. ? a:X -> Pff a f) ∈ gProcfun) = (∀a. Pff a ∈ nohidefun)
((%f. Pf f [+] Qf f) ∈ gProcfun) = (Pf ∈ gProcfun ∧ Qf ∈ gProcfun)
((%f. Pf f |~| Qf f) ∈ gProcfun) = (Pf ∈ gProcfun ∧ Qf ∈ gProcfun)
((%f. !! c:C .. Pff c f) ∈ gProcfun) = (∀c. Pff c ∈ gProcfun)
((%f. IF b THEN Pf f ELSE Qf f) ∈ gProcfun) = (Pf ∈ gProcfun ∧ Qf ∈ gProcfun)
((%f. Pf f |[X]| Qf f) ∈ gProcfun) = (Pf ∈ gProcfun ∧ Qf ∈ gProcfun)
((%f. Pf f -- X) ∈ gProcfun) = (∃P. Pf = (%f. P))
((%f. Pf f [[r]]) ∈ gProcfun) = (Pf ∈ gProcfun)
((%f. Pf f ;; Qf f) ∈ gProcfun) = (Pf ∈ gProcfun ∧ Pf ∈ gSKIPfun ∧ Qf ∈ nohidefun ∨ Pf ∈ gProcfun ∧ Qf ∈ gProcfun)
((%f. Pf f |. n) ∈ gProcfun) = (Pf ∈ gProcfun)
lemma gSKIPfun_Rep_int_choice_fun_iff:
inj g ==> ((%f. !!<g> a:X .. Pff a f) ∈ gSKIPfun) = (∀a. Pff a ∈ gSKIPfun)
lemma gSKIPfun_Rep_int_choice_com_iff:
((%f. ! a:X .. Pff a f) ∈ gSKIPfun) = (∀a. Pff a ∈ gSKIPfun)
lemma gSKIPfun_Rep_int_choice_f_iff:
inj g ==> ((%f. !<g> a:X .. Pff a f) ∈ gSKIPfun) = (∀a. Pff a ∈ gSKIPfun)
lemma gSKIPfun_Alpha_parallel_iff:
((%f. Pf f |[X,Y]| Qf f) ∈ gSKIPfun) = (Pf ∈ gSKIPfun ∧ Qf ∈ Procfun ∨ Pf ∈ Procfun ∧ Qf ∈ gSKIPfun)
lemma gSKIPfun_MU:
∀Pf∈gSKIPfun. (%f. PfX f (Pf f)) ∈ gSKIPfun ==> (%f. MUX (PfX f)) ∈ gSKIPfun
lemma gSKIPfun_MU1:
∀Pf. (%f. PfX f (Pf f)) ∈ gSKIPfun ==> (%f. MUX! (PfX f)) ∈ gSKIPfun
lemmas gSKIPfun_def:
(%f. STOP) ∈ gSKIPfun
(%f. DIV) ∈ gSKIPfun
Pf ∈ Procfun ==> (%f. a -> Pf f) ∈ gSKIPfun
∀a. Pff a ∈ Procfun ==> (%f. ? a:X -> Pff a f) ∈ gSKIPfun
[| Pf ∈ gSKIPfun; Qf ∈ gSKIPfun |] ==> (%f. Pf f [+] Qf f) ∈ gSKIPfun
[| Pf ∈ gSKIPfun; Qf ∈ gSKIPfun |] ==> (%f. Pf f |~| Qf f) ∈ gSKIPfun
∀c. Pff c ∈ gSKIPfun ==> (%f. !! c:C .. Pff c f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. !!<g> a:X .. Pff a f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. ! a:X .. Pff a f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. !<g> a:X .. Pff a f) ∈ gSKIPfun
[| Pf ∈ gSKIPfun; Qf ∈ gSKIPfun |] ==> (%f. IF b THEN Pf f ELSE Qf f) ∈ gSKIPfun
Pf ∈ gSKIPfun ∧ Qf ∈ Procfun ∨ Pf ∈ Procfun ∧ Qf ∈ gSKIPfun ==> (%f. Pf f |[X]| Qf f) ∈ gSKIPfun
Pf ∈ gSKIPfun ==> (%f. Pf f [[r]]) ∈ gSKIPfun
Pf ∈ gSKIPfun ∧ Qf ∈ Procfun ∨ Pf ∈ Procfun ∧ Qf ∈ gSKIPfun ==> (%f. Pf f ;; Qf f) ∈ gSKIPfun
Pf ∈ gSKIPfun ==> (%f. Pf f |. n) ∈ gSKIPfun
(%f. P |. 0) ∈ gSKIPfun
∀Pf∈gSKIPfun. (%f. PfX f (Pf f)) ∈ gSKIPfun ==> (%f. MUX (PfX f)) ∈ gSKIPfun
∀Pf. (%f. PfX f (Pf f)) ∈ gSKIPfun ==> (%f. MUX! (PfX f)) ∈ gSKIPfun
lemmas gSKIPfun_def:
(%f. STOP) ∈ gSKIPfun
(%f. DIV) ∈ gSKIPfun
Pf ∈ Procfun ==> (%f. a -> Pf f) ∈ gSKIPfun
∀a. Pff a ∈ Procfun ==> (%f. ? a:X -> Pff a f) ∈ gSKIPfun
[| Pf ∈ gSKIPfun; Qf ∈ gSKIPfun |] ==> (%f. Pf f [+] Qf f) ∈ gSKIPfun
[| Pf ∈ gSKIPfun; Qf ∈ gSKIPfun |] ==> (%f. Pf f |~| Qf f) ∈ gSKIPfun
∀c. Pff c ∈ gSKIPfun ==> (%f. !! c:C .. Pff c f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. !!<g> a:X .. Pff a f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. ! a:X .. Pff a f) ∈ gSKIPfun
∀a. Pff a ∈ gSKIPfun ==> (%f. !<g> a:X .. Pff a f) ∈ gSKIPfun
[| Pf ∈ gSKIPfun; Qf ∈ gSKIPfun |] ==> (%f. IF b THEN Pf f ELSE Qf f) ∈ gSKIPfun
Pf ∈ gSKIPfun ∧ Qf ∈ Procfun ∨ Pf ∈ Procfun ∧ Qf ∈ gSKIPfun ==> (%f. Pf f |[X]| Qf f) ∈ gSKIPfun
Pf ∈ gSKIPfun ==> (%f. Pf f [[r]]) ∈ gSKIPfun
Pf ∈ gSKIPfun ∧ Qf ∈ Procfun ∨ Pf ∈ Procfun ∧ Qf ∈ gSKIPfun ==> (%f. Pf f ;; Qf f) ∈ gSKIPfun
Pf ∈ gSKIPfun ==> (%f. Pf f |. n) ∈ gSKIPfun
(%f. P |. 0) ∈ gSKIPfun
∀Pf∈gSKIPfun. (%f. PfX f (Pf f)) ∈ gSKIPfun ==> (%f. MUX (PfX f)) ∈ gSKIPfun
∀Pf. (%f. PfX f (Pf f)) ∈ gSKIPfun ==> (%f. MUX! (PfX f)) ∈ gSKIPfun
lemma
(%Z. MU X .. a -> (MU! Y .. b -> X [+] c -> Y |~| d -> Z i)) ∈ gSKIPfun
lemma
∀a. P a ∈ gSKIPfun ==> (%f. !set X:Xs .. P X f) ∈ gSKIPfun
lemma nohidefun_Rep_int_choice_fun_iff:
inj g ==> ((%f. !!<g> a:X .. Pff a f) ∈ nohidefun) = (∀a. Pff a ∈ nohidefun)
lemma nohidefun_Rep_int_choice_com_iff:
((%f. ! a:X .. Pff a f) ∈ nohidefun) = (∀a. Pff a ∈ nohidefun)
lemma nohidefun_Rep_int_choice_f_iff:
inj g ==> ((%f. !<g> a:X .. Pff a f) ∈ nohidefun) = (∀a. Pff a ∈ nohidefun)
lemma nohidefun_Alpha_parallel_iff:
((%f. Pf f |[X,Y]| Qf f) ∈ nohidefun) = (Pf ∈ nohidefun ∧ Qf ∈ nohidefun)
lemma nohidefun_MU:
∀Pf∈nohidefun. (%f. PfX f (Pf f)) ∈ nohidefun ==> (%f. MUX (PfX f)) ∈ nohidefun
lemma nohidefun_MU1:
∀Pf∈nohidefun. (%f. PfX f (Pf f)) ∈ nohidefun ==> (%f. MUX! (PfX f)) ∈ nohidefun
lemmas nohidefun_def:
(%f. f p) ∈ nohidefun
(%f. STOP) ∈ nohidefun
(%f. SKIP) ∈ nohidefun
(%f. DIV) ∈ nohidefun
Pf ∈ nohidefun ==> (%f. a -> Pf f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. ? a:X -> Pff a f) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. Pf f [+] Qf f) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. Pf f |~| Qf f) ∈ nohidefun
∀c. Pff c ∈ nohidefun ==> (%f. !! c:C .. Pff c f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. !!<g> a:X .. Pff a f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. ! a:X .. Pff a f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. !<g> a:X .. Pff a f) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. IF b THEN Pf f ELSE Qf f) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. Pf f |[X]| Qf f) ∈ nohidefun
Pf ∈ nohidefun ==> (%f. Pf f [[r]]) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. Pf f ;; Qf f) ∈ nohidefun
Pf ∈ nohidefun ==> (%f. Pf f |. n) ∈ nohidefun
(%f. P -- X) ∈ nohidefun
∀Pf∈nohidefun. (%f. PfX f (Pf f)) ∈ nohidefun ==> (%f. MUX (PfX f)) ∈ nohidefun
∀Pf∈nohidefun. (%f. PfX f (Pf f)) ∈ nohidefun ==> (%f. MUX! (PfX f)) ∈ nohidefun
lemmas nohidefun_def:
(%f. f p) ∈ nohidefun
(%f. STOP) ∈ nohidefun
(%f. SKIP) ∈ nohidefun
(%f. DIV) ∈ nohidefun
Pf ∈ nohidefun ==> (%f. a -> Pf f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. ? a:X -> Pff a f) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. Pf f [+] Qf f) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. Pf f |~| Qf f) ∈ nohidefun
∀c. Pff c ∈ nohidefun ==> (%f. !! c:C .. Pff c f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. !!<g> a:X .. Pff a f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. ! a:X .. Pff a f) ∈ nohidefun
∀a. Pff a ∈ nohidefun ==> (%f. !<g> a:X .. Pff a f) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. IF b THEN Pf f ELSE Qf f) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. Pf f |[X]| Qf f) ∈ nohidefun
Pf ∈ nohidefun ==> (%f. Pf f [[r]]) ∈ nohidefun
[| Pf ∈ nohidefun; Qf ∈ nohidefun |] ==> (%f. Pf f ;; Qf f) ∈ nohidefun
Pf ∈ nohidefun ==> (%f. Pf f |. n) ∈ nohidefun
(%f. P -- X) ∈ nohidefun
∀Pf∈nohidefun. (%f. PfX f (Pf f)) ∈ nohidefun ==> (%f. MUX (PfX f)) ∈ nohidefun
∀Pf∈nohidefun. (%f. PfX f (Pf f)) ∈ nohidefun ==> (%f. MUX! (PfX f)) ∈ nohidefun
lemma
(%Z. MU X .. a -> (MU! Y .. b -> X [+] c -> Y |~| d -> Z i)) ∈ nohidefun
lemma gProcfun_Rep_int_choice_fun_iff:
inj g ==> ((%f. !!<g> a:X .. Pff a f) ∈ gProcfun) = (∀a. Pff a ∈ gProcfun)
lemma gProcfun_Rep_int_choice_com_iff:
((%f. ! a:X .. Pff a f) ∈ gProcfun) = (∀a. Pff a ∈ gProcfun)
lemma gProcfun_Rep_int_choice_f_iff:
inj g ==> ((%f. !<g> a:X .. Pff a f) ∈ gProcfun) = (∀a. Pff a ∈ gProcfun)
lemma gProcfun_Alpha_parallel_iff:
((%f. Pf f |[X,Y]| Qf f) ∈ gProcfun) = (Pf ∈ gProcfun ∧ Qf ∈ gProcfun)
lemma gProcfun_MU:
∀Pf∈gProcfun. (%f. PfX f (Pf f)) ∈ gProcfun ==> (%f. MUX (PfX f)) ∈ gProcfun
lemma gProcfun_MU1:
∀Pf∈gProcfun. (%f. PfX f (Pf f)) ∈ gProcfun ==> (%f. MUX! (PfX f)) ∈ gProcfun
lemmas gProcfun_def:
(%f. STOP) ∈ gProcfun
(%f. SKIP) ∈ gProcfun
(%f. DIV) ∈ gProcfun
Pf ∈ nohidefun ==> (%f. a -> Pf f) ∈ gProcfun
∀a. Pff a ∈ nohidefun ==> (%f. ? a:X -> Pff a f) ∈ gProcfun
[| Pf ∈ gProcfun; Qf ∈ gProcfun |] ==> (%f. Pf f [+] Qf f) ∈ gProcfun
[| Pf ∈ gProcfun; Qf ∈ gProcfun |] ==> (%f. Pf f |~| Qf f) ∈ gProcfun
∀c. Pff c ∈ gProcfun ==> (%f. !! c:C .. Pff c f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. !!<g> a:X .. Pff a f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. ! a:X .. Pff a f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. !<g> a:X .. Pff a f) ∈ gProcfun
[| Pf ∈ gProcfun; Qf ∈ gProcfun |] ==> (%f. IF b THEN Pf f ELSE Qf f) ∈ gProcfun
[| Pf ∈ gProcfun; Qf ∈ gProcfun |] ==> (%f. Pf f |[X]| Qf f) ∈ gProcfun
Pf ∈ gProcfun ==> (%f. Pf f [[r]]) ∈ gProcfun
Pf ∈ gProcfun ∧ Pf ∈ gSKIPfun ∧ Qf ∈ nohidefun ∨ Pf ∈ gProcfun ∧ Qf ∈ gProcfun ==> (%f. Pf f ;; Qf f) ∈ gProcfun
Pf ∈ gProcfun ==> (%f. Pf f |. n) ∈ gProcfun
(%f. P -- X) ∈ gProcfun
∀Pf∈gProcfun. (%f. PfX f (Pf f)) ∈ gProcfun ==> (%f. MUX (PfX f)) ∈ gProcfun
∀Pf∈gProcfun. (%f. PfX f (Pf f)) ∈ gProcfun ==> (%f. MUX! (PfX f)) ∈ gProcfun
lemmas gProcfun_def:
(%f. STOP) ∈ gProcfun
(%f. SKIP) ∈ gProcfun
(%f. DIV) ∈ gProcfun
Pf ∈ nohidefun ==> (%f. a -> Pf f) ∈ gProcfun
∀a. Pff a ∈ nohidefun ==> (%f. ? a:X -> Pff a f) ∈ gProcfun
[| Pf ∈ gProcfun; Qf ∈ gProcfun |] ==> (%f. Pf f [+] Qf f) ∈ gProcfun
[| Pf ∈ gProcfun; Qf ∈ gProcfun |] ==> (%f. Pf f |~| Qf f) ∈ gProcfun
∀c. Pff c ∈ gProcfun ==> (%f. !! c:C .. Pff c f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. !!<g> a:X .. Pff a f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. ! a:X .. Pff a f) ∈ gProcfun
∀a. Pff a ∈ gProcfun ==> (%f. !<g> a:X .. Pff a f) ∈ gProcfun
[| Pf ∈ gProcfun; Qf ∈ gProcfun |] ==> (%f. IF b THEN Pf f ELSE Qf f) ∈ gProcfun
[| Pf ∈ gProcfun; Qf ∈ gProcfun |] ==> (%f. Pf f |[X]| Qf f) ∈ gProcfun
Pf ∈ gProcfun ==> (%f. Pf f [[r]]) ∈ gProcfun
Pf ∈ gProcfun ∧ Pf ∈ gSKIPfun ∧ Qf ∈ nohidefun ∨ Pf ∈ gProcfun ∧ Qf ∈ gProcfun ==> (%f. Pf f ;; Qf f) ∈ gProcfun
Pf ∈ gProcfun ==> (%f. Pf f |. n) ∈ gProcfun
(%f. P -- X) ∈ gProcfun
∀Pf∈gProcfun. (%f. PfX f (Pf f)) ∈ gProcfun ==> (%f. MUX (PfX f)) ∈ gProcfun
∀Pf∈gProcfun. (%f. PfX f (Pf f)) ∈ gProcfun ==> (%f. MUX! (PfX f)) ∈ gProcfun
lemma
(%Z. MU! X .. a -> (MU! Y .. b -> X [+] c -> Y |~| d -> Z i)) ∈ gProcfun
lemma
((%Z. (MU X .. a -> (MU! Y .. b -> X [+] c -> Y |~| d -> Z i)) |~| Z j) ∈ gProcfun) = False
lemma gSKIPFun_implies_ProcFun:
PF ∈ gSKIPFun ==> PF ∈ ProcFun
lemma nohideFun_implies_ProcFun:
PF ∈ nohideFun ==> PF ∈ ProcFun
lemma gProcFun_implies_ProcFun:
PF ∈ gProcFun ==> PF ∈ ProcFun
lemma gSKIPX_implies_ProcX:
PX ∈ gSKIPX ==> PX ∈ ProcX
lemma nohideX_implies_ProcX:
PX ∈ nohideX ==> PX ∈ ProcX
lemma gProcX_implies_ProcX:
PX ∈ gProcX ==> PX ∈ ProcX
lemma wf_procterm:
wf procterm
lemma on_Not_Decompo_Flag:
Not_Decompo_Flag ∧ R ==> R
lemma off_Not_Decompo_Flag:
R ==> Not_Decompo_Flag ∧ R
lemma off_Not_Decompo_Flag_True:
Not_Decompo_Flag
lemmas CSP_Fun_def:
ProcFun == {PF. ∀p. (%f. PF f p) ∈ Procfun}
gSKIPFun == {PF. ∀p. (%f. PF f p) ∈ gSKIPfun}
gProcFun == {PF. ∀p. (%f. PF f p) ∈ gProcfun}
nohideFun == {PF. ∀p. (%f. PF f p) ∈ nohidefun}
lemmas CSP_Fun_def:
ProcFun == {PF. ∀p. (%f. PF f p) ∈ Procfun}
gSKIPFun == {PF. ∀p. (%f. PF f p) ∈ gSKIPfun}
gProcFun == {PF. ∀p. (%f. PF f p) ∈ gProcfun}
nohideFun == {PF. ∀p. (%f. PF f p) ∈ nohidefun}
lemma Rep_int_choice_fun_SET_eq:
(!set :Xs1.0 .. Pf = !set :Xs2.0 .. Pf) = (Xs1.0 = Xs2.0)
lemma Rep_int_choice_fun_SET_decompo:
!set :Xs1.0 .. Pf1.0 = !set :Xs2.0 .. Pf2.0 ==> Xs1.0 = Xs2.0 ∧ (∀X∈Xs2.0. Pf1.0 X = Pf2.0 X)