src/HOL/Hilbert_Choice_lemmas.ML
changeset 11454 7514e5e21cb8
parent 11453 1b15f655da2c
child 11460 e5fb885bfe3a
equal deleted inserted replaced
11453:1b15f655da2c 11454:7514e5e21cb8
     1 (*  Title:      HOL/Hilbert_Choice_lemmas
     1 (*  Title:      HOL/Hilbert_Choice_lemmas
     2     ID:         $Id$
     2     ID: $Id$
     3     Author:     Lawrence C Paulson
     3     Author:     Lawrence C Paulson
     4     Copyright   2001  University of Cambridge
     4     Copyright   2001  University of Cambridge
     5 
     5 
     6 Lemmas for Hilbert's epsilon-operator and the Axiom of Choice
     6 Lemmas for Hilbert's epsilon-operator and the Axiom of Choice
     7 *)
     7 *)
   261 
   261 
   262 Goal "(@(x',y'). x = x' & y = y') = (x,y)";
   262 Goal "(@(x',y'). x = x' & y = y') = (x,y)";
   263 by (Blast_tac 1);
   263 by (Blast_tac 1);
   264 qed "Eps_split_eq";
   264 qed "Eps_split_eq";
   265 Addsimps [Eps_split_eq];
   265 Addsimps [Eps_split_eq];
       
   266 
       
   267 
       
   268 (*---------------------------------------------------------------------------
       
   269  * A relation is wellfounded iff it has no infinite descending chain
       
   270  * Cannot go into WF because it needs type nat.
       
   271  *---------------------------------------------------------------------------*)
       
   272 
       
   273 Goalw [wf_eq_minimal RS eq_reflection]
       
   274   "wf r = (~(EX f. ALL i. (f(Suc i),f i) : r))";
       
   275 by (rtac iffI 1);
       
   276  by (rtac notI 1);
       
   277  by (etac exE 1);
       
   278  by (eres_inst_tac [("x","{w. EX i. w=f i}")] allE 1);
       
   279  by (Blast_tac 1);
       
   280 by (etac contrapos_np 1);
       
   281 by (Asm_full_simp_tac 1);
       
   282 by (Clarify_tac 1);
       
   283 by (subgoal_tac "ALL n. nat_rec x (%i y. @z. z:Q & (z,y):r) n : Q" 1);
       
   284  by (res_inst_tac[("x","nat_rec x (%i y. @z. z:Q & (z,y):r)")]exI 1);
       
   285  by (rtac allI 1);
       
   286  by (Simp_tac 1);
       
   287  by (rtac someI2_ex 1);
       
   288   by (Blast_tac 1);
       
   289  by (Blast_tac 1);
       
   290 by (rtac allI 1);
       
   291 by (induct_tac "n" 1);
       
   292  by (Asm_simp_tac 1);
       
   293 by (Simp_tac 1);
       
   294 by (rtac someI2_ex 1);
       
   295  by (Blast_tac 1);
       
   296 by (Blast_tac 1);
       
   297 qed "wf_iff_no_infinite_down_chain";
       
   298