(* Title:Thepi-calculus Author/Maintainer:JesperBengtson(jebe.dk),2012
*) theory Agent imports"HOL-Nominal.Nominal" begin
lemma pt_id: fixes x :: 'a and a :: 'x
assumes pt: "pt TYPE('a) TYPE('x)" and at: "at TYPE('x)" shows"[(a, a)] ∙ x = x" proof - have"x = ([]::'x prm) ∙ x" by(simp add: pt1[OF pt]) alsohave"[(a, a)] ∙ x = ([]::'x prm) ∙ x" by(simp add: pt3[OF pt] at_ds1[OF at]) finallyshow ?thesis by simp qed
lemma pt_swap: fixes x :: 'a and a :: 'x and b :: 'x
assumes pt: "pt TYPE('a) TYPE('x)" and at: "at TYPE('x)"
shows"[(a, b)] ∙ x = [(b, a)] ∙ x" proof - show ?thesis by(simp add: pt3[OF pt] at_ds5[OF at]) qed
atom_decl name
lemmas name_fresh_abs = fresh_abs_fun_iff[OF pt_name_inst, OF at_name_inst, OF fs_name1] lemmas name_bij = at_bij[OF at_name_inst] lemmas name_supp_abs = abs_fun_supp[OF pt_name_inst, OF at_name_inst, OF fs_name1] lemmas name_abs_eq = abs_fun_eq[OF pt_name_inst, OF at_name_inst] lemmas name_supp = at_supp[OF at_name_inst] lemmas name_calc = at_calc[OF at_name_inst] lemmas name_fresh_fresh = pt_fresh_fresh[OF pt_name_inst, OF at_name_inst] lemmas name_fresh_left = pt_fresh_left[OF pt_name_inst, OF at_name_inst] lemmas name_fresh_right = pt_fresh_right[OF pt_name_inst, OF at_name_inst] lemmas name_id[simp] = pt_id[OF pt_name_inst, OF at_name_inst] lemmas name_swap_bij[simp] = pt_swap_bij[OF pt_name_inst, OF at_name_inst] lemmas name_swap = pt_swap[OF pt_name_inst, OF at_name_inst] lemmas name_rev_per = pt_rev_pi[OF pt_name_inst, OF at_name_inst] lemmas name_per_rev = pt_pi_rev[OF pt_name_inst, OF at_name_inst] lemmas name_exists_fresh = at_exists_fresh[OF at_name_inst, OF fs_name1] lemmas name_perm_compose = pt_perm_compose[OF pt_name_inst, OF at_name_inst]
nominal_datatype pi = PiNil (‹0›)
| Output name name pi (‹_{_}._› [120, 120, 110] 110)
| Tau pi (‹τ._› [120] 110)
| Input name "«name¬ pi" (‹_🪙._› [120, 120, 110] 110)
| Match name name pi (‹[_⌢_]_› [120, 120, 110] 110)
| Mismatch name name pi (‹[_≠_]_› [120, 120, 110] 110)
| Sum pi pi (infixr‹⊕›90)
| Par pi pi (infixr‹∥›85)
| Res "«name¬ pi" (‹<\<nu>_>_› [100, 100] 100)
| Bang pi (‹!_› [110] 110)
lemma forget: fixes a :: name and P :: pi and b :: name
assumes"a ♯ P"
shows"P[a::=b] = P" using assms by(nominal_induct P avoiding: a b rule: pi.strong_induct)
(auto simp add: name_fresh_abs)
lemma fresh_fact2[rule_format]: fixes P :: pi and a :: name and b :: name
assumes"a ≠ b"
shows"a ♯ P[a::=b]" using assms by(nominal_induct P avoiding: a b rule: pi.strong_induct)
(auto simp add: name_fresh_abs)
lemma subst_identity[simp]: fixes P :: pi and a :: name
shows"P[a::=a] = P" by(nominal_induct P avoiding: a rule: pi.strong_induct) auto
lemma renaming: fixes P :: pi and a :: name and b :: name and c :: name
assumes"c ♯ P"
shows"P[a::=b] = ([(c, a)] ∙ P)[c::=b]" using assms by(nominal_induct P avoiding: a b c rule: pi.strong_induct)
(auto simp add: name_calc name_fresh_abs)
lemma fresh_fact1: fixes P :: pi and a :: name and b :: name and c :: name
assumes"a ♯ P" and"a ≠ c"
shows"a ♯ P[b::=c]" using assms by(nominal_induct P avoiding: a b c rule: pi.strong_induct)
(auto simp add: name_fresh_abs)
lemma eqvt_subs[eqvt]: fixes p :: "name prm" and P :: pi and a :: name and b :: name
shows"p ∙ (P[a::=b]) = (p ∙ P)[(p ∙ a)::=(p ∙ b)]" by(nominal_induct P avoiding: a b rule: pi.strong_induct)
(auto simp add: name_bij)
lemma substInput[simp]: fixes x :: name and b :: name and c :: name and a :: name and P :: pi
primrec seq_subst_name :: "name ==> (name × name) list ==> name"where "seq_subst_name a [] = a"
| "seq_subst_name a (x#σ) = seq_subst_name (a[(fst x)::=(snd x)]) σ"
lemma freshSeqSubstName: fixes x :: name and a :: name and s :: "(name × name) list"
assumes"x ≠ a" and"x ♯ s"
shows"x ≠ seq_subst_name a s" using assms apply(induct s arbitrary: a) apply simp apply(case_tac "aa = fst(a)") by (force simp add: fresh_list_cons fresh_prod)+
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.