lemma bij_rename_iff [simp]: "bij (rename h) = bij h" by (blast intro: bij_rename bij_rename_imp_bij)
subsection‹the lattice operations›
lemma rename_SKIP [simp]: "bij h ==> rename h SKIP = SKIP" by (simp add: rename_def Extend.extend_SKIP)
lemma rename_Join [simp]: "bij h ==> rename h (F \ G) = rename h F \ rename h G" by (simp add: rename_def Extend.extend_Join)
lemma rename_JN [simp]: "bij h ==> rename h (JOIN I F) = (\i \ I. rename h (F i))" by (simp add: rename_def Extend.extend_JN)
subsection‹Strong Safety: co, stable›
lemma rename_constrains: "bij h ==> (rename h F \ (h`A) co (h`B)) = (F \ A co B)" apply (unfold rename_def) apply (subst extend_set_eq_image [symmetric])+ apply (erule good_map_bij [THEN Extend.intro, THEN Extend.extend_constrains]) done
lemma rename_stable: "bij h ==> (rename h F \ stable (h`A)) = (F \ stable A)" apply (simp add: stable_def rename_constrains) done
lemma rename_invariant: "bij h ==> (rename h F \ invariant (h`A)) = (F \ invariant A)" apply (simp add: invariant_def rename_stable bij_is_inj [THEN inj_image_subset_iff]) done
lemma rename_increasing: "bij h ==> (rename h F \ increasing func) = (F \ increasing (func o h))" apply (simp add: increasing_def rename_stable [symmetric] bij_image_Collect_eq bij_is_surj [THEN surj_f_inv_f]) done
subsection‹Weak Safety: Co, Stable›
lemma reachable_rename_eq: "bij h ==> reachable (rename h F) = h ` (reachable F)" apply (simp add: rename_def Extend.reachable_extend_eq) done
lemma rename_Constrains: "bij h ==> (rename h F \ (h`A) Co (h`B)) = (F \ A Co B)" by (simp add: Constrains_def reachable_rename_eq rename_constrains
bij_is_inj image_Int [symmetric])
lemma rename_Stable: "bij h ==> (rename h F \ Stable (h`A)) = (F \ Stable A)" by (simp add: Stable_def rename_Constrains)
lemma rename_Always: "bij h ==> (rename h F \ Always (h`A)) = (F \ Always A)" by (simp add: Always_def rename_Stable bij_is_inj [THEN inj_image_subset_iff])
lemma rename_Increasing: "bij h ==> (rename h F \ Increasing func) = (F \ Increasing (func o h))" by (simp add: Increasing_def rename_Stable [symmetric] bij_image_Collect_eq
bij_is_surj [THEN surj_f_inv_f])
subsection‹Progress: transient, ensures›
lemma rename_transient: "bij h ==> (rename h F \ transient (h`A)) = (F \ transient A)" apply (unfold rename_def) apply (subst extend_set_eq_image [symmetric]) apply (erule good_map_bij [THEN Extend.intro, THEN Extend.extend_transient]) done
lemma rename_ensures: "bij h ==> (rename h F \ (h`A) ensures (h`B)) = (F \ A ensures B)" apply (unfold rename_def) apply (subst extend_set_eq_image [symmetric])+ apply (erule good_map_bij [THEN Extend.intro, THEN Extend.extend_ensures]) done
lemma rename_leadsTo: "bij h ==> (rename h F \ (h`A) leadsTo (h`B)) = (F \ A leadsTo B)" apply (unfold rename_def) apply (subst extend_set_eq_image [symmetric])+ apply (erule good_map_bij [THEN Extend.intro, THEN Extend.extend_leadsTo]) done
lemma rename_LeadsTo: "bij h ==> (rename h F \ (h`A) LeadsTo (h`B)) = (F \ A LeadsTo B)" apply (unfold rename_def) apply (subst extend_set_eq_image [symmetric])+ apply (erule good_map_bij [THEN Extend.intro, THEN Extend.extend_LeadsTo]) done
lemma rename_rename_guarantees_eq: "bij h ==> (rename h F \ (rename h ` X) guarantees
(rename h ` Y)) =
(F ∈ X guarantees Y)" apply (unfold rename_def) apply (subst good_map_bij [THEN Extend.intro, THEN Extend.extend_guarantees_eq [symmetric]], assumption) apply (simp (no_asm_simp) add: fst_o_inv_eq_inv o_def) done
lemma rename_guarantees_eq_rename_inv: "bij h ==> (rename h F \ X guarantees Y) =
(F ∈ (rename (inv h) ` X) guarantees
(rename (inv h) ` Y))" apply (subst rename_rename_guarantees_eq [symmetric], assumption) apply (simp add: o_def bij_is_surj [THEN surj_f_inv_f] image_comp) done
lemma rename_preserves: "bij h ==> (rename h G \ preserves v) = (G \ preserves (v o h))" apply (subst good_map_bij [THEN Extend.intro, THEN Extend.extend_preserves [symmetric]], assumption) apply (simp add: o_def fst_o_inv_eq_inv rename_def bij_is_surj [THEN surj_f_inv_f]) done
lemma ok_rename_iff [simp]: "bij h ==> (rename h F ok rename h G) = (F ok G)" by (simp add: Extend.ok_extend_iff rename_def)
lemma OK_rename_iff [simp]: "bij h ==> OK I (%i. rename h (F i)) = (OK I F)" by (simp add: Extend.OK_extend_iff rename_def)
subsection‹"image" versions of the rules, for lifting "guarantees" properties›
(*All the proofs are similar. Better would have been to prove one meta-theorem, but how can we handle the polymorphism? E.g. in
rename_constrains the two appearances of "co" have different types!*) lemmas bij_eq_rename = surj_rename [THEN surj_f_inv_f, symmetric]
lemma rename_image_constrains: "bij h ==> rename h ` (A co B) = (h ` A) co (h`B)" apply auto defer 1 apply (rename_tac F) apply (subgoal_tac "\G. F = rename h G") apply (auto intro!: bij_eq_rename simp add: rename_constrains) done
lemma rename_image_stable: "bij h ==> rename h ` stable A = stable (h ` A)" apply auto defer 1 apply (rename_tac F) apply (subgoal_tac "\G. F = rename h G") apply (auto intro!: bij_eq_rename simp add: rename_stable) done
lemma rename_image_increasing: "bij h ==> rename h ` increasing func = increasing (func o inv h)" apply auto defer 1 apply (rename_tac F) apply (subgoal_tac "\G. F = rename h G") apply (auto intro!: bij_eq_rename simp add: rename_increasing o_def bij_is_inj) done
lemma rename_image_invariant: "bij h ==> rename h ` invariant A = invariant (h ` A)" apply auto defer 1 apply (rename_tac F) apply (subgoal_tac "\G. F = rename h G") apply (auto intro!: bij_eq_rename simp add: rename_invariant) done
lemma rename_image_Constrains: "bij h ==> rename h ` (A Co B) = (h ` A) Co (h`B)" apply auto defer 1 apply (rename_tac F) apply (subgoal_tac "\G. F = rename h G") apply (auto intro!: bij_eq_rename simp add: rename_Constrains) done
lemma rename_image_preserves: "bij h ==> rename h ` preserves v = preserves (v o inv h)" by (simp add: o_def rename_image_stable preserves_def bij_image_INT
bij_image_Collect_eq)
lemma rename_image_Stable: "bij h ==> rename h ` Stable A = Stable (h ` A)" apply auto defer 1 apply (rename_tac F) apply (subgoal_tac "\G. F = rename h G") apply (auto intro!: bij_eq_rename simp add: rename_Stable) done
lemma rename_image_Increasing: "bij h ==> rename h ` Increasing func = Increasing (func o inv h)" apply auto defer 1 apply (rename_tac F) apply (subgoal_tac "\G. F = rename h G") apply (auto intro!: bij_eq_rename simp add: rename_Increasing o_def bij_is_inj) done
lemma rename_image_Always: "bij h ==> rename h ` Always A = Always (h ` A)" apply auto defer 1 apply (rename_tac F) apply (subgoal_tac "\G. F = rename h G") apply (auto intro!: bij_eq_rename simp add: rename_Always) done
lemma rename_image_leadsTo: "bij h ==> rename h ` (A leadsTo B) = (h ` A) leadsTo (h`B)" apply auto defer 1 apply (rename_tac F) apply (subgoal_tac "\G. F = rename h G") apply (auto intro!: bij_eq_rename simp add: rename_leadsTo) done
lemma rename_image_LeadsTo: "bij h ==> rename h ` (A LeadsTo B) = (h ` A) LeadsTo (h`B)" apply auto defer 1 apply (rename_tac F) apply (subgoal_tac "\G. F = rename h G") apply (auto intro!: bij_eq_rename simp add: rename_LeadsTo) done
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.