src/ZF/UNITY/Constrains.ML
changeset 12215 55c084921240
parent 12195 ed2893765a08
child 12220 9dc4e8fec63d
equal deleted inserted replaced
12214:f368821d9c68 12215:55c084921240
   135    "[| F : A Co A'; B<=A; A'<=B' |] ==> F : B Co B'";
   135    "[| F : A Co A'; B<=A; A'<=B' |] ==> F : B Co B'";
   136 by (blast_tac (claset() addIs [constrains_weaken, st_set_subset]) 1);
   136 by (blast_tac (claset() addIs [constrains_weaken, st_set_subset]) 1);
   137 qed "Constrains_weaken";
   137 qed "Constrains_weaken";
   138 
   138 
   139 (** Union **)
   139 (** Union **)
   140 Goalw [Constrains_def2]
   140 Goalw [Constrains_def2] 
   141 "[| F : A Co A'; F : B Co B' |] ==> F : (A Un B) Co (A' Un B')";
   141 "[| F : A Co A'; F : B Co B' |] ==> F : (A Un B) Co (A' Un B')";
   142 by Auto_tac;
   142 by Auto_tac;
   143 by (asm_full_simp_tac (simpset() addsimps [Int_Un_distrib2 RS sym]) 1);
   143 by (asm_full_simp_tac (simpset() addsimps [Int_Un_distrib]) 1);
   144 by (blast_tac (claset() addIs [constrains_Un]) 1);
   144 by (blast_tac (claset() addIs [constrains_Un]) 1);
   145 qed "Constrains_Un";
   145 qed "Constrains_Un";
   146 
   146 
   147 val [major, minor] = Goalw [Constrains_def2]
   147 val [major, minor] = Goalw [Constrains_def2]
   148 "[|(!!i. i:I==>F:A(i) Co A'(i)); F:program|] ==> F:(UN i:I. A(i)) Co (UN i:I. A'(i))";
   148 "[|(!!i. i:I==>F:A(i) Co A'(i)); F:program|] ==> F:(UN i:I. A(i)) Co (UN i:I. A'(i))";
   149 by (cut_facts_tac [minor] 1);
   149 by (cut_facts_tac [minor] 1);
   150 by (auto_tac (claset() addDs [major]
   150 by (auto_tac (claset() addDs [major]
   151                        addIs [constrains_UN],
   151                        addIs [constrains_UN],
   152               simpset() addsimps [Int_UN_distrib]));
   152               simpset() delsimps UN_simps addsimps [Int_UN_distrib]));
   153 qed "Constrains_UN";
   153 qed "Constrains_UN";
   154 
   154 
   155 (** Intersection **)
   155 (** Intersection **)
   156 
   156 
   157 Goalw [Constrains_def]
   157 Goalw [Constrains_def]
   168 by (case_tac "I=0" 1);
   168 by (case_tac "I=0" 1);
   169 by (asm_full_simp_tac (simpset() addsimps [Inter_def]) 1);
   169 by (asm_full_simp_tac (simpset() addsimps [Inter_def]) 1);
   170 by (subgoal_tac "reachable(F) Int Inter(RepFun(I, A)) = (INT i:I. reachable(F) Int A(i))" 1);
   170 by (subgoal_tac "reachable(F) Int Inter(RepFun(I, A)) = (INT i:I. reachable(F) Int A(i))" 1);
   171 by (force_tac (claset(), simpset() addsimps [Inter_def]) 2);
   171 by (force_tac (claset(), simpset() addsimps [Inter_def]) 2);
   172 by (asm_full_simp_tac (simpset() addsimps [Constrains_def]) 1);
   172 by (asm_full_simp_tac (simpset() addsimps [Constrains_def]) 1);
       
   173 by (subgoal_tac "reachable(F) Int Inter(RepFun(I, A)) = (INT i:I. reachable(F) Int A(i))" 1);
       
   174 by (Force_tac 2);
       
   175 by (asm_simp_tac (simpset() delsimps INT_simps) 1);
   173 by (rtac constrains_INT 1);
   176 by (rtac constrains_INT 1);
   174 by (etac not_emptyE 1);
   177 by (etac not_emptyE 1);
   175 by (dresolve_tac [major] 1);
   178 by (dresolve_tac [major] 1);
   176 by (rewrite_goal_tac [Constrains_def] 1);
   179 by (rewrite_goal_tac [Constrains_def] 1);
   177 by (ALLGOALS(Asm_full_simp_tac));
   180 by (ALLGOALS(Asm_full_simp_tac));
   186 by (blast_tac (claset() addIs [constrains_trans, constrains_weaken]) 1);
   189 by (blast_tac (claset() addIs [constrains_trans, constrains_weaken]) 1);
   187 qed "Constrains_trans";
   190 qed "Constrains_trans";
   188 
   191 
   189 Goalw [Constrains_def2]
   192 Goalw [Constrains_def2]
   190 "[| F : A Co (A' Un B); F : B Co B' |] ==> F : A Co (A' Un B')";
   193 "[| F : A Co (A' Un B); F : B Co B' |] ==> F : A Co (A' Un B')";
   191 by (full_simp_tac (simpset() addsimps [Int_Un_distrib2 RS sym]) 1);
   194 by (full_simp_tac (simpset() addsimps [Int_Un_distrib]) 1);
   192 by (blast_tac (claset() addIs [constrains_cancel]) 1);
   195 by (blast_tac (claset() addIs [constrains_cancel]) 1);
   193 qed "Constrains_cancel";
   196 qed "Constrains_cancel";
   194 
   197 
   195 (*** Stable ***)
   198 (*** Stable ***)
   196 (* Useful because there's no Stable_weaken.  [Tanja Vos] *)
   199 (* Useful because there's no Stable_weaken.  [Tanja Vos] *)