(*-------------------------------------------* | CSP-Prover on Isabelle2004 | | November 2004 | | July 2005 (modified) | | | | CSP-Prover on Isabelle2005 | | October 2005 (modified) | | April 2006 (modified) | | | | Yoshinao Isobe (AIST JAPAN) | *-------------------------------------------*) theory Trace_seq = Prefix: (* The following simplification rules are deleted in this theory file *) (* because they unexpectly rewrite (notick | t = <>) *) (* *) (* disj_not1: (~ P | Q) = (P --> Q) *) declare disj_not1 [simp del] (***************************************************************** 1. 2. 3. 4. *****************************************************************) consts rmTick:: "'a trace => 'a trace" defs rmTick_def : "rmTick s == if noTick s then s else butlastt s" (*********************************************************** nil and Tick ***********************************************************) (*** noTick s --> rmTick s ***) lemma rmTick_nochange[simp]: "noTick s ==> rmTick s = s" by (simp add: rmTick_def) (*** rmTick <> ***) lemma rmTick_nil[simp]: "rmTick <> = <>" by (simp add: rmTick_def) (*** rmTick <Tick> ***) lemma rmTick_Tick[simp]: "rmTick <Tick> = <>" by (simp add: rmTick_def) (*** noTick rmTick s ***) lemma noTick_rmTick[simp]: "noTick (rmTick s)" apply (case_tac "noTick s") apply (simp_all add: rmTick_def) apply (simp add: noTick_butlast) done lemma noTick_rmTickE: "[| t = rmTick s ; noTick t ==> R |] ==> R" by (simp) (*********************************************************** appt ***********************************************************) (*-------------------------* | rmTick last | *-------------------------*) lemma rmTick_last_Tick[simp]: "noTick s ==> rmTick (s ^^ <Tick>) = s" by (simp add: rmTick_def) (*** noTick butlast ***) lemma rmTick_butlastt: "~ noTick s ==> rmTick s = butlastt s" by (simp add: rmTick_def) (*-------------------------* | rmTick distribution | *-------------------------*) lemma rmTick_appt_dist[simp]: "noTick s ==> rmTick (s ^^ t) = s ^^ (rmTick t)" apply (insert trace_last_nil_or_unnil) apply (drule_tac x="t" in spec, simp) apply (erule disjE, simp) apply (elim conjE exE, simp) apply (insert event_Tick_or_Ev) apply (drule_tac x="a" in spec) apply (erule disjE) (* Tick *) apply (simp add: appt_assoc_sym) apply (erule exE) (* Ev *) apply (simp add: appt_assoc_sym) done (*********************************************************** prefix ***********************************************************) (*** rmTick prefix ***) (* only if *) lemma rmTick_prefix_only_if: "prefix s (rmTick t) ==> (EX u. prefix u t & s = rmTick u)" apply (insert trace_last_nil_or_unnil) apply (drule_tac x="t" in spec, simp) apply (erule disjE, simp) apply (elim conjE exE, simp) apply (insert event_Tick_or_Ev) apply (drule_tac x="a" in spec) apply (erule disjE) (* Tick *) apply (rule_tac x="s" in exI) apply (simp add: prefix_noTick) apply (erule exE) (* Ev *) apply (simp) apply (erule disjE) (* same length *) apply (rule_tac x="sa ^^ <Ev aa>" in exI, simp) apply (rule_tac x="s" in exI) apply (simp add: prefix_noTick) done (* if *) lemma rmTick_prefix_if: "(EX u. prefix u t & s = rmTick u) ==> prefix s (rmTick t)" apply (elim conjE exE) apply (simp) apply (insert trace_last_nil_or_unnil) apply (drule_tac x="t" in spec, simp) apply (erule disjE, simp) apply (elim conjE exE) apply (simp) apply (erule disjE, simp) apply (case_tac "~ noTick u") apply (simp add: prefix_noTick) apply (insert event_Tick_or_Ev) apply (drule_tac x="a" in spec) apply (erule disjE) (* Tick *) apply (simp) apply (elim exE) (* Ev *) apply (simp) done (* iff *) lemma rmTick_prefix: "prefix s (rmTick t) = (EX u. prefix u t & s = rmTick u)" apply (rule iffI) apply (simp add: rmTick_prefix_only_if) apply (simp add: rmTick_prefix_if) done (*--------------* | reverse | *--------------*) lemma rmTick_prefix_rev: "prefix s t ==> prefix (rmTick s) t" apply (simp add: rmTick_def) apply (intro impI) apply (simp add: prefix_def) apply (rule_tac x="<Tick>" in exI) apply (simp add: noTick_butlast) apply (simp add: Tick_decompo) done lemma rmTick_prefix_rev_simp[simp]: "prefix (rmTick s) s" by (simp add: rmTick_prefix_rev) (****************** to add it again ******************) declare disj_not1 [simp] end
lemma rmTick_nochange:
noTick s ==> rmTick s = s
lemma rmTick_nil:
rmTick <> = <>
lemma rmTick_Tick:
rmTick <Tick> = <>
lemma noTick_rmTick:
noTick (rmTick s)
lemma noTick_rmTickE:
[| t = rmTick s; noTick t ==> R |] ==> R
lemma rmTick_last_Tick:
noTick s ==> rmTick (s ^^ <Tick>) = s
lemma rmTick_butlastt:
¬ noTick s ==> rmTick s = butlastt s
lemma rmTick_appt_dist:
noTick s ==> rmTick (s ^^ t) = s ^^ rmTick t
lemma rmTick_prefix_only_if:
prefix s (rmTick t) ==> ∃u. prefix u t ∧ s = rmTick u
lemma rmTick_prefix_if:
∃u. prefix u t ∧ s = rmTick u ==> prefix s (rmTick t)
lemma rmTick_prefix:
prefix s (rmTick t) = (∃u. prefix u t ∧ s = rmTick u)
lemma rmTick_prefix_rev:
prefix s t ==> prefix (rmTick s) t
lemma rmTick_prefix_rev_simp:
prefix (rmTick s) s