HOL.ML
changeset 153 c0ff8f1ebc16
parent 128 89669c58e506
child 155 722bf1319be5
equal deleted inserted replaced
152:7d8781fc2c8e 153:c0ff8f1ebc16
    52   val notE	: thm
    52   val notE	: thm
    53   val notI	: thm
    53   val notI	: thm
    54   val notnotD 	: thm
    54   val notnotD 	: thm
    55   val rev_mp	: thm
    55   val rev_mp	: thm
    56   val select_equality	: thm
    56   val select_equality	: thm
       
    57   val selectI2	: thm
    57   val spec	: thm
    58   val spec	: thm
    58   val sstac	: thm list -> int -> tactic
    59   val sstac	: thm list -> int -> tactic
    59   val ssubst	: thm
    60   val ssubst	: thm
    60   val stac	: thm -> int -> tactic
    61   val stac	: thm -> int -> tactic
    61   val strip_tac	: int -> tactic
    62   val strip_tac	: int -> tactic
   269   [rtac (major RS exE) 1, REPEAT (etac conjE 1 ORELSE ares_tac prems 1)]);
   270   [rtac (major RS exE) 1, REPEAT (etac conjE 1 ORELSE ares_tac prems 1)]);
   270 
   271 
   271 
   272 
   272 (** Select: Hilbert's Epsilon-operator **)
   273 (** Select: Hilbert's Epsilon-operator **)
   273 
   274 
   274 val select_equality = prove_goal HOL.thy
   275 (*Easier to apply than selectI: conclusion has only one occurrence of P*)
   275     "[| P(a);  !!x. P(x) ==> x=a |] ==> (@x.P(x)) = a"
   276 val selectI2 = prove_goal HOL.thy
       
   277     "[| P(a);  !!x. P(x) ==> Q(x) |] ==> Q(@x.P(x))"
   276  (fn prems => [ resolve_tac prems 1, 
   278  (fn prems => [ resolve_tac prems 1, 
   277 	        rtac selectI 1, 
   279 	        rtac selectI 1, 
   278 		resolve_tac prems 1 ]);
   280 		resolve_tac prems 1 ]);
       
   281 
       
   282 val select_equality = prove_goal HOL.thy
       
   283     "[| P(a);  !!x. P(x) ==> x=a |] ==> (@x.P(x)) = a"
       
   284  (fn prems => [ rtac selectI2 1, 
       
   285 		REPEAT (ares_tac prems 1) ]);
       
   286 
   279 
   287 
   280 (** Classical intro rules for disjunction and existential quantifiers *)
   288 (** Classical intro rules for disjunction and existential quantifiers *)
   281 
   289 
   282 val disjCI = prove_goal HOL.thy "(~Q ==> P) ==> P|Q"
   290 val disjCI = prove_goal HOL.thy "(~Q ==> P) ==> P|Q"
   283  (fn prems=>
   291  (fn prems=>