src/HOL/equalities.ML
changeset 7648 8258b93cdd32
parent 7516 a1d476251238
child 7713 f4fe9d620107
equal deleted inserted replaced
7647:2ceddd91cd0a 7648:8258b93cdd32
   158 Goal "(A Int B) Int C = A Int (B Int C)";
   158 Goal "(A Int B) Int C = A Int (B Int C)";
   159 by (Blast_tac 1);
   159 by (Blast_tac 1);
   160 qed "Int_assoc";
   160 qed "Int_assoc";
   161 
   161 
   162 (*Intersection is an AC-operator*)
   162 (*Intersection is an AC-operator*)
   163 val Int_ac = [Int_assoc, Int_left_absorb, Int_commute, Int_left_commute];
   163 bind_thms ("Int_ac", [Int_assoc, Int_left_absorb, Int_commute, Int_left_commute]);
   164 
   164 
   165 Goal "B<=A ==> A Int B = B";
   165 Goal "B<=A ==> A Int B = B";
   166 by (Blast_tac 1);
   166 by (Blast_tac 1);
   167 qed "Int_absorb1";
   167 qed "Int_absorb1";
   168 
   168 
   238 Goal "(A Un B) Un C = A Un (B Un C)";
   238 Goal "(A Un B) Un C = A Un (B Un C)";
   239 by (Blast_tac 1);
   239 by (Blast_tac 1);
   240 qed "Un_assoc";
   240 qed "Un_assoc";
   241 
   241 
   242 (*Union is an AC-operator*)
   242 (*Union is an AC-operator*)
   243 val Un_ac = [Un_assoc, Un_left_absorb, Un_commute, Un_left_commute];
   243 bind_thms ("Un_ac", [Un_assoc, Un_left_absorb, Un_commute, Un_left_commute]);
   244 
   244 
   245 Goal "A<=B ==> A Un B = B";
   245 Goal "A<=B ==> A Un B = B";
   246 by (Blast_tac 1);
   246 by (Blast_tac 1);
   247 qed "Un_absorb1";
   247 qed "Un_absorb1";
   248 
   248 
   434 
   434 
   435 section "UN and INT";
   435 section "UN and INT";
   436 
   436 
   437 (*Basic identities*)
   437 (*Basic identities*)
   438 
   438 
   439 val not_empty = prove_goal Set.thy "(A ~= {}) = (? x. x:A)" (K [Blast_tac 1]);
   439 bind_thm ("not_empty", prove_goal Set.thy "(A ~= {}) = (? x. x:A)" (K [Blast_tac 1]));
   440 
   440 
   441 Goal "(UN x:{}. B x) = {}";
   441 Goal "(UN x:{}. B x) = {}";
   442 by (Blast_tac 1);
   442 by (Blast_tac 1);
   443 qed "UN_empty";
   443 qed "UN_empty";
   444 Addsimps[UN_empty];
   444 Addsimps[UN_empty];
   894 val bex_disj_distrib = 
   894 val bex_disj_distrib = 
   895     prover "(EX x:A. P x | Q x) = ((EX x:A. P x) | (EX x:A. Q x))";
   895     prover "(EX x:A. P x | Q x) = ((EX x:A. P x) | (EX x:A. Q x))";
   896 
   896 
   897 end;
   897 end;
   898 
   898 
       
   899 bind_thms ("UN_simps", UN_simps);
       
   900 bind_thms ("INT_simps", INT_simps);
       
   901 bind_thms ("ball_simps", ball_simps);
       
   902 bind_thms ("bex_simps", bex_simps);
       
   903 bind_thm ("ball_conj_distrib", ball_conj_distrib);
       
   904 bind_thm ("bex_disj_distrib", bex_disj_distrib);
       
   905 
   899 Addsimps (UN_simps @ INT_simps @ ball_simps @ bex_simps);
   906 Addsimps (UN_simps @ INT_simps @ ball_simps @ bex_simps);