src/HOL/HOL.ML
changeset 3646 a11338a5d2d4
parent 3621 d3e248853428
child 3842 b55686a7b22c
equal deleted inserted replaced
3645:cfbd814a11f2 3646:a11338a5d2d4
   255     "[| P(a);  !!x. P(x) ==> Q(x) |] ==> Q(@x.P(x))"
   255     "[| P(a);  !!x. P(x) ==> Q(x) |] ==> Q(@x.P(x))"
   256  (fn prems => [ resolve_tac prems 1, 
   256  (fn prems => [ resolve_tac prems 1, 
   257                 rtac selectI 1, 
   257                 rtac selectI 1, 
   258                 resolve_tac prems 1 ]);
   258                 resolve_tac prems 1 ]);
   259 
   259 
       
   260 (*Easier to apply than selectI2 if witness ?a comes from an EX-formula*)
       
   261 qed_goal "selectI2EX" HOL.thy
       
   262   "[| ? a.P a; !!x. P x ==> Q x |] ==> Q(Eps P)"
       
   263 (fn [major,minor] => [rtac (major RS exE) 1, etac selectI2 1, etac minor 1]);
       
   264 
   260 qed_goal "select_equality" HOL.thy
   265 qed_goal "select_equality" HOL.thy
   261     "[| P(a);  !!x. P(x) ==> x=a |] ==> (@x.P(x)) = a"
   266     "[| P(a);  !!x. P(x) ==> x=a |] ==> (@x.P(x)) = a"
   262  (fn prems => [ rtac selectI2 1, 
   267  (fn prems => [ rtac selectI2 1, 
   263                 REPEAT (ares_tac prems 1) ]);
   268                 REPEAT (ares_tac prems 1) ]);
   264 
   269 
   265 (*Easier to apply than selectI2 if witness ?a comes from an EX-formula*)
   270 qed_goalw "select1_equality" HOL.thy [Ex1_def]
   266 qed_goal "selectI2EX" HOL.thy
   271   "!!P. [| ?!x.P(x); P(a) |] ==> (@x.P(x)) = a"
   267   "[| ? a.P a; !!x. P x ==> Q x |] ==> Q(Eps P)"
   272 (fn _ => [rtac select_equality 1, atac 1,
   268 (fn [major,minor] => [rtac (major RS exE) 1, etac selectI2 1, etac minor 1]);
   273           etac exE 1, etac conjE 1,
       
   274           rtac allE 1, atac 1,
       
   275           etac impE 1, atac 1, etac ssubst 1,
       
   276           etac allE 1, etac impE 1, atac 1, etac ssubst 1,
       
   277           rtac refl 1]);
   269 
   278 
   270 qed_goal "select_eq_Ex" HOL.thy "P (@ x. P x) =  (? x. P x)" (fn prems => [
   279 qed_goal "select_eq_Ex" HOL.thy "P (@ x. P x) =  (? x. P x)" (fn prems => [
   271         rtac iffI 1,
   280         rtac iffI 1,
   272         etac exI 1,
   281         etac exI 1,
   273         etac exE 1,
   282         etac exE 1,