src/HOL/equalities.ML
changeset 4136 ba267836dd7a
parent 4089 96fba19bcbe2
child 4159 4aff9b7e5597
equal deleted inserted replaced
4135:4830f1f5f6ea 4136:ba267836dd7a
   101 
   101 
   102 goal thy "f``(g``A) = (%x. f (g x)) `` A";
   102 goal thy "f``(g``A) = (%x. f (g x)) `` A";
   103 by (Blast_tac 1);
   103 by (Blast_tac 1);
   104 qed "image_image";
   104 qed "image_image";
   105 
   105 
   106 qed_goal "ball_image" Set.thy "(!y:F``S. P y) = (!x:S. P (F x))"
       
   107  (fn _ => [Blast_tac 1]);
       
   108 
       
   109 goal thy "!!x. x:A ==> insert (f x) (f``A) = f``A";
   106 goal thy "!!x. x:A ==> insert (f x) (f``A) = f``A";
   110 by (Blast_tac 1);
   107 by (Blast_tac 1);
   111 qed "insert_image";
   108 qed "insert_image";
   112 Addsimps [insert_image];
   109 Addsimps [insert_image];
   113 
   110 
   122 by (split_tac [expand_if] 1);
   119 by (split_tac [expand_if] 1);
   123 by (Blast_tac 1);
   120 by (Blast_tac 1);
   124 qed "if_image_distrib";
   121 qed "if_image_distrib";
   125 Addsimps[if_image_distrib];
   122 Addsimps[if_image_distrib];
   126 
   123 
       
   124 val prems= goal thy "[|M = N; !!x. x:N ==> f x = g x|] ==> f``M = g``N";
       
   125 by (rtac set_ext 1);
       
   126 by (simp_tac (simpset() addsimps image_def::prems) 1);
       
   127 qed "image_cong";
       
   128 
   127 
   129 
   128 section "Int";
   130 section "Int";
   129 
   131 
   130 goal thy "A Int A = A";
   132 goal thy "A Int A = A";
   131 by (Blast_tac 1);
   133 by (Blast_tac 1);
   369 qed "Inter_Un_distrib";
   371 qed "Inter_Un_distrib";
   370 
   372 
   371 section "UN and INT";
   373 section "UN and INT";
   372 
   374 
   373 (*Basic identities*)
   375 (*Basic identities*)
       
   376 
       
   377 val not_empty = prove_goal Set.thy "A Û {} = (Ãx. xÎA)" (K [Blast_tac 1]);
       
   378 (*Addsimps[not_empty];*)
   374 
   379 
   375 goal thy "(UN x:{}. B x) = {}";
   380 goal thy "(UN x:{}. B x) = {}";
   376 by (Blast_tac 1);
   381 by (Blast_tac 1);
   377 qed "UN_empty";
   382 qed "UN_empty";
   378 Addsimps[UN_empty];
   383 Addsimps[UN_empty];
   678     ["(ALL x:A. P x | Q) = ((ALL x:A. P x) | Q)",
   683     ["(ALL x:A. P x | Q) = ((ALL x:A. P x) | Q)",
   679      "(ALL x:A. P | Q x) = (P | (ALL x:A. Q x))",
   684      "(ALL x:A. P | Q x) = (P | (ALL x:A. Q x))",
   680      "(ALL x:A. P --> Q x) = (P --> (ALL x:A. Q x))",
   685      "(ALL x:A. P --> Q x) = (P --> (ALL x:A. Q x))",
   681      "(ALL x:A. P x --> Q) = ((EX x:A. P x) --> Q)",
   686      "(ALL x:A. P x --> Q) = ((EX x:A. P x) --> Q)",
   682      "(ALL x:{}. P x) = True",
   687      "(ALL x:{}. P x) = True",
       
   688      "(ALL x:UNIV. P x) = (ALL x. P x)",
   683      "(ALL x:insert a B. P x) = (P(a) & (ALL x:B. P x))",
   689      "(ALL x:insert a B. P x) = (P(a) & (ALL x:B. P x))",
   684      "(ALL x:Union(A). P x) = (ALL y:A. ALL x:y. P x)",
   690      "(ALL x:Union(A). P x) = (ALL y:A. ALL x:y. P x)",
   685      "(ALL x:Collect Q. P x) = (ALL x. Q x --> P x)",
   691      "(ALL x:Collect Q. P x) = (ALL x. Q x --> P x)",
   686      "(ALL x:f``A. P x) = (ALL x:A. P(f x))",
   692      "(ALL x:f``A. P x) = (ALL x:A. P(f x))",
   687      "(~(ALL x:A. P x)) = (EX x:A. ~P x)"];
   693      "(~(ALL x:A. P x)) = (EX x:A. ~P x)"];
   691 
   697 
   692 val bex_simps = map prover
   698 val bex_simps = map prover
   693     ["(EX x:A. P x & Q) = ((EX x:A. P x) & Q)",
   699     ["(EX x:A. P x & Q) = ((EX x:A. P x) & Q)",
   694      "(EX x:A. P & Q x) = (P & (EX x:A. Q x))",
   700      "(EX x:A. P & Q x) = (P & (EX x:A. Q x))",
   695      "(EX x:{}. P x) = False",
   701      "(EX x:{}. P x) = False",
       
   702      "(EX x:UNIV. P x) = (EX x. P x)",
   696      "(EX x:insert a B. P x) = (P(a) | (EX x:B. P x))",
   703      "(EX x:insert a B. P x) = (P(a) | (EX x:B. P x))",
   697      "(EX x:Union(A). P x) = (EX y:A. EX x:y.  P x)",
   704      "(EX x:Union(A). P x) = (EX y:A. EX x:y.  P x)",
   698      "(EX x:Collect Q. P x) = (EX x. Q x & P x)",
   705      "(EX x:Collect Q. P x) = (EX x. Q x & P x)",
   699      "(EX x:f``A. P x) = (EX x:A. P(f x))",
   706      "(EX x:f``A. P x) = (EX x:A. P(f x))",
   700      "(~(EX x:A. P x)) = (ALL x:A. ~P x)"];
   707      "(~(EX x:A. P x)) = (ALL x:A. ~P x)"];