src/HOL/UNITY/Comp.ML
changeset 8122 b43ad07660b9
parent 8065 658e0d4e4ed9
child 8128 3a5864b465e2
equal deleted inserted replaced
8121:4a53041acb28 8122:b43ad07660b9
   170 by (Blast_tac 2);
   170 by (Blast_tac 2);
   171 by Auto_tac;
   171 by Auto_tac;
   172 by (etac order_trans 1);
   172 by (etac order_trans 1);
   173 by (Blast_tac 1);
   173 by (Blast_tac 1);
   174 qed "Increasing_preserves_Stable";
   174 qed "Increasing_preserves_Stable";
       
   175 
       
   176 
       
   177 (*** givenBy ***)
       
   178 
       
   179 Goalw [givenBy_def] "givenBy id = UNIV";
       
   180 by Auto_tac;
       
   181 qed "givenBy_id";
       
   182 Addsimps [givenBy_id];
       
   183 
       
   184 Goalw [givenBy_def] "(givenBy v) = {A. ALL x:A. ALL y. v x = v y --> y: A}";
       
   185 by Safe_tac;
       
   186 by (res_inst_tac [("x", "v `` ?u")] image_eqI 2);
       
   187 by Auto_tac;
       
   188 qed "givenBy_eq_all";
       
   189 
       
   190 Goal "givenBy v = {A. EX P. A = {s. P(v s)}}";
       
   191 by (simp_tac (simpset() addsimps [givenBy_eq_all]) 1);
       
   192 by Safe_tac;
       
   193 by (res_inst_tac [("x", "%n. EX s. v s = n & s : ?A")] exI 1);
       
   194 by (Blast_tac 1);
       
   195 by Auto_tac;
       
   196 qed "givenBy_eq_Collect";
       
   197 
       
   198 val prems =
       
   199 Goal "(!!x y. [| x:A;  v x = v y |] ==> y: A) ==> A: givenBy v";
       
   200 by (stac givenBy_eq_all 1);
       
   201 by (blast_tac (claset() addIs prems) 1);
       
   202 qed "givenByI";
       
   203 
       
   204 Goalw [givenBy_def] "[| A: givenBy v;  x:A;  v x = v y |] ==> y: A";
       
   205 by Auto_tac;
       
   206 qed "givenByD";
       
   207 
       
   208 Goal "{} : givenBy v";
       
   209 by (blast_tac (claset() addSIs [givenByI]) 1);
       
   210 qed "empty_mem_givenBy";
       
   211 
       
   212 AddIffs [empty_mem_givenBy];
       
   213 
       
   214 Goal "A: givenBy v ==> EX P. A = {s. P(v s)}";
       
   215 by (res_inst_tac [("x", "%n. EX s. v s = n & s : A")] exI 1);
       
   216 by (full_simp_tac (simpset() addsimps [givenBy_eq_all]) 1);
       
   217 by (Blast_tac 1);
       
   218 qed "givenBy_imp_eq_Collect";
       
   219 
       
   220 Goalw [givenBy_def] "{s. P(v s)} : givenBy v";
       
   221 by (Best_tac 1);
       
   222 qed "Collect_mem_givenBy";
       
   223 
       
   224 Goal "givenBy v = {A. EX P. A = {s. P(v s)}}";
       
   225 by (blast_tac (claset() addIs [Collect_mem_givenBy,
       
   226 			       givenBy_imp_eq_Collect]) 1);
       
   227 qed "givenBy_eq_eq_Collect";
       
   228 
       
   229 (*preserving v preserves properties given by v*)
       
   230 Goal "[| F : preserves v;  D : givenBy v |] ==> F : stable D";
       
   231 by (force_tac (claset(), 
       
   232 	       simpset() addsimps [impOfSubs preserves_subset_stable, 
       
   233 				   givenBy_eq_Collect]) 1);
       
   234 qed "preserves_givenBy_imp_stable";
       
   235 
       
   236 Goal "givenBy (w o v) <= givenBy v";
       
   237 by (simp_tac (simpset() addsimps [givenBy_eq_Collect]) 1);
       
   238 by (Deepen_tac 0 1);
       
   239 qed "givenBy_o_subset";
       
   240 
       
   241 Goal "[| A : givenBy v;  B : givenBy v |] ==> A-B : givenBy v";
       
   242 by (full_simp_tac (simpset() addsimps [givenBy_eq_Collect]) 1);
       
   243 by Safe_tac;
       
   244 by (res_inst_tac [("x", "%z. ?R z & ~ ?Q z")] exI 1);
       
   245 by (deepen_tac (set_cs addSIs [equalityI]) 0 1);
       
   246 qed "givenBy_DiffI";