src/HOL/equalities.ML
changeset 2513 d708d8cdc8e8
parent 2512 0231e4f467f2
child 2519 761e3094e32f
equal deleted inserted replaced
2512:0231e4f467f2 2513:d708d8cdc8e8
   562                  "(INT x. A x Un B)  = ((INT x.A x) Un B)",
   562                  "(INT x. A x Un B)  = ((INT x.A x) Un B)",
   563                  "(INT x. A Un B x)  = (A Un (INT x.B x))",
   563                  "(INT x. A Un B x)  = (A Un (INT x.B x))",
   564                  "(INT x. A x - B)   = ((INT x.A x) - B)",
   564                  "(INT x. A x - B)   = ((INT x.A x) - B)",
   565                  "(INT x. A - B x)   = (A - (UN x.B x))"];
   565                  "(INT x. A - B x)   = (A - (UN x.B x))"];
   566 
   566 
   567 (*Analogous laws for bounded Unions and Intersections are conditional
   567 val UN_simps = map prover 
       
   568                 ["(UN x:C. A x Int B)  = ((UN x:C.A x) Int B)",
       
   569                  "(UN x:C. A Int B x)  = (A Int (UN x:C.B x))",
       
   570                  "(UN x:C. A x - B)    = ((UN x:C.A x) - B)",
       
   571                  "(UN x:C. A - B x)    = (A - (INT x:C.B x))"];
       
   572 
       
   573 val INT_simps = map prover
       
   574                 ["(INT x:C. insert a (B x)) = insert a (INT x:C. B x)",
       
   575                  "(INT x:C. A x Un B)  = ((INT x:C.A x) Un B)",
       
   576                  "(INT x:C. A Un B x)  = (A Un (INT x:C.B x))"];
       
   577 
       
   578 (*The missing laws for bounded Unions and Intersections are conditional
   568   on the index set's being non-empty.  Thus they are probably NOT worth 
   579   on the index set's being non-empty.  Thus they are probably NOT worth 
   569   adding as default rewrites.*)
   580   adding as default rewrites.*)
       
   581 
       
   582 val ball_simps = map prover
       
   583     ["(ALL x:A. P x | Q) = ((ALL x:A. P x) | Q)",
       
   584      "(ALL x:A. P | Q x) = (P | (ALL x:A. Q x))",
       
   585      "(ALL x:{}. P x) = True",
       
   586      "(ALL x:insert a B. P x) = (P(a) & (ALL x:B. P x))",
       
   587      "(ALL x:Union(A). P x) = (ALL y:A. ALL x:y. P x)",
       
   588      "(ALL x:Collect Q. P x) = (ALL x. Q x --> P x)"];
       
   589 
       
   590 val ball_conj_distrib = 
       
   591     prover "(ALL x:A. P x & Q x) = ((ALL x:A. P x) & (ALL x:A. Q x))";
       
   592 
       
   593 val bex_simps = map prover
       
   594     ["(EX x:A. P x & Q) = ((EX x:A. P x) & Q)",
       
   595      "(EX x:A. P & Q x) = (P & (EX x:A. Q x))",
       
   596      "(EX x:{}. P x) = False",
       
   597      "(EX x:insert a B. P x) = (P(a) | (EX x:B. P x))",
       
   598      "(EX x:Union(A). P x) = (EX y:A. EX x:y.  P x)",
       
   599      "(EX x:Collect Q. P x) = (EX x. Q x & P x)"];
       
   600 
       
   601 val bex_conj_distrib = 
       
   602     prover "(EX x:A. P x | Q x) = ((EX x:A. P x) | (EX x:A. Q x))";
       
   603 
   570 end;
   604 end;
   571 
   605 
   572 Addsimps (UN1_simps @ INT1_simps);
   606 Addsimps (UN1_simps @ INT1_simps @ UN_simps @ INT_simps @ 
       
   607 	  ball_simps @ bex_simps);