theory Rules_Of_The_Predicate_Game imports Main begin section\The (predicate) rules of the game\ subsection\Universal quantification\ (*note meta- and object-level universal quantifiers*) thm allI thm allE lemma assumes "\x. P \ Q x" shows "P \ (\x. Q x)" using assms apply - apply(rule impI) apply(rule allI) apply(erule_tac x=x in allE) (*erule_tac: permits metavariable instantiation with bound variables*) apply(erule impE, assumption) apply assumption done lemma assumes "\x. P \ Q x" shows "P \ (\x. Q x)" using assms apply - apply(rule impI) apply(rule allI) apply(erule allE) (*don't actually need the instantiation above, though!*) apply(erule impE, assumption) apply assumption done lemma shows "(\x. P x \ Q x) \ (\x. P x) \ (\x. Q x)" apply(rule iffI) apply(rule conjI) apply(rule allI) apply(erule_tac x=x in allE) apply(erule conjE, assumption) apply(rule allI) apply(erule_tac x=x in allE) apply(erule conjE, assumption) apply(erule conjE) apply(rule allI) apply(erule_tac x=x in allE)+ apply(rule conjI; assumption) done lemma assumes "\x. P x \ Q x \ R" and "P y" shows "R" using assms apply - apply(erule allE[where x=y]) (*note "y" is not locally bound, here, so don't need erule_tac*) apply(erule impE) apply(rule disjI1, assumption) apply assumption done subsection\Existential quantification\ thm exI thm exE lemma shows "(\x. P x \ Q x) \ (\x. P x) \ (\x. Q x)" apply(rule iffI) apply(erule exE) apply(erule disjE) apply(rule disjI1) apply(rule exI) apply assumption apply(rule disjI2) apply(rule exI) apply assumption apply(erule disjE) apply(erule exE) apply(rule exI) apply(rule disjI1) apply assumption apply(erule exE) apply(rule exI) apply(rule disjI2) apply assumption done lemma shows "(\x. P \ Q x) \ P \ (\x. Q x)" apply(rule iffI) apply(erule exE) apply(erule disjE) apply(rule disjI1) apply assumption apply(rule disjI2) apply(rule exI) apply assumption apply(erule disjE) apply(rule exI) apply(rule disjI1) apply assumption apply(erule exE) apply(rule exI) apply(rule disjI2) apply assumption done subsection\Unique existence\ thm ex1I thm ex1E lemma assumes "\!x. P x" shows "\x. P x" using assms apply - apply(erule ex1E) apply(rule exI) apply assumption done end