Up to index of Isabelle/HOL/HOL-Complex/CSP-Prover
theory Seq_compo = CSP_semantics:(*-------------------------------------------* | CSP-Prover | | December 2004 | | Yoshinao Isobe (AIST JAPAN) | *-------------------------------------------*) theory Seq_compo = CSP_semantics: (* The following simplification rules are deleted in this theory file *) (* because they unexpectly rewrite (notick | t = []t) *) (* *) (* disj_not1: (~ P | Q) = (P --> Q) *) declare disj_not1 [simp del] (* The following simplification is sometimes unexpected. *) (* *) (* not_None_eq: (x ~= None) = (EX y. x = Some y) *) declare not_None_eq [simp del] (********************************************************* DomT *********************************************************) (*** Seq_compo_domT ***) lemma Seq_compo_domT : "{u. (EX s. u = rmtick s & s :t [[P]]T ev) | (EX s t. u = s @t t & s @t [Tick]t :t [[P]]T ev & t :t [[Q]]T ev)} : domT" apply (simp add: domT_def HC_T1_def) apply (rule conjI) apply (rule_tac x="[]t" in exI, simp) apply (rule disjI1) apply (rule_tac x="[]t" in exI, simp) (* prefix closed *) apply (simp add: prefix_closed_def) apply (intro conjI) apply (intro allI impI) apply (elim conjE exE) apply (erule disjE) (* case 1 *) apply (elim conjE exE) apply (rule disjI1) apply (simp add: rmtick_prefix) apply (erule disjE, simp) (* None --> contra *) apply (elim conjE exE) apply (rule_tac x="u" in exI, simp) apply (rule memT_prefix_closed, simp_all) (* case 2 *) apply (elim conjE exE) apply (simp add: prefix_def) apply (erule exE) apply (case_tac "~ notick sa", simp) apply (case_tac "sa @t ta = None", simp add: not_None) apply (simp add: appt_decompo) apply (erule disjE) (* long case *) apply (elim conjE exE) apply (rule disjI2) apply (rule_tac x="sa" in exI) apply (rule_tac x="ua" in exI) apply (simp) apply (subgoal_tac "prefix ua (ua @t u)") apply (rule memT_prefix_closed, simp_all) apply (simp) (* short case *) apply (elim conjE exE) apply (rule disjI1) apply (rule_tac x="s" in exI) apply (case_tac "~ notick s", simp) apply (simp) apply (subgoal_tac "prefix s (s @t ua @t [Tick]t)") apply (rule memT_prefix_closed, simp_all) apply (simp) (* not None *) apply (intro allI) apply (case_tac "notick s & t ~= None") apply (erule conjE) apply (simp add: decompo_appt_not_None not_None) by (auto) (*** Seq_compo_memT ***) lemma Seq_compo_memT: "(u :t [[P ;; Q]]T ev) = ((EX s. u = rmtick s & s :t [[P]]T ev) | (EX s t. u = s @t t & s @t [Tick]t :t [[P]]T ev & t :t [[Q]]T ev))" apply (simp add: evalT_def) by (simp add: memT_def Abs_domT_inverse Seq_compo_domT[simplified memT_def]) (********************************************************* DomF *********************************************************) (*** Seq_compo_domF ***) lemma Seq_compo_domF : "{f. (EX t X. f = (t,X) & (t, X Un {Tick}) :f [[P]]F ev & notick t) | (EX s t X. f = (s @t t,X) & s @t [Tick]t :t [[P]]T ev & (t, X) :f [[Q]]F ev) } : domF" apply (simp add: domF_def HC_F2_def) apply (intro conjI) apply (intro allI impI) apply (elim conjE exE) (* case 1 *) apply (elim disjE conjE) apply (rule disjI1, simp) apply (rule memF_F2, simp, force) (* case 2 *) apply (elim conjE exE) apply (rule disjI2) apply (rule_tac x="sa" in exI) apply (rule_tac x="t" in exI) apply (simp) apply (rule memF_F2, simp, simp) (* not None *) apply (intro allI) apply (case_tac "notick s & t ~= None") apply (erule conjE) apply (simp add: decompo_appt_not_None not_None) by (auto) lemma Seq_compo_memF: "(f :f [[P ;; Q]]F ev) = ((EX t X. f = (t,X) & (t, X Un {Tick}) :f [[P]]F ev & notick t) | (EX s t X. f = (s @t t,X) & s @t [Tick]t :t [[P]]T ev & (t, X) :f [[Q]]F ev))" apply (simp only: evalF_def) apply (simp only: memF_def Abs_domF_inverse Seq_compo_domF[simplified memF_def]) by (simp) lemmas Seq_compo_mem = Seq_compo_memT Seq_compo_memF (********************************************************* domSF *********************************************************) (*** T2 ***) lemma Seq_compo_T2 : "[| ([[P]]T ev, [[P]]F ev) : domSF ; ([[Q]]T ev, [[Q]]F ev) : domSF |] ==> HC_T2 ([[P ;; Q]]T ev, [[P ;; Q]]F ev)" apply (simp add: HC_T2_def Seq_compo_mem) apply (intro allI) apply (rule conjI) (* case 1 *) apply (intro impI) apply (rule disjI1) apply (rule_tac x="s" in exI, simp) apply (simp add: domSF_def HC_T2_def) apply (elim conjE) apply (drule_tac x="s" in spec) apply (force) (* case 2 *) apply (intro impI) apply (elim conjE exE disjE) apply (rule disjI2) apply (rule_tac x="sa" in exI) apply (rule_tac x="t" in exI) apply (simp add: domSF_def HC_T2_def) apply (elim conjE) apply (rotate_tac 4) apply (drule_tac x="t" in spec) apply (force) done (*** F3 ***) lemma Seq_compo_F3 : "[| ([[P]]T ev, [[P]]F ev) : domSF ; ([[Q]]T ev, [[Q]]F ev) : domSF |] ==> HC_F3 ([[P ;; Q]]T ev, [[P ;; Q]]F ev)" apply (simp add: HC_F3_def Seq_compo_mem) apply (intro allI impI) apply (elim conjE exE disjE) (* case 1 *) apply (simp add: domSF_def HC_F3_def) apply (elim conjE) apply (drule_tac x="s" in spec) apply (drule_tac x="insert Tick X" in spec) apply (drule_tac x="Y-{Tick}" in spec) apply (simp) apply (drule mp) apply (intro allI impI) apply (drule_tac x="a" in spec, simp) apply (simp add: not_tick_to_Ev) apply (elim conjE exE, simp) apply (rotate_tac -3) apply (drule_tac x="s @t [Ev aa]t" in spec, simp) apply (subgoal_tac "insert Tick (X Un (Y - {Tick})) = insert Tick (X Un Y)", simp) apply (force) (* case 2 *) apply (simp add: domSF_def HC_F3_def) apply (elim conjE) apply (rotate_tac -2) apply (drule_tac x="t" in spec) apply (drule_tac x="X" in spec) apply (drule_tac x="Y" in spec) apply (simp) apply (drule mp) apply (intro allI impI) apply (drule_tac x="a" in spec, simp) apply (elim conjE) apply (rotate_tac -1) apply (drule_tac x="sa" in spec) apply (rotate_tac -1) apply (drule_tac x="t @t [a]t" in spec) apply (simp) apply (rule disjI2) apply (rule_tac x="sa" in exI) apply (rule_tac x="t" in exI) apply (simp) done (* T3_F4 *) lemma Seq_compo_T3_F4 : "[| ([[P]]T ev, [[P]]F ev) : domSF ; ([[Q]]T ev, [[Q]]F ev) : domSF |] ==> HC_T3_F4 ([[P ;; Q]]T ev, [[P ;; Q]]F ev)" apply (simp add: HC_T3_F4_def Seq_compo_mem) apply (intro allI impI) apply (elim conjE disjE) (* case 1 *) apply (elim conjE exE) apply (subgoal_tac "notick (s @t [Tick]t) ~= notick (rmtick sa)", simp) apply (simp (no_asm_use)) apply (simp add: not_None) (* case 2 *) apply (elim conjE exE) apply (case_tac "~ notick sa", simp) apply (insert trace_last_nil_or_unnil) apply (drule_tac x="t" in spec) apply (simp add: not_None) (* []t *) apply (erule disjE) apply (rotate_tac -5) apply (drule_tac sym, simp) (* contradict *) (* ... [Tick]t *) apply (elim conjE exE, simp) apply (simp add: appt_ass_rev del: appt_ass) apply (erule conjE) apply (rule conjI) (* F4 *) apply (rule disjI2) apply (rule_tac x="sa" in exI) apply (rule_tac x="sb" in exI) apply (simp add: domSF_def HC_F4_def) (* T3 *) apply (rule allI) apply (rule_tac x="sa" in exI) apply (rule_tac x="t" in exI) apply (simp add: domSF_def HC_T3_def) done (*** Seq_compo_domSF ***) lemma Seq_compo_domSF : "[| ([[P]]T ev, [[P]]F ev) : domSF ; ([[Q]]T ev, [[Q]]F ev) : domSF |] ==> ([[P ;; Q]]T ev, [[P ;; Q]]F ev) : domSF" apply (simp (no_asm) add: domSF_iff) apply (simp add: Seq_compo_T2) apply (simp add: Seq_compo_F3) apply (simp add: Seq_compo_T3_F4) done (********************************************************* mono *********************************************************) (*** T ***) lemma Seq_compo_evalT_mono: "[| [[P1]]T ev1 <= [[P2]]T ev2 ; [[Q1]]T ev1 <= [[Q2]]T ev2 |] ==> [[P1 ;; Q1]]T ev1 <= [[P2 ;; Q2]]T ev2" apply (simp add: subsetT_iff) apply (intro allI impI) apply (simp add: Seq_compo_memT) apply (elim conjE exE disjE) apply (rule disjI1) apply (rule_tac x="s" in exI) apply (simp) apply (rule disjI2) apply (rule_tac x="s" in exI) apply (rule_tac x="ta" in exI) apply (simp) done (*** F ***) lemma Seq_compo_evalF_mono: "[| [[P1]]T ev1 <= [[P2]]T ev2 ; [[P1]]F ev1 <= [[P2]]F ev2 ; [[Q1]]F ev1 <= [[Q2]]F ev2 |] ==> [[P1 ;; Q1]]F ev1 <= [[P2 ;; Q2]]F ev2" apply (simp add: subsetF_iff subsetT_iff) apply (intro allI impI) apply (simp add: Seq_compo_memF) apply (erule disjE, simp) apply (elim conjE exE) apply (rule disjI2) apply (rule_tac x="sa" in exI) apply (rule_tac x="t" in exI) by (simp) (****************** to add it again ******************) declare disj_not1 [simp] declare not_None_eq [simp] end
lemma Seq_compo_domT:
{u. (∃s. u = rmtick s ∧ s :t [[P]]T ev) ∨ (∃s t. u = s @t t ∧ s @t [Tick]t :t [[P]]T ev ∧ t :t [[Q]]T ev)} ∈ domT
lemma Seq_compo_memT:
(u :t [[P ;; Q]]T ev) = ((∃s. u = rmtick s ∧ s :t [[P]]T ev) ∨ (∃s t. u = s @t t ∧ s @t [Tick]t :t [[P]]T ev ∧ t :t [[Q]]T ev))
lemma Seq_compo_domF:
{f. (∃t X. f = (t, X) ∧ (t, X ∪ {Tick}) :f [[P]]F ev ∧ notick t) ∨ (∃s t X. f = (s @t t, X) ∧ s @t [Tick]t :t [[P]]T ev ∧ (t, X) :f [[Q]]F ev)} ∈ domF
lemma Seq_compo_memF:
(f :f [[P ;; Q]]F ev) = ((∃t X. f = (t, X) ∧ (t, X ∪ {Tick}) :f [[P]]F ev ∧ notick t) ∨ (∃s t X. f = (s @t t, X) ∧ s @t [Tick]t :t [[P]]T ev ∧ (t, X) :f [[Q]]F ev))
lemmas Seq_compo_mem:
(u :t [[P ;; Q]]T ev) = ((∃s. u = rmtick s ∧ s :t [[P]]T ev) ∨ (∃s t. u = s @t t ∧ s @t [Tick]t :t [[P]]T ev ∧ t :t [[Q]]T ev))
(f :f [[P ;; Q]]F ev) = ((∃t X. f = (t, X) ∧ (t, X ∪ {Tick}) :f [[P]]F ev ∧ notick t) ∨ (∃s t X. f = (s @t t, X) ∧ s @t [Tick]t :t [[P]]T ev ∧ (t, X) :f [[Q]]F ev))
lemma Seq_compo_T2:
[| ([[P]]T ev, [[P]]F ev) ∈ domSF; ([[Q]]T ev, [[Q]]F ev) ∈ domSF |] ==> HC_T2 ([[P ;; Q]]T ev, [[P ;; Q]]F ev)
lemma Seq_compo_F3:
[| ([[P]]T ev, [[P]]F ev) ∈ domSF; ([[Q]]T ev, [[Q]]F ev) ∈ domSF |] ==> HC_F3 ([[P ;; Q]]T ev, [[P ;; Q]]F ev)
lemma Seq_compo_T3_F4:
[| ([[P]]T ev, [[P]]F ev) ∈ domSF; ([[Q]]T ev, [[Q]]F ev) ∈ domSF |] ==> HC_T3_F4 ([[P ;; Q]]T ev, [[P ;; Q]]F ev)
lemma Seq_compo_domSF:
[| ([[P]]T ev, [[P]]F ev) ∈ domSF; ([[Q]]T ev, [[Q]]F ev) ∈ domSF |] ==> ([[P ;; Q]]T ev, [[P ;; Q]]F ev) ∈ domSF
lemma Seq_compo_evalT_mono:
[| [[P1]]T ev1 ≤ [[P2]]T ev2; [[Q1]]T ev1 ≤ [[Q2]]T ev2 |] ==> [[P1 ;; Q1]]T ev1 ≤ [[P2 ;; Q2]]T ev2
lemma Seq_compo_evalF_mono:
[| [[P1]]T ev1 ≤ [[P2]]T ev2; [[P1]]F ev1 ≤ [[P2]]F ev2; [[Q1]]F ev1 ≤ [[Q2]]F ev2 |] ==> [[P1 ;; Q1]]F ev1 ≤ [[P2 ;; Q2]]F ev2