(* Title: ZF/UNITY/Comp.thy Author: Sidi O Ehmety, Computer Laboratory Copyright 1998 University of Cambridge From Chandy and Sanders, "Reasoning About Program Composition", Technical Report 2000-003, University of Florida, 2000. Revised by Sidi Ehmety on January 2001 Added: a strong form of the order relation over component and localize Theory ported from HOL. *)
section‹Composition›
theory Comp imports Union Increasing begin
definition
component :: "[i,i]==>o" (infixl‹component› 65) where "F component H ≡ (∃G. F ⊔ G = H)"
definition
strict_component :: "[i,i]==>o" (infixl‹strict'_component› 65) where "F strict_component H ≡ F component H ∧ F≠H"
definition (* A stronger form of the component relation *)
component_of :: "[i,i]==>o" (infixl‹component'_of› 65) where "F component_of H ≡ (∃G. F ok G ∧ F ⊔ G = H)"
definition
strict_component_of :: "[i,i]==>o" (infixl‹strict'_component'_of› 65) where "F strict_component_of H ≡ F component_of H ∧ F≠H"
definition (* Preserves a state function f, in particular a variable *)
preserves :: "(i==>i)==>i"where "preserves(f) ≡ {F:program. ∀z. F: stable({s:state. f(s) = z})}"
lemma component_SKIP [simp]: "F ∈ program ==> SKIP component F" unfolding component_def apply (rule_tac x = F in exI) apply (force intro: Join_SKIP_left) done
lemma component_refl [simp]: "F ∈ program ==> F component F" unfolding component_def apply (rule_tac x = F in exI) apply (force intro: Join_SKIP_right) done
lemma Join_absorb1: "F component G ==> F ⊔ G = G" by (auto simp add: component_def Join_left_absorb)
lemma Join_absorb2: "G component F ==> F ⊔ G = F" by (auto simp add: Join_ac component_def)
lemma JOIN_component_iff: "H ∈ program==>(JOIN(I,F) component H) ⟷ (∀i ∈ I. F(i) component H)" apply (case_tac "I=0", force) apply (simp (no_asm_simp) add: component_eq_subset) apply auto apply blast apply (rename_tac "y") apply (drule_tac c = y and A = "AllowedActs (H)"in subsetD) apply (blast elim!: not_emptyE)+ done
lemma component_JOIN: "i ∈ I ==> F(i) component (⊔i ∈ I. (F(i)))" unfolding component_def apply (blast intro: JOIN_absorb) done
lemma component_trans: "[F component G; G component H]==> F component H" unfolding component_def apply (blast intro: Join_assoc [symmetric]) done
lemma component_antisym: "[F ∈ program; G ∈ program]==>(F component G ∧ G component F) ⟶ F = G" apply (simp (no_asm_simp) add: component_eq_subset) apply clarify apply (rule program_equalityI, auto) done
lemma Join_component_iff: "H ∈ program ==> ((F ⊔ G) component H) ⟷ (F component H ∧ G component H)" apply (simp (no_asm_simp) add: component_eq_subset) apply blast done
lemma component_constrains: "[F component G; G ∈ A co B; F ∈ program]==> F ∈ A co B" apply (frule constrainsD2) apply (auto simp add: constrains_def component_eq_subset) done
lemma preserves_id_subset_stable: "st_set(A) ==> preserves(λx. x) ⊆ stable(A)" apply (unfold preserves_def stable_def constrains_def, auto) apply (drule_tac x = xb in spec) apply (drule_tac x = act in bspec) apply (auto dest: ActsD) done
lemma preserves_id_imp_stable: "[F ∈ preserves(λx. x); st_set(A)]==> F ∈ stable(A)" by (blast intro: preserves_id_subset_stable [THEN subsetD])
(** Added by Sidi **) (** component_of **)
(* component_of is stronger than component *) lemma component_of_imp_component: "F component_of H ==> F component H" apply (unfold component_def component_of_def, blast) done
(* component_of satisfies many of component's properties *) lemma component_of_refl [simp]: "F ∈ program ==> F component_of F" unfolding component_of_def apply (rule_tac x = SKIP in exI, auto) done
lemma component_of_SKIP [simp]: "F ∈ program ==>SKIP component_of F" apply (unfold component_of_def, auto) apply (rule_tac x = F in exI, auto) done
lemma component_of_trans: "[F component_of G; G component_of H]==> F component_of H" unfolding component_of_def apply (blast intro: Join_assoc [symmetric]) 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.