Example (26)
ある論文で紹介されていた排中律によるトリック?です.
# g `!p:A->bool. ?x:A. (p x ==> !y. p y)`;; val it : goalstack = 1 subgoal (1 total) `!p. ?x. p x ==> (!y. p y)` # e(GEN_TAC);; val it : goalstack = 1 subgoal (1 total) `?x. p x ==> (!y. p y)` # e(ASM_CASES_TAC `!y:A. (p:A->bool) y`);; val it : goalstack = 2 subgoals (2 total) 0 [`~(!y. p y)`] `?x. p x ==> (!y. p y)` 0 [`!y. p y`] `?x. p x ==> (!y. p y)` # e(ASM_SIMP_TAC[]);; val it : goalstack = 1 subgoal (1 total) 0 [`~(!y. p y)`] `?x. p x ==> (!y. p y)` # e(POP_ASSUM MP_TAC THEN SIMP_TAC[NOT_FORALL_THM] THEN STRIP_TAC);; val it : goalstack = 1 subgoal (1 total) 0 [`~p y`] `?x. p x ==> (!y. p y)` # e(EXISTS_TAC`y:A`);; val it : goalstack = 1 subgoal (1 total) 0 [`~p y`] `p y ==> (!y. p y)` # e(ASM_SIMP_TAC[]);; val it : goalstack = No subgoals