src/CTT/ex/elim.ML
changeset 3837 d7f033c74b38
parent 1446 a8387e934fa7
child 9251 bd57acd44fc1
equal deleted inserted replaced
3836:f1a1817659e6 3837:d7f033c74b38
   146 by (typechk_tac (SumE_fst::prems));
   146 by (typechk_tac (SumE_fst::prems));
   147 result();
   147 result();
   148 
   148 
   149 writeln"Axiom of choice.  Proof without fst, snd.  Harder still!"; 
   149 writeln"Axiom of choice.  Proof without fst, snd.  Harder still!"; 
   150 val prems = goal CTT.thy   
   150 val prems = goal CTT.thy   
   151     "[| A type;  !!x.x:A ==> B(x) type;                         \
   151     "[| A type;  !!x. x:A ==> B(x) type;                         \
   152 \       !!x y.[| x:A;  y:B(x) |] ==> C(x,y) type                \
   152 \       !!x y.[| x:A;  y:B(x) |] ==> C(x,y) type                \
   153 \    |] ==> ?a : PROD h: (PROD x:A. SUM y:B(x). C(x,y)).        \
   153 \    |] ==> ?a : PROD h: (PROD x:A. SUM y:B(x). C(x,y)).        \
   154 \                        (SUM f: (PROD x:A. B(x)). PROD x:A. C(x, f`x))";
   154 \                        (SUM f: (PROD x:A. B(x)). PROD x:A. C(x, f`x))";
   155 by (intr_tac prems);
   155 by (intr_tac prems);
   156 (*Must not use add_mp_tac as subst_prodE hides the construction.*)
   156 (*Must not use add_mp_tac as subst_prodE hides the construction.*)