Theory Quantifiers_Int

(*  Title:      FOL/ex/Quantifiers_Int.thy
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
    Copyright   1991  University of Cambridge
*)

section ‹First-Order Logic: quantifier examples (intuitionistic version)›

theory Quantifiers_Int
imports IFOL
begin

lemma (x y. P(x,y))  (y x. P(x,y))
  by (tactic "IntPr.fast_tac context 1")

lemma (x y. P(x,y))  (y x. P(x,y))
  by (tactic "IntPr.fast_tac context 1")


― ‹Converse is false›
lemma (x. P(x))  (x. Q(x))  (x. P(x)  Q(x))
  by (tactic "IntPr.fast_tac context 1")

lemma (x. P  Q(x))  (P  (x. Q(x)))
  by (tactic "IntPr.fast_tac context 1")


lemma (x. P(x)  Q)  ((x. P(x))  Q)
  by (tactic "IntPr.fast_tac context 1")


text ‹Some harder ones›

lemma (x. P(x)  Q(x))  (x. P(x))  (x. Q(x))
  by (tactic "IntPr.fast_tac context 1")

― ‹Converse is false›
lemma (x. P(x)  Q(x))  (x. P(x))  (x. Q(x))
  by (tactic "IntPr.fast_tac context 1")


text ‹Basic test of quantifier reasoning›

― ‹TRUE›
lemma (y. x. Q(x,y))  (x. y. Q(x,y))
  by (tactic "IntPr.fast_tac context 1")

lemma (x. Q(x))  (x. Q(x))
  by (tactic "IntPr.fast_tac context 1")


text ‹The following should fail, as they are false!›

lemma (x. y. Q(x,y))  (y. x. Q(x,y))
  apply (tactic "IntPr.fast_tac context 1")?
  oops

lemma (x. Q(x))  (x. Q(x))
  apply (tactic "IntPr.fast_tac context 1")?
  oops

schematic_goal P(?a)  (x. P(x))
  apply (tactic "IntPr.fast_tac context 1")?
  oops

schematic_goal (P(?a)  (x. Q(x)))  (x. P(x)  Q(x))
  apply (tactic "IntPr.fast_tac context 1")?
  oops


text ‹Back to things that are provable \dots›

lemma (x. P(x)  Q(x))  (x. P(x))  (x. Q(x))
  by (tactic "IntPr.fast_tac context 1")

― ‹An example of why exI should be delayed as long as possible›
lemma (P  (x. Q(x)))  P  (x. Q(x))
  by (tactic "IntPr.fast_tac context 1")

schematic_goal (x. P(x)  Q(f(x)))  (x. Q(x)  R(g(x)))  P(d)  R(?a)
  by (tactic "IntPr.fast_tac context 1")

lemma (x. Q(x))  (x. Q(x))
  by (tactic "IntPr.fast_tac context 1")


text ‹Some slow ones›

― ‹Principia Mathematica *11.53›
lemma (x y. P(x)  Q(y))  ((x. P(x))  (y. Q(y)))
  by (tactic "IntPr.fast_tac context 1")

(*Principia Mathematica *11.55  *)
lemma (x y. P(x)  Q(x,y))  (x. P(x)  (y. Q(x,y)))
  by (tactic "IntPr.fast_tac context 1")

(*Principia Mathematica *11.61  *)
lemma (y. x. P(x)  Q(x,y))  (x. P(x)  (y. Q(x,y)))
  by (tactic "IntPr.fast_tac context 1")

end