(* 2-place monotone operation \<in> this general result is used to prove Follows_Un, Follows_munion *)
(* 2-place monotone operation \<in> this general result is
used to prove Follows_Un, Follows_munion *) lemma imp_Follows_comp2: "[F ∈ Follows(A, r, f1, f); F ∈ Follows(B, s, g1, g); mono2(A, r, B, s, C, t, h); refl(A,r); refl(B, s); trans[C](t)] ==> F ∈ Follows(C, t, λx. h(f1(x), g1(x)), λx. h(f(x), g(x)))" apply (unfold Follows_def, clarify) apply (frule_tac f = g in IncreasingD) apply (frule_tac f = f in IncreasingD) apply (rule IntI, safe) apply (rule_tac [3] h = h in imp_Always_comp2) prefer5apply assumption apply (rule_tac [2] h = h in imp_Increasing_comp2) prefer4apply assumption apply (rule_tac h = h in imp_Increasing_comp2) prefer3apply assumption apply simp_all apply (blast dest!: IncreasingD) apply (rule_tac h = h in imp_LeadsTo_comp2) prefer4apply assumption apply auto prefer3apply (simp add: mono2_def) apply (blast dest: IncreasingD)+ done
lemma Follows_trans: "[F ∈ Follows(A, r, f, g); F ∈ Follows(A,r, g, h); trans[A](r)]==> F ∈ Follows(A, r, f, h)" apply (frule_tac f = f in FollowsD) apply (frule_tac f = g in FollowsD) apply (simp add: Follows_def) apply (simp add: Always_eq_includes_reachable INT_iff, auto) apply (rule_tac [2] B = "{s ∈ state. <k, g (s) > ∈ r}"in LeadsTo_Trans) apply (rule_tac b = "g (x) "in trans_onD) apply blast+ done
(** Destruction rules for Follows **)
lemma Follows_imp_Increasing_left: "F ∈ Follows(A, r, f,g) ==> F ∈ Increasing(A, r, f)" by (unfold Follows_def, blast)
lemma Follows_imp_Increasing_right: "F ∈ Follows(A, r, f,g) ==> F ∈ Increasing(A, r, g)" by (unfold Follows_def, blast)
lemma Follows_imp_Always: "F :Follows(A, r, f, g) ==> F ∈ Always({s ∈ state. <f(s),g(s)> ∈ r})" by (unfold Follows_def, blast)
lemma Follows_imp_LeadsTo: "[F ∈ Follows(A, r, f, g); k ∈ A]==> F: {s ∈ state. <k,g(s)> ∈ r } ⟼w {s ∈ state. <k,f(s)> ∈ r}" by (unfold Follows_def, blast)
lemma Follows_LeadsTo_pfixLe: "[F ∈ Follows(list(nat), gen_prefix(nat, Le), f, g); k ∈ list(nat)] ==> F ∈ {s ∈ state. k pfixLe g(s)} ⟼w {s ∈ state. k pfixLe f(s)}" by (blast intro: Follows_imp_LeadsTo)
lemma Follows_LeadsTo_pfixGe: "[F ∈ Follows(list(nat), gen_prefix(nat, Ge), f, g); k ∈ list(nat)] ==> F ∈ {s ∈ state. k pfixGe g(s)} ⟼w {s ∈ state. k pfixGe f(s)}" by (blast intro: Follows_imp_LeadsTo)
lemma Always_Follows1: "[F ∈ Always({s ∈ state. f(s) = g(s)}); F ∈ Follows(A, r, f, h); ∀x ∈ state. g(x):A]==> F ∈ Follows(A, r, g, h)" unfolding Follows_def Increasing_def Stable_def apply (simp add: INT_iff, auto) apply (rule_tac [3] C = "{s ∈ state. f(s)=g(s)}" and A = "{s ∈ state. <k, h (s)> ∈ r}" and A' = "{s ∈ state. <k, f(s)> ∈ r}"in Always_LeadsTo_weaken) apply (erule_tac A = "{s ∈ state. <k,f(s) > ∈ r}" and A' = "{s ∈ state. <k,f(s) > ∈ r}"in Always_Constrains_weaken) apply auto apply (drule Always_Int_I, assumption) apply (erule_tac A = "{s ∈ state. f(s)=g(s)} ∩ {s ∈ state. <f(s), h(s)> ∈ r}" in Always_weaken) apply auto done
lemma Always_Follows2: "[F ∈ Always({s ∈ state. g(s) = h(s)}); F ∈ Follows(A, r, f, g); ∀x ∈ state. h(x):A]==> F ∈ Follows(A, r, f, h)" unfolding Follows_def Increasing_def Stable_def apply (simp add: INT_iff, auto) apply (rule_tac [3] C = "{s ∈ state. g (s) =h (s) }" and A = "{s ∈ state. <k, g (s) > ∈ r}" and A' = "{s ∈ state. <k, f (s) > ∈ r}"in Always_LeadsTo_weaken) apply (erule_tac A = "{s ∈ state. <k, g(s)> ∈ r}" and A' = "{s ∈ state. <k, g(s)> ∈ r}"in Always_Constrains_weaken) apply auto apply (drule Always_Int_I, assumption) apply (erule_tac A = "{s ∈ state. g(s)=h(s)} ∩ {s ∈ state. <f(s), g(s)> ∈ r}" in Always_weaken) apply auto done
(** Union properties (with the subset ordering) **)
lemma refl_SetLe [simp]: "refl(Pow(A), SetLe(A))" by (unfold refl_def SetLe_def, auto)
lemma trans_on_SetLe [simp]: "trans[Pow(A)](SetLe(A))" by (unfold trans_on_def SetLe_def, auto)
lemma antisym_SetLe [simp]: "antisym(SetLe(A))" by (unfold antisym_def SetLe_def, auto)
lemma part_order_SetLe [simp]: "part_order(Pow(A), SetLe(A))" by (unfold part_order_def, auto)
lemma increasing_Un: "[F ∈ Increasing.increasing(Pow(A), SetLe(A), f); F ∈ Increasing.increasing(Pow(A), SetLe(A), g)] ==> F ∈ Increasing.increasing(Pow(A), SetLe(A), λx. f(x) ∪ g(x))" by (rule_tac h = "(Un)"in imp_increasing_comp2, auto)
lemma Increasing_Un: "[F ∈ Increasing(Pow(A), SetLe(A), f); F ∈ Increasing(Pow(A), SetLe(A), g)] ==> F ∈ Increasing(Pow(A), SetLe(A), λx. f(x) ∪ g(x))" by (rule_tac h = "(Un)"in imp_Increasing_comp2, auto)
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.