(*-------------------------------------------* | CSP-Prover | | November 2004 | | Yoshinao Isobe (AIST JAPAN) | *-------------------------------------------*) theory Trace_hide = Prefix: (* 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] (***************************************************************** 1. 2. 3. 4. *****************************************************************) consts hidex :: "'a set => (nat * 'a trace * 'a trace) set" inductive "hidex X" intros hidex_None: "(0, None, None) : hidex X" hidex_nil: "(0, []t, []t) : hidex X" hidex_Tick: "(Suc 0, [Tick]t, [Tick]t) : hidex X" hidex_in: "[| (n, s, t) : hidex X ; a : X ; s ~= None |] ==> (Suc n, [Ev a]t @t s, t) : hidex X" hidex_notin: "[| (n, s, t) : hidex X ; a ~: X ; s ~= None |] ==> (Suc n, [Ev a]t @t s, [Ev a]t @t t) : hidex X" consts hide_tr :: "'a trace => 'a set => 'a trace" ("_ --tr _" [84,85] 84) defs hide_tr_def : "s --tr X == THE t. (lengtht s, s, t) : hidex X" (************************************************************* hidex None *************************************************************) lemma hidex_None_None_only_if: "ALL X n s. (n, None, s) : hidex X --> (n = 0 & s = None)" apply (intro allI) apply (induct_tac n) apply (intro allI impI) apply (erule hidex.elims) apply (simp, simp, simp, simp, simp) apply (rule impI) apply (erule hidex.elims) by (simp_all) (*** iff ***) lemma hidex_None_None[simp]: "(n, None, s) : hidex X = (n = 0 & s = None)" apply (intro iffI) apply (simp add: hidex_None_None_only_if) by (simp add: hidex.intros) (************************************************************* hidex imples "not None" *************************************************************) lemma hidex_not_None_only_if_lm: "ALL X n s t. ((n, s, t) : hidex X & s ~= None) --> t ~= None" apply (rule allI) apply (rule allI) apply (induct_tac n) apply (intro allI impI) apply (erule conjE) apply (erule hidex.elims) apply (simp, simp, simp, simp, simp) (* step case *) apply (intro allI impI) apply (erule conjE) apply (erule hidex.elims) apply (erule rem_asmE, simp) apply (erule rem_asmE, simp) apply (erule rem_asmE, simp) apply (drule_tac x="sa" in spec) apply (drule_tac x="ta" in spec) apply (simp) apply (drule_tac x="sa" in spec) apply (drule_tac x="ta" in spec) apply (simp) done lemma hidex_not_None_only_if: "[| (n, s, t) : hidex X ; s ~= None |] ==> t ~= None" apply (insert hidex_not_None_only_if_lm) apply (drule_tac x="X" in spec) apply (drule_tac x="n" in spec) apply (drule_tac x="s" in spec) apply (drule_tac x="t" in spec) by (simp) (*** if ***) lemma hidex_not_None_if_lm: "ALL X n s t. ((n, s, t) : hidex X & t ~= None) --> s ~= None" apply (rule allI) apply (rule allI) apply (induct_tac n) apply (intro allI impI) apply (erule conjE) apply (erule hidex.elims) apply (simp, simp, simp, simp, simp) (* step case *) apply (intro allI impI) apply (erule conjE) apply (erule hidex.elims) apply (erule rem_asmE, simp) apply (erule rem_asmE, simp) apply (erule rem_asmE, simp) apply (drule_tac x="sa" in spec) apply (drule_tac x="ta" in spec) apply (simp) apply (drule_tac x="sa" in spec) apply (drule_tac x="ta" in spec) apply (simp) done lemma hidex_not_None_if: "[| (n, s, t) : hidex X ; t ~= None |] ==> s ~= None" apply (insert hidex_not_None_if_lm) apply (drule_tac x="X" in spec) apply (drule_tac x="n" in spec) apply (drule_tac x="s" in spec) apply (drule_tac x="t" in spec) by (simp) (*** thus ***) lemma hidex_None_or_not_lm: "ALL X n s t. (n, s, t) : hidex X --> (s = None & t = None) | (s ~= None & t ~= None)" apply (intro allI impI) apply (case_tac "s = None & t = None", simp) apply (simp) apply (rule disjI2) apply (erule disjE) apply (simp, rule hidex_not_None_only_if, simp, simp) apply (simp, rule hidex_not_None_if, simp, simp) done lemma hidex_None_or_not: "(n, s, t) : hidex X ==> (s = None & t = None) | (s ~= None & t ~= None)" by (simp add: hidex_None_or_not_lm) (************************************************************* THE hidex *************************************************************) (*** exists ***) lemma hidex_exists_not_None_lm: "ALL X s. (EX t. (lengtht s, s, t) : hidex X)" apply (rule allI) apply (rule allI) apply (induct_tac s rule: induct_trace) apply (simp add: hidex.intros) apply (simp_all) apply (rule_tac x="[]t" in exI, simp add: hidex.intros) apply (rule_tac x="[Tick]t" in exI, simp add: hidex.intros) apply (elim exE) apply (case_tac "a : X") apply (rule_tac x="t" in exI, simp add: hidex.intros) apply (rule_tac x="[Ev a]t @t t" in exI, simp add: hidex.intros) done (*** exists !! ***) lemma hidex_exists: "EX t. (lengtht s, s, t) : hidex X" by (simp add: hidex_exists_not_None_lm) (*** unique ***) lemma hidex_unique_lm: "ALL X s t u. ((lengtht s, s, t) : hidex X & (lengtht s, s, u) : hidex X) --> t = u" apply (rule allI) apply (rule allI) apply (induct_tac s rule: induct_trace) apply (simp_all) (* []t *) apply (intro allI impI) apply (erule conjE) apply (erule hidex.elims, simp_all) apply (erule hidex.elims, simp_all) (* [Tick]t *) apply (intro allI impI) apply (erule conjE) apply (erule hidex.elims, simp_all) apply (erule hidex.elims, simp_all) (* step *) apply (intro allI impI) apply (erule conjE) apply (case_tac "a : X") apply (erule hidex.elims, simp_all) apply (erule hidex.elims, simp_all) apply (drule_tac x="t" in spec) apply (drule_tac x="u" in spec) apply (elim conjE, simp) apply (erule hidex.elims, simp_all) apply (erule hidex.elims, simp_all) apply (drule_tac x="ta" in spec) apply (drule_tac x="tb" in spec) apply (elim conjE, simp) done lemma hidex_unique: "[| (lengtht s, s, t) : hidex X ; (lengtht s, s, u) : hidex X |] ==> t = u" apply (insert hidex_unique_lm) apply (drule_tac x="X" in spec) apply (drule_tac x="s" in spec) apply (drule_tac x="t" in spec) apply (drule_tac x="u" in spec) apply (simp) done (************************************************************* THE hidex *************************************************************) lemma hidex_to_hide_tr : "(lengtht s, s, t) : hidex X = (t = s --tr X)" apply (simp add: hide_tr_def) apply (rule iffI) apply (rule sym) apply (rule the_equality) apply (simp) apply (simp add: hidex_unique) apply (simp) apply (insert hidex_exists[of s X]) apply (erule exE) apply (rule theI[of "(%x. (lengtht s, s, x) : hidex X)"]) apply (simp) apply (simp add: hidex_unique) done lemma hide_tr_to_hidex : "(s --tr X = t) = ((lengtht s, s, t) : hidex X)" apply (simp add: hidex_to_hide_tr) by (fast) lemma hide_tr_to_hidex_sym : "(t = s --tr X) = ((lengtht s, s, t) : hidex X)" by (simp add: hidex_to_hide_tr) lemmas hide_tr_iff = hide_tr_to_hidex hide_tr_to_hidex_sym (************************************************************* hide_tr *************************************************************) (*------------------* | intros | *------------------*) lemma hide_tr_None[simp] : "None --tr X = None" by (simp add: hide_tr_to_hidex) lemma hide_tr_nil[simp] : "[]t --tr X = []t" apply (simp add: hide_tr_to_hidex) by (simp add: hidex.intros) lemma hide_tr_Tick[simp] : "[Tick]t --tr X = [Tick]t" apply (simp add: hide_tr_to_hidex) by (simp add: hidex.intros) lemma hide_tr_in_lm : "[| a : X ; t = s --tr X |] ==> ([Ev a]t @t s) --tr X = t" apply (simp add: hide_tr_to_hidex_sym) apply (case_tac "s ~= None") apply (simp add: hide_tr_to_hidex) apply (simp add: hidex.intros) apply (simp add: hide_tr_to_hidex) done lemma hide_tr_in[simp] : "a : X ==> ([Ev a]t @t s) --tr X = s --tr X" by (simp add: hide_tr_in_lm) lemma hide_tr_in_one[simp] : "a : X ==> [Ev a]t --tr X = []t" apply (insert hide_tr_in[of a X "[]t"]) by (simp) lemma hide_tr_notin_lm : "[| a ~: X ; t = s --tr X |] ==> ([Ev a]t @t s) --tr X = [Ev a]t @t t" apply (simp add: hide_tr_to_hidex_sym) apply (case_tac "s ~= None") apply (simp add: hide_tr_to_hidex) apply (simp add: hidex.intros) apply (simp add: hide_tr_to_hidex) done lemma hide_tr_notin_appt[simp] : "a ~: X ==> ([Ev a]t @t s) --tr X = [Ev a]t @t (s --tr X)" by (simp add: hide_tr_notin_lm) lemma hide_tr_notin[simp] : "a ~: X ==> [Ev a]t --tr X = [Ev a]t" apply (insert hide_tr_notin_appt[of a X "[]t"]) by (simp) (*------------------* | elims | *------------------*) lemma hide_tr_elims_lm: "[| s --tr X = t ; (( s = None & t = None ) --> P) ; (( s = []t & t = []t ) --> P) ; (( s = [Tick]t & t = [Tick]t ) --> P) ; ( ALL a s'. ((s = [Ev a]t @t s' & s' --tr X = t & a : X & s' ~= None ) --> P)) ; ( ALL a s' t'. ((s = [Ev a]t @t s' & t = [Ev a]t @t t' & s' --tr X = t' & a ~: X & s' ~= None ) --> P)) |] ==> P" apply (simp add: hide_tr_iff) apply (erule hidex.elims) apply (simp_all) apply (elim conjE, simp) apply (elim conjE, simp) apply (drule mp) apply (rule_tac x="ta" in exI, simp, simp) done lemma hide_tr_elims: "[| s --tr X = t; [| s = None ; t = None |] ==> P; [| s = []t ; t = []t |] ==> P; [| s = [Tick]t ; t = [Tick]t |] ==> P; !!a s'. [| s = [Ev a]t @t s' ; s' --tr X = t; a : X; s' ~= None |] ==> P; !!a s' t'. [| s = [Ev a]t @t s' ; t = [Ev a]t @t t' ; s' --tr X = t' ; a ~: X; s' ~= None |] ==> P |] ==> P" apply (rule hide_tr_elims_lm[of s X t]) apply (simp_all) by (force)+ (*------------------* | not None | *------------------*) lemma hide_tr_not_None_only_if: "s --tr X ~= None ==> s ~= None" apply (simp add: hide_tr_iff) apply (erule contrapos_nn) by (simp) lemma hide_tr_not_None_if: "s ~= None ==> s --tr X ~= None" apply (simp add: hide_tr_iff) apply (erule contrapos_nn) apply (insert hidex_None_or_not[of "lengtht s" s "None" X]) by (simp) lemma hide_tr_not_None[simp]: "(s --tr X ~= None) = (s ~= None)" apply (rule iffI) apply (rule hide_tr_not_None_only_if, simp) by (simp add: hide_tr_not_None_if) (*----------* | None | *----------*) lemma hide_tr_None_None[simp]: "(s --tr X = None) = (s = None)" apply (rule iffI) apply (erule contrapos_pp, simp) apply (erule contrapos_pp, simp) done lemma hide_tr_None_None_sym[simp]: "(None = s --tr X) = (s = None)" apply (insert hide_tr_None_None[of s X]) by (auto simp del: hide_tr_None_None) (************************************************************* a new event is not introduced by HIDE (trace) *************************************************************) lemma hide_tr_in_event[simp]: "e : sett (s --tr X) = (e ~: Ev ` X & e : sett s)" apply (induct_tac s rule: induct_trace) apply (simp) apply (simp) apply (simp, force) apply (simp) apply (case_tac "a : X") apply (simp) apply (rule iffI, simp, force) apply (simp add: hide_tr_not_None_if) apply (rule iffI, force, force) done (*** notick ***) lemma hide_tr_notick[simp]: "notick (s --tr X) = notick s" apply (simp add: notick_def) apply (rule iffI) apply (force) apply (simp) done (************************************************************* appended traces in hide *************************************************************) lemma hide_tr_appt_notick_lm: "ALL X s e t. notick s --> ((s @t t) --tr X = (s --tr X) @t (t --tr X))" apply (rule allI) apply (rule allI) apply (induct_tac s rule: induct_trace) apply (simp_all) apply (intro allI impI, simp) apply (case_tac "a : X") by (simp_all) (*** simp ***) lemma hide_tr_appt[simp]: "s @t t ~= None ==> (s @t t) --tr X = (s --tr X) @t (t --tr X)" apply (simp add: decompo_appt_not_None) apply (elim conjE) apply (erule disjE) apply (simp add: hide_tr_appt_notick_lm) by (simp) (************************************************************* decompose traces in hide *************************************************************) lemma hide_tr_decompo_lm: "ALL X u s t. (u ~= None & u --tr X = s @t t) --> (EX s' t'. u = s' @t t' & s = s' --tr X & t = t' --tr X) " apply (rule allI) apply (rule allI) apply (induct_tac u rule: induct_trace) apply (simp) apply (simp) apply (intro allI impI) apply (simp) apply (erule disjE) apply (rule_tac x="[Tick]t" in exI) apply (rule_tac x="[]t" in exI) apply (simp) apply (rule_tac x="[]t" in exI) apply (rule_tac x="[Tick]t" in exI) apply (simp) apply (intro allI impI) apply (erule conjE) apply (erule hide_tr_elims) apply (simp_all) (* a : X *) apply (drule_tac x="sa" in spec) apply (drule_tac x="t" in spec) apply (simp) apply (elim conjE exE) apply (simp) apply (rule_tac x="[Ev aa]t @t s'a" in exI) apply (rule_tac x="t'" in exI) apply (simp) (* a ~: X *) apply (case_tac "sa = None", simp add: hide_tr_not_None_if) apply (case_tac "t' = None", simp add: hide_tr_not_None_if) apply (insert trace_nil_or_Tick_or_Ev) apply (rotate_tac -1) apply (drule_tac x="sa" in spec, simp) (* []t *) apply (erule disjE) apply (rule_tac x="[]t" in exI, simp) (* [Tick]t *) apply (erule disjE) apply (simp) (* [Ev a]t @t ... *) apply (elim exE) apply (simp) apply (drule_tac x="sb" in spec) apply (drule_tac x="t" in spec) apply (simp) apply (elim conjE exE) apply (rule_tac x="[Ev aa]t @t s'a" in exI) apply (rule_tac x="t'a" in exI) apply (simp) done (*** simp ***) lemma hide_tr_decompo: "[| u ~= None ; u --tr X = s @t t |] ==> (EX s' t'. u = s' @t t' & s = s' --tr X & t = t' --tr X) " by (simp add: hide_tr_decompo_lm) (************************************************************* hide trace prefix_closed *************************************************************) lemma hide_tr_prefix_only_if_lm: "ALL X s u. (s ~= None & prefix u (s --tr X)) --> (EX t. u = t --tr X & prefix t s)" apply (rule allI) apply (rule allI) apply (induct_tac s rule: induct_trace) apply (simp_all) (* Tick *) apply (force) (* [Ev a]t @t ... *) apply (intro allI impI) apply (case_tac "a : X") apply (drule_tac x="u" in spec, simp) apply (elim conjE exE) apply (rule_tac x="[Ev a]t @t t" in exI, simp) apply (rule_tac x="t" in exI, simp) (* a ~: X *) apply (simp) (* u = []t *) apply (erule disjE) apply (rule_tac x="[]t" in exI, simp) (* u = [Ev a]t @t ... *) apply (elim conjE exE) apply (drule_tac x="v'" in spec, simp) apply (elim conjE exE) apply (rule_tac x="[Ev a]t @t t" in exI, simp) apply (rule_tac x="t" in exI, simp) done lemma hide_tr_prefix_only_if: "[| s ~= None ; prefix u (s --tr X) |] ==> (EX t. u = t --tr X & prefix t s)" by (simp add: hide_tr_prefix_only_if_lm) (*** if ***) lemma hide_tr_prefix_if: "[| s ~= None ; prefix t s |] ==> prefix (t --tr X) (s --tr X)" apply (simp add: prefix_def) apply (erule exE) apply (simp) apply (rule_tac x="u --tr X" in exI) by (simp) lemma hide_tr_prefix: "s ~= None ==> prefix u (s --tr X) = (EX t. u = t --tr X & prefix t s)" apply (rule iffI) apply (simp add: hide_tr_prefix_only_if) apply (erule exE) by (simp add: hide_tr_prefix_if) (************************************************************* hide + alpha lemma *************************************************************) (* rev []t *) (* only if *) lemma hide_tr_nilt_sett_only_if_lm: "ALL s. (s ~= None & s --tr X = []t) --> (sett s <= Ev ` X)" apply (rule allI) apply (induct_tac s rule: induct_trace) apply (simp_all) apply (intro allI impI) apply (elim conjE exE) apply (case_tac "a : X") by (simp_all) lemma hide_tr_nilt_sett_only_if: "[| s ~= None ; s --tr X = []t |] ==> (sett s <= Ev ` X)" by (simp add: hide_tr_nilt_sett_only_if_lm) (* if *) lemma hide_tr_nilt_sett_if_lm: "ALL s. (s ~= None & sett s <= Ev ` X) --> s --tr X = []t" apply (rule allI) apply (induct_tac s rule: induct_trace) apply (simp_all) apply (force) apply (intro allI impI) apply (elim conjE) apply (simp) apply (case_tac "a : X") by (auto) lemma hide_tr_nilt_sett_if: "[| s ~= None ; sett s <= Ev ` X |] ==> s --tr X = []t" by (simp add: hide_tr_nilt_sett_if_lm) (* iff *) lemma hide_tr_nilt_sett: "s ~= None ==> (s --tr X = []t) = (sett s <= Ev ` X)" apply (rule iffI) apply (simp add: hide_tr_nilt_sett_only_if) apply (simp add: hide_tr_nilt_sett_if) done (* rev [Tick]t *) (* only if *) lemma hide_tr_Tick_sett_only_if_lm: "ALL s. (s ~= None & s --tr X = [Tick]t) --> (EX s'. s = s' @t [Tick]t & sett s' <= Ev ` X)" apply (rule allI) apply (induct_tac s rule: rev_induct_trace) apply (simp_all) apply (intro allI impI) apply (elim conjE exE) apply (simp add: not_None) apply (erule disjE) apply (simp) apply (elim conjE exE, simp) apply (simp) apply (rule conjI) apply (insert event_tick_or_Ev) apply (drule_tac x="e" in spec) apply (erule disjE, simp) apply (erule exE) apply (case_tac "a : X") apply (simp_all add: not_None hide_tr_nilt_sett) done lemma hide_tr_Tick_sett_only_if: "[| s ~= None ; s --tr X = [Tick]t |] ==> (EX s'. s = s' @t [Tick]t & sett s' <= Ev ` X)" by (simp add: hide_tr_Tick_sett_only_if_lm) (* if *) lemma hide_tr_Tick_sett_if: "[| s @t [Tick]t ~= None ; sett s <= Ev ` X |] ==> s --tr X = []t" apply (case_tac "s = None", simp) by (simp add: not_None hide_tr_nilt_sett) (* iff *) lemma hide_tr_Tick_sett: "s ~= None ==> (s --tr X = [Tick]t) = (EX s'. s = s' @t [Tick]t & sett s' <= Ev ` X)" apply (rule iffI) apply (simp add: hide_tr_Tick_sett_only_if) apply (elim conjE exE) apply (simp add: hide_tr_Tick_sett_if) done (****************** to add it again ******************) declare disj_not1 [simp] declare not_None_eq [simp] end
lemma hidex_None_None_only_if:
∀X n s. (n, None, s) ∈ hidex X --> n = 0 ∧ s = None
lemma hidex_None_None:
((n, None, s) ∈ hidex X) = (n = 0 ∧ s = None)
lemma hidex_not_None_only_if_lm:
∀X n s t. (n, s, t) ∈ hidex X ∧ s ≠ None --> t ≠ None
lemma hidex_not_None_only_if:
[| (n, s, t) ∈ hidex X; s ≠ None |] ==> t ≠ None
lemma hidex_not_None_if_lm:
∀X n s t. (n, s, t) ∈ hidex X ∧ t ≠ None --> s ≠ None
lemma hidex_not_None_if:
[| (n, s, t) ∈ hidex X; t ≠ None |] ==> s ≠ None
lemma hidex_None_or_not_lm:
∀X n s t. (n, s, t) ∈ hidex X --> s = None ∧ t = None ∨ s ≠ None ∧ t ≠ None
lemma hidex_None_or_not:
(n, s, t) ∈ hidex X ==> s = None ∧ t = None ∨ s ≠ None ∧ t ≠ None
lemma hidex_exists_not_None_lm:
∀X s. ∃t. (lengtht s, s, t) ∈ hidex X
lemma hidex_exists:
∃t. (lengtht s, s, t) ∈ hidex X
lemma hidex_unique_lm:
∀X s t u. (lengtht s, s, t) ∈ hidex X ∧ (lengtht s, s, u) ∈ hidex X --> t = u
lemma hidex_unique:
[| (lengtht s, s, t) ∈ hidex X; (lengtht s, s, u) ∈ hidex X |] ==> t = u
lemma hidex_to_hide_tr:
((lengtht s, s, t) ∈ hidex X) = (t = s --tr X)
lemma hide_tr_to_hidex:
(s --tr X = t) = ((lengtht s, s, t) ∈ hidex X)
lemma hide_tr_to_hidex_sym:
(t = s --tr X) = ((lengtht s, s, t) ∈ hidex X)
lemmas hide_tr_iff:
(s --tr X = t) = ((lengtht s, s, t) ∈ hidex X)
(t = s --tr X) = ((lengtht s, s, t) ∈ hidex X)
lemma hide_tr_None:
None --tr X = None
lemma hide_tr_nil:
[]t --tr X = []t
lemma hide_tr_Tick:
[Tick]t --tr X = [Tick]t
lemma hide_tr_in_lm:
[| a ∈ X; t = s --tr X |] ==> ([Ev a]t @t s) --tr X = t
lemma hide_tr_in:
a ∈ X ==> ([Ev a]t @t s) --tr X = s --tr X
lemma hide_tr_in_one:
a ∈ X ==> [Ev a]t --tr X = []t
lemma hide_tr_notin_lm:
[| a ∉ X; t = s --tr X |] ==> ([Ev a]t @t s) --tr X = [Ev a]t @t t
lemma hide_tr_notin_appt:
a ∉ X ==> ([Ev a]t @t s) --tr X = [Ev a]t @t s --tr X
lemma hide_tr_notin:
a ∉ X ==> [Ev a]t --tr X = [Ev a]t
lemma hide_tr_elims_lm:
[| s --tr X = t; s = None ∧ t = None --> P; s = []t ∧ t = []t --> P; s = [Tick]t ∧ t = [Tick]t --> P; ∀a s'. s = [Ev a]t @t s' ∧ s' --tr X = t ∧ a ∈ X ∧ s' ≠ None --> P; ∀a s' t'. s = [Ev a]t @t s' ∧ t = [Ev a]t @t t' ∧ s' --tr X = t' ∧ a ∉ X ∧ s' ≠ None --> P |] ==> P
lemma hide_tr_elims:
[| s --tr X = t; [| s = None; t = None |] ==> P; [| s = []t; t = []t |] ==> P; [| s = [Tick]t; t = [Tick]t |] ==> P; !!a s'. [| s = [Ev a]t @t s'; s' --tr X = t; a ∈ X; s' ≠ None |] ==> P; !!a s' t'. [| s = [Ev a]t @t s'; t = [Ev a]t @t t'; s' --tr X = t'; a ∉ X; s' ≠ None |] ==> P |] ==> P
lemma hide_tr_not_None_only_if:
s --tr X ≠ None ==> s ≠ None
lemma hide_tr_not_None_if:
s ≠ None ==> s --tr X ≠ None
lemma hide_tr_not_None:
(s --tr X ≠ None) = (s ≠ None)
lemma hide_tr_None_None:
(s --tr X = None) = (s = None)
lemma hide_tr_None_None_sym:
(None = s --tr X) = (s = None)
lemma hide_tr_in_event:
(e ∈ sett (s --tr X)) = (e ∉ Ev ` X ∧ e ∈ sett s)
lemma hide_tr_notick:
notick (s --tr X) = notick s
lemma hide_tr_appt_notick_lm:
∀X s e t. notick s --> (s @t t) --tr X = s --tr X @t t --tr X
lemma hide_tr_appt:
s @t t ≠ None ==> (s @t t) --tr X = s --tr X @t t --tr X
lemma hide_tr_decompo_lm:
∀X u s t. u ≠ None ∧ u --tr X = s @t t --> (∃s' t'. u = s' @t t' ∧ s = s' --tr X ∧ t = t' --tr X)
lemma hide_tr_decompo:
[| u ≠ None; u --tr X = s @t t |] ==> ∃s' t'. u = s' @t t' ∧ s = s' --tr X ∧ t = t' --tr X
lemma hide_tr_prefix_only_if_lm:
∀X s u. s ≠ None ∧ prefix u (s --tr X) --> (∃t. u = t --tr X ∧ prefix t s)
lemma hide_tr_prefix_only_if:
[| s ≠ None; prefix u (s --tr X) |] ==> ∃t. u = t --tr X ∧ prefix t s
lemma hide_tr_prefix_if:
[| s ≠ None; prefix t s |] ==> prefix (t --tr X) (s --tr X)
lemma hide_tr_prefix:
s ≠ None ==> prefix u (s --tr X) = (∃t. u = t --tr X ∧ prefix t s)
lemma hide_tr_nilt_sett_only_if_lm:
∀s. s ≠ None ∧ s --tr X = []t --> sett s ⊆ Ev ` X
lemma hide_tr_nilt_sett_only_if:
[| s ≠ None; s --tr X = []t |] ==> sett s ⊆ Ev ` X
lemma hide_tr_nilt_sett_if_lm:
∀s. s ≠ None ∧ sett s ⊆ Ev ` X --> s --tr X = []t
lemma hide_tr_nilt_sett_if:
[| s ≠ None; sett s ⊆ Ev ` X |] ==> s --tr X = []t
lemma hide_tr_nilt_sett:
s ≠ None ==> (s --tr X = []t) = (sett s ⊆ Ev ` X)
lemma hide_tr_Tick_sett_only_if_lm:
∀s. s ≠ None ∧ s --tr X = [Tick]t --> (∃s'. s = s' @t [Tick]t ∧ sett s' ⊆ Ev ` X)
lemma hide_tr_Tick_sett_only_if:
[| s ≠ None; s --tr X = [Tick]t |] ==> ∃s'. s = s' @t [Tick]t ∧ sett s' ⊆ Ev ` X
lemma hide_tr_Tick_sett_if:
[| s @t [Tick]t ≠ None; sett s ⊆ Ev ` X |] ==> s --tr X = []t
lemma hide_tr_Tick_sett:
s ≠ None ==> (s --tr X = [Tick]t) = (∃s'. s = s' @t [Tick]t ∧ sett s' ⊆ Ev ` X)