src/HOL/simpdata.ML
changeset 11232 558a4feebb04
parent 11220 db536a42dfc5
child 11344 57b7ad51971c
--- a/src/HOL/simpdata.ML	Thu Mar 29 12:26:37 2001 +0200
+++ b/src/HOL/simpdata.ML	Thu Mar 29 13:59:54 2001 +0200
@@ -66,9 +66,12 @@
    "(P | ~P) = True",    "(~P | P) = True",
    "((~P) = (~Q)) = (P=Q)",
    "(!x. P) = P", "(? x. P) = P", "? x. x=t", "? x. t=x",
-(*two needed for the one-point-rule quantifier simplification procs*)
-   "(? x. x=t & P(x)) = P(t)",          (*essential for termination!!*)
-   "(! x. t=x --> P(x)) = P(t)" ];      (*covers a stray case*)
+(* needed for the one-point-rule quantifier simplification procs*)
+(*essential for termination!!*)
+   "(? x. x=t & P(x)) = P(t)",
+   "(? x. t=x & P(x)) = P(t)",
+   "(! x. x=t --> P(x)) = P(t)",
+   "(! x. t=x --> P(x)) = P(t)" ];
 
 val imp_cong = standard(impI RSN
     (2, prove_goal (the_context ()) "(P=P')--> (P'--> (Q=Q'))--> ((P-->Q) = (P'-->Q'))"
@@ -256,6 +259,14 @@
 by (Blast_tac 1);
 qed "if_bool_eq_disj";
 
+local
+val uncurry = prove_goal (the_context()) "P --> Q --> R ==> P & Q --> R"
+              (fn prems => [cut_facts_tac prems 1, Blast_tac 1]);
+
+val iff_allI = allI RS
+    prove_goal (the_context()) "!x. P x = Q x ==> (!x. P x) = (!x. Q x)"
+               (fn prems => [cut_facts_tac prems 1, Blast_tac 1])
+in
 
 (*** make simplification procedures for quantifier elimination ***)
 
@@ -266,28 +277,30 @@
     | dest_eq _ = None;
   fun dest_conj((c as Const("op &",_)) $ s $ t) = Some(c,s,t)
     | dest_conj _ = None;
+  fun dest_imp((c as Const("op -->",_)) $ s $ t) = Some(c,s,t)
+    | dest_imp _ = None;
   val conj = HOLogic.conj
   val imp  = HOLogic.imp
   (*rules*)
   val iff_reflection = eq_reflection
   val iffI = iffI
-  val sym  = sym
   val conjI= conjI
   val conjE= conjE
   val impI = impI
-  val impE = impE
   val mp   = mp
+  val uncurry = uncurry
   val exI  = exI
   val exE  = exE
-  val allI = allI
-  val allE = allE
+  val iff_allI = iff_allI
 end);
 
+end;
+
 local
 val ex_pattern = Thm.read_cterm (Theory.sign_of (the_context ()))
     ("EX x. P(x) & Q(x)",HOLogic.boolT)
 val all_pattern = Thm.read_cterm (Theory.sign_of (the_context ()))
-    ("ALL x. P(x) & P'(x) --> Q(x)",HOLogic.boolT)
+    ("ALL x. P(x) --> Q(x)",HOLogic.boolT)
 in
 val defEX_regroup = mk_simproc "defined EX" [ex_pattern]
       Quantifier1.rearrange_ex