src/HOL/UNITY/Comp.ML
changeset 5804 8e0a4c4fd67b
parent 5706 21706a735c8d
child 5968 06f9dbfff032
equal deleted inserted replaced
5803:06af82bec2f1 5804:8e0a4c4fd67b
    41 Goal "[| component F G; component G F |] ==> F=G";
    41 Goal "[| component F G; component G F |] ==> F=G";
    42 by (asm_simp_tac (simpset() addsimps [program_equalityI, equalityI, 
    42 by (asm_simp_tac (simpset() addsimps [program_equalityI, equalityI, 
    43 				      component_Acts, component_Init]) 1);
    43 				      component_Acts, component_Init]) 1);
    44 qed "component_anti_sym";
    44 qed "component_anti_sym";
    45 
    45 
       
    46 Goalw [component_def]
       
    47       "component F H = (EX G. F Join G = H & Disjoint F G)";
       
    48 by (blast_tac (claset() addSIs [Diff_Disjoint, Join_Diff2]) 1);
       
    49 qed "component_eq";
    46 
    50 
    47 (*** existential properties ***)
    51 (*** existential properties ***)
    48 
    52 
    49 Goalw [ex_prop_def]
    53 Goalw [ex_prop_def]
    50      "[| ex_prop X; finite GG |] ==> GG Int X ~= {} --> (JN G:GG. G) : X";
    54      "[| ex_prop X; finite GG |] ==> GG Int X ~= {} --> (JN G:GG. G) : X";
    99 
   103 
   100 
   104 
   101 (*** guarantees ***)
   105 (*** guarantees ***)
   102 
   106 
   103 (*This equation is more intuitive than the official definition*)
   107 (*This equation is more intuitive than the official definition*)
   104 Goalw [guarantees_def, component_def]
   108 Goal "(F : A guarantees B) = \
   105       "(F : A guarantees B) = (ALL G. F Join G : A --> F Join G : B)";
   109 \     (ALL G. F Join G : A & Disjoint F G --> F Join G : B)";
       
   110 by (simp_tac (simpset() addsimps [guarantees_def, component_eq]) 1);
   106 by (Blast_tac 1);
   111 by (Blast_tac 1);
   107 qed "guarantees_eq";
   112 qed "guarantees_eq";
   108 
   113 
   109 Goalw [guarantees_def] "X <= Y ==> X guarantees Y = UNIV";
   114 Goalw [guarantees_def] "X <= Y ==> X guarantees Y = UNIV";
   110 by (Blast_tac 1);
   115 by (Blast_tac 1);
   152 Goalw [guarantees_def]
   157 Goalw [guarantees_def]
   153      "EX z:I. F : A guarantees (B z) ==> F : A guarantees (UN z:I. B z)";
   158      "EX z:I. F : A guarantees (B z) ==> F : A guarantees (UN z:I. B z)";
   154 by (Blast_tac 1);
   159 by (Blast_tac 1);
   155 qed "ex_guarantees";
   160 qed "ex_guarantees";
   156 
   161 
   157 val prems = Goalw [guarantees_def, component_def]
   162 val prems = Goal
   158       "(!!G. F Join G : A ==> F Join G : B) ==> F : A guarantees B";
   163      "(!!G. [| F Join G : A;  Disjoint F G |] ==> F Join G : B) \
       
   164 \     ==> F : A guarantees B";
       
   165 by (simp_tac (simpset() addsimps [guarantees_def, component_eq]) 1);
   159 by (blast_tac (claset() addIs prems) 1);
   166 by (blast_tac (claset() addIs prems) 1);
   160 qed "guaranteesI";
   167 qed "guaranteesI";
   161 
   168 
   162 Goal "[| F : A guarantees B;  F Join G : A |] ==> F Join G : B";
   169 Goalw [guarantees_def, component_def]
   163 by (asm_full_simp_tac (simpset() addsimps [guarantees_eq]) 1);
   170      "[| F : A guarantees B;  F Join G : A |] ==> F Join G : B";
       
   171 by (Blast_tac 1);
   164 qed "guaranteesD";
   172 qed "guaranteesD";
   165 
   173 
   166 
   174 
   167 (*** well-definedness ***)
   175 (*** well-definedness ***)
   168 
   176