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\<open>Weak Safety: Co, Stable\<close>
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])
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 \<in> 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 \<in> (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\<open>"image" versions of the rules, for lifting "guarantees" properties\<close>
(*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
end
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet)
¤
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 ist noch experimentell.