src/FOL/ex/cla.ML
changeset 1459 d12da312eff4
parent 1404 57c3f6d2e692
child 1462 d991b56cc52a
equal deleted inserted replaced
1458:fd510875fb71 1459:d12da312eff4
     1 (*  Title: 	FOL/ex/cla
     1 (*  Title:      FOL/ex/cla
     2     ID:         $Id$
     2     ID:         $Id$
     3     Author: 	Lawrence C Paulson, Cambridge University Computer Laboratory
     3     Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
     4     Copyright   1994  University of Cambridge
     4     Copyright   1994  University of Cambridge
     5 
     5 
     6 Classical First-Order Logic
     6 Classical First-Order Logic
     7 *)
     7 *)
     8 
     8 
   220 \   --> (EX x. Q(x)&P(x))";
   220 \   --> (EX x. Q(x)&P(x))";
   221 by (best_tac FOL_cs 1); 
   221 by (best_tac FOL_cs 1); 
   222 result();
   222 result();
   223 
   223 
   224 writeln"Problem 26";
   224 writeln"Problem 26";
   225 goal FOL.thy "((EX x. p(x)) <-> (EX x. q(x))) &	\
   225 goal FOL.thy "((EX x. p(x)) <-> (EX x. q(x))) & \
   226 \     (ALL x. ALL y. p(x) & q(y) --> (r(x) <-> s(y)))	\
   226 \     (ALL x. ALL y. p(x) & q(y) --> (r(x) <-> s(y)))   \
   227 \ --> ((ALL x. p(x)-->r(x)) <-> (ALL x. q(x)-->s(x)))";
   227 \ --> ((ALL x. p(x)-->r(x)) <-> (ALL x. q(x)-->s(x)))";
   228 by (fast_tac FOL_cs 1);
   228 by (fast_tac FOL_cs 1);
   229 result();
   229 result();
   230 
   230 
   231 writeln"Problem 27";
   231 writeln"Problem 27";
   281 by (best_tac FOL_cs 1);
   281 by (best_tac FOL_cs 1);
   282 result();
   282 result();
   283 
   283 
   284 writeln"Problem 34  AMENDED (TWICE!!)";
   284 writeln"Problem 34  AMENDED (TWICE!!)";
   285 (*Andrews's challenge*)
   285 (*Andrews's challenge*)
   286 goal FOL.thy "((EX x. ALL y. p(x) <-> p(y))  <->		\
   286 goal FOL.thy "((EX x. ALL y. p(x) <-> p(y))  <->                \
   287 \              ((EX x. q(x)) <-> (ALL y. p(y))))     <->	\
   287 \              ((EX x. q(x)) <-> (ALL y. p(y))))     <->        \
   288 \             ((EX x. ALL y. q(x) <-> q(y))  <->		\
   288 \             ((EX x. ALL y. q(x) <-> q(y))  <->                \
   289 \              ((EX x. p(x)) <-> (ALL y. q(y))))";
   289 \              ((EX x. p(x)) <-> (ALL y. q(y))))";
   290 by (deepen_tac FOL_cs 0 1);
   290 by (deepen_tac FOL_cs 0 1);
   291 result();
   291 result();
   292 
   292 
   293 writeln"Problem 35";
   293 writeln"Problem 35";
   316 (*slow...Poly/ML: 9.7 secs*)
   316 (*slow...Poly/ML: 9.7 secs*)
   317 result();
   317 result();
   318 
   318 
   319 writeln"Problem 38";
   319 writeln"Problem 38";
   320 goal FOL.thy
   320 goal FOL.thy
   321     "(ALL x. p(a) & (p(x) --> (EX y. p(y) & r(x,y))) -->	\
   321     "(ALL x. p(a) & (p(x) --> (EX y. p(y) & r(x,y))) -->        \
   322 \            (EX z. EX w. p(z) & r(x,w) & r(w,z)))  <->		\
   322 \            (EX z. EX w. p(z) & r(x,w) & r(w,z)))  <->         \
   323 \    (ALL x. (~p(a) | p(x) | (EX z. EX w. p(z) & r(x,w) & r(w,z))) &	\
   323 \    (ALL x. (~p(a) | p(x) | (EX z. EX w. p(z) & r(x,w) & r(w,z))) &    \
   324 \            (~p(a) | ~(EX y. p(y) & r(x,y)) |				\
   324 \            (~p(a) | ~(EX y. p(y) & r(x,y)) |                          \
   325 \             (EX z. EX w. p(z) & r(x,w) & r(w,z))))";
   325 \             (EX z. EX w. p(z) & r(x,w) & r(w,z))))";
   326 by (fast_tac FOL_cs 1);
   326 by (fast_tac FOL_cs 1);
   327 result();
   327 result();
   328 
   328 
   329 writeln"Problem 39";
   329 writeln"Problem 39";
   336 \             ~(ALL x. EX y. ALL z. F(z,y) <-> ~ F(z,x))";
   336 \             ~(ALL x. EX y. ALL z. F(z,y) <-> ~ F(z,x))";
   337 by (fast_tac FOL_cs 1);
   337 by (fast_tac FOL_cs 1);
   338 result();
   338 result();
   339 
   339 
   340 writeln"Problem 41";
   340 writeln"Problem 41";
   341 goal FOL.thy "(ALL z. EX y. ALL x. f(x,y) <-> f(x,z) & ~ f(x,x))	\
   341 goal FOL.thy "(ALL z. EX y. ALL x. f(x,y) <-> f(x,z) & ~ f(x,x))        \
   342 \         --> ~ (EX z. ALL x. f(x,z))";
   342 \         --> ~ (EX z. ALL x. f(x,z))";
   343 by (fast_tac FOL_cs 1);
   343 by (fast_tac FOL_cs 1);
   344 result();
   344 result();
   345 
   345 
   346 writeln"Problem 42";
   346 writeln"Problem 42";
   347 goal FOL.thy "~ (EX y. ALL x. p(x,y) <-> ~ (EX z. p(x,z) & p(z,x)))";
   347 goal FOL.thy "~ (EX y. ALL x. p(x,y) <-> ~ (EX z. p(x,z) & p(z,x)))";
   348 by (deepen_tac FOL_cs 0 1);
   348 by (deepen_tac FOL_cs 0 1);
   349 result();
   349 result();
   350 
   350 
   351 writeln"Problem 43";
   351 writeln"Problem 43";
   352 goal FOL.thy "(ALL x. ALL y. q(x,y) <-> (ALL z. p(z,x) <-> p(z,y)))	\
   352 goal FOL.thy "(ALL x. ALL y. q(x,y) <-> (ALL z. p(z,x) <-> p(z,y)))     \
   353 \         --> (ALL x. ALL y. q(x,y) <-> q(y,x))";
   353 \         --> (ALL x. ALL y. q(x,y) <-> q(y,x))";
   354 by (mini_tac 1);
   354 by (mini_tac 1);
   355 by (deepen_tac FOL_cs 5 1);
   355 by (deepen_tac FOL_cs 5 1);
   356 (*Faster alternative proof!
   356 (*Faster alternative proof!
   357 	by (asm_simp_tac FOL_ss 1); by (fast_tac FOL_cs 1);	
   357         by (asm_simp_tac FOL_ss 1); by (fast_tac FOL_cs 1);     
   358 *)
   358 *)
   359 result();
   359 result();
   360 
   360 
   361 writeln"Problem 44";
   361 writeln"Problem 44";
   362 goal FOL.thy "(ALL x. f(x) -->						\
   362 goal FOL.thy "(ALL x. f(x) -->                                          \
   363 \             (EX y. g(y) & h(x,y) & (EX y. g(y) & ~ h(x,y))))  &   	\
   363 \             (EX y. g(y) & h(x,y) & (EX y. g(y) & ~ h(x,y))))  &       \
   364 \             (EX x. j(x) & (ALL y. g(y) --> h(x,y)))			\
   364 \             (EX x. j(x) & (ALL y. g(y) --> h(x,y)))                   \
   365 \             --> (EX x. j(x) & ~f(x))";
   365 \             --> (EX x. j(x) & ~f(x))";
   366 by (fast_tac FOL_cs 1);
   366 by (fast_tac FOL_cs 1);
   367 result();
   367 result();
   368 
   368 
   369 writeln"Problem 45";
   369 writeln"Problem 45";
   370 goal FOL.thy "(ALL x. f(x) & (ALL y. g(y) & h(x,y) --> j(x,y))	\
   370 goal FOL.thy "(ALL x. f(x) & (ALL y. g(y) & h(x,y) --> j(x,y))  \
   371 \                     --> (ALL y. g(y) & h(x,y) --> k(y))) &	\
   371 \                     --> (ALL y. g(y) & h(x,y) --> k(y))) &    \
   372 \     ~ (EX y. l(y) & k(y)) &					\
   372 \     ~ (EX y. l(y) & k(y)) &                                   \
   373 \     (EX x. f(x) & (ALL y. h(x,y) --> l(y))			\
   373 \     (EX x. f(x) & (ALL y. h(x,y) --> l(y))                    \
   374 \                 & (ALL y. g(y) & h(x,y) --> j(x,y)))		\
   374 \                 & (ALL y. g(y) & h(x,y) --> j(x,y)))          \
   375 \     --> (EX x. f(x) & ~ (EX y. g(y) & h(x,y)))";
   375 \     --> (EX x. f(x) & ~ (EX y. g(y) & h(x,y)))";
   376 by (best_tac FOL_cs 1); 
   376 by (best_tac FOL_cs 1); 
   377 result();
   377 result();
   378 
   378 
   379 
   379 
   386 
   386 
   387 writeln"Problem 49  NOT PROVED AUTOMATICALLY";
   387 writeln"Problem 49  NOT PROVED AUTOMATICALLY";
   388 (*Hard because it involves substitution for Vars;
   388 (*Hard because it involves substitution for Vars;
   389   the type constraint ensures that x,y,z have the same type as a,b,u. *)
   389   the type constraint ensures that x,y,z have the same type as a,b,u. *)
   390 goal FOL.thy "(EX x y::'a. ALL z. z=x | z=y) & P(a) & P(b) & a~=b \
   390 goal FOL.thy "(EX x y::'a. ALL z. z=x | z=y) & P(a) & P(b) & a~=b \
   391 \		--> (ALL u::'a.P(u))";
   391 \               --> (ALL u::'a.P(u))";
   392 by (safe_tac FOL_cs);
   392 by (safe_tac FOL_cs);
   393 by (res_inst_tac [("x","a")] allE 1);
   393 by (res_inst_tac [("x","a")] allE 1);
   394 ba 1;
   394 by (assume_tac 1);
   395 by (res_inst_tac [("x","b")] allE 1);
   395 by (res_inst_tac [("x","b")] allE 1);
   396 ba 1;
   396 by (assume_tac 1);
   397 by (fast_tac FOL_cs 1);
   397 by (fast_tac FOL_cs 1);
   398 result();
   398 result();
   399 
   399 
   400 writeln"Problem 50";  
   400 writeln"Problem 50";  
   401 (*What has this to do with equality?*)
   401 (*What has this to do with equality?*)
   435 \  (ALL x. EX y. ~hates(x,y)) & \
   435 \  (ALL x. EX y. ~hates(x,y)) & \
   436 \  ~ agatha=butler --> \
   436 \  ~ agatha=butler --> \
   437 \  killed(?who,agatha)";
   437 \  killed(?who,agatha)";
   438 by (safe_tac FOL_cs);
   438 by (safe_tac FOL_cs);
   439 by (dres_inst_tac [("x1","x")] (spec RS mp) 1);
   439 by (dres_inst_tac [("x1","x")] (spec RS mp) 1);
   440 ba 1;
   440 by (assume_tac 1);
   441 be (spec RS exE) 1;
   441 by (etac (spec RS exE) 1);
   442 by (REPEAT (etac allE 1));
   442 by (REPEAT (etac allE 1));
   443 by (fast_tac FOL_cs 1);
   443 by (fast_tac FOL_cs 1);
   444 result();
   444 result();
   445 ****)
   445 ****)
   446 
   446 
   488 by (fast_tac FOL_cs 1);
   488 by (fast_tac FOL_cs 1);
   489 result();
   489 result();
   490 
   490 
   491 writeln"Problem 62 as corrected in AAR newletter #31";
   491 writeln"Problem 62 as corrected in AAR newletter #31";
   492 goal FOL.thy
   492 goal FOL.thy
   493     "(ALL x. p(a) & (p(x) --> p(f(x))) --> p(f(f(x))))  <->	\
   493     "(ALL x. p(a) & (p(x) --> p(f(x))) --> p(f(f(x))))  <->     \
   494 \    (ALL x. (~p(a) | p(x) | p(f(f(x)))) &			\
   494 \    (ALL x. (~p(a) | p(x) | p(f(f(x)))) &                      \
   495 \            (~p(a) | ~p(f(x)) | p(f(f(x)))))";
   495 \            (~p(a) | ~p(f(x)) | p(f(f(x)))))";
   496 by (fast_tac FOL_cs 1);
   496 by (fast_tac FOL_cs 1);
   497 result();
   497 result();
   498 
   498 
   499 
   499