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 |