Structure quantHeuristicsTheory
signature quantHeuristicsTheory =
sig
type thm = Thm.thm
(* Definitions *)
val GUESS_EXISTS_GAP_def : thm
val GUESS_EXISTS_POINT_def : thm
val GUESS_EXISTS_def : thm
val GUESS_FORALL_GAP_def : thm
val GUESS_FORALL_POINT_def : thm
val GUESS_FORALL_def : thm
val IS_REMOVABLE_QUANT_FUN_def : thm
val SIMPLE_GUESS_EXISTS_def : thm
val SIMPLE_GUESS_FORALL_def : thm
(* Theorems *)
val CONJ_NOT_OR_THM : thm
val CONS_EQ_REWRITE : thm
val DISJ_IMP_INTRO : thm
val EXISTS_NOT_FORALL_THM : thm
val FST_PAIR_EQ : thm
val FST_PAIR_EQ_SYM : thm
val GUESSES_NEG_DUALITY : thm
val GUESSES_NEG_REWRITE : thm
val GUESSES_UEXISTS_THM1 : thm
val GUESSES_UEXISTS_THM2 : thm
val GUESSES_UEXISTS_THM3 : thm
val GUESSES_UEXISTS_THM4 : thm
val GUESSES_WEAKEN_THM : thm
val GUESS_EXISTS_FORALL_REWRITES : thm
val GUESS_EXISTS_POINT_THM : thm
val GUESS_EXISTS_THM : thm
val GUESS_FORALL_POINT_THM : thm
val GUESS_FORALL_THM : thm
val GUESS_POINT_THM : thm
val GUESS_REWRITES : thm
val GUESS_RULES_BOOL : thm
val GUESS_RULES_COND : thm
val GUESS_RULES_CONJ : thm
val GUESS_RULES_CONSTANT_EXISTS : thm
val GUESS_RULES_CONSTANT_FORALL : thm
val GUESS_RULES_DISJ : thm
val GUESS_RULES_ELIM_UNIT : thm
val GUESS_RULES_EQUATION_EXISTS_GAP : thm
val GUESS_RULES_EQUATION_EXISTS_POINT : thm
val GUESS_RULES_EQUATION_FORALL_POINT : thm
val GUESS_RULES_EQUIV : thm
val GUESS_RULES_EXISTS : thm
val GUESS_RULES_EXISTS_UNIQUE : thm
val GUESS_RULES_EXISTS___NEW_FV : thm
val GUESS_RULES_EXISTS___NEW_FV_1 : thm
val GUESS_RULES_FORALL : thm
val GUESS_RULES_FORALL___NEW_FV : thm
val GUESS_RULES_FORALL___NEW_FV_1 : thm
val GUESS_RULES_IMP : thm
val GUESS_RULES_NEG : thm
val GUESS_RULES_ONE_CASE___EXISTS_GAP : thm
val GUESS_RULES_ONE_CASE___FORALL_GAP : thm
val GUESS_RULES_STRENGTHEN_EXISTS_POINT : thm
val GUESS_RULES_STRENGTHEN_FORALL_GAP : thm
val GUESS_RULES_TRIVIAL_EXISTS_POINT : thm
val GUESS_RULES_TRIVIAL_FORALL_POINT : thm
val GUESS_RULES_TWO_CASES : thm
val GUESS_RULES_WEAKEN_EXISTS_GAP : thm
val GUESS_RULES_WEAKEN_FORALL_POINT : thm
val HD_TL_EQ_1 : thm
val HD_TL_EQ_NIL_1_bothways : thm
val IMP_NEG_CONTRA : thm
val INL_NEQ_ELIM : thm
val INR_NEQ_ELIM : thm
val ISL_exists : thm
val ISR_exists : thm
val IS_REMOVABLE_QUANT_FUN___EXISTS_THM : thm
val IS_REMOVABLE_QUANT_FUN___FORALL_THM : thm
val IS_SOME_EQ_NOT_NONE : thm
val LEFT_IMP_AND_INTRO : thm
val LEFT_IMP_OR_INTRO : thm
val LENGTH_LE_NUM : thm
val LENGTH_LE_PLUS : thm
val LENGTH_NIL_SYM : thm
val LENGTH_TO_EXISTS_CONS : thm
val LIST_LENGTH_0 : thm
val LIST_LENGTH_1 : thm
val LIST_LENGTH_COMPARE_1 : thm
val LIST_LENGTH_COMPARE_SUC : thm
val MOVE_EXISTS_IMP_THM : thm
val PAIR_EQ_EXPAND : thm
val PAIR_EQ_SIMPLE_EXPAND : thm
val RIGHT_IMP_AND_INTRO : thm
val RIGHT_IMP_OR_INTRO : thm
val SIMPLE_GUESS_EXISTS_ALT_DEF : thm
val SIMPLE_GUESS_EXISTS_AND_1 : thm
val SIMPLE_GUESS_EXISTS_AND_2 : thm
val SIMPLE_GUESS_EXISTS_EQ_1 : thm
val SIMPLE_GUESS_EXISTS_EQ_2 : thm
val SIMPLE_GUESS_EXISTS_EQ_FUN : thm
val SIMPLE_GUESS_EXISTS_EQ_T : thm
val SIMPLE_GUESS_EXISTS_EXISTS : thm
val SIMPLE_GUESS_EXISTS_FORALL : thm
val SIMPLE_GUESS_EXISTS_NEG : thm
val SIMPLE_GUESS_EXISTS_THM : thm
val SIMPLE_GUESS_FORALL_ALT_DEF : thm
val SIMPLE_GUESS_FORALL_EXISTS : thm
val SIMPLE_GUESS_FORALL_FORALL : thm
val SIMPLE_GUESS_FORALL_IMP_1 : thm
val SIMPLE_GUESS_FORALL_IMP_2 : thm
val SIMPLE_GUESS_FORALL_NEG : thm
val SIMPLE_GUESS_FORALL_OR_1 : thm
val SIMPLE_GUESS_FORALL_OR_2 : thm
val SIMPLE_GUESS_FORALL_THM : thm
val SIMPLE_GUESS_SELECT_THM : thm
val SIMPLE_GUESS_SOME_THM : thm
val SIMPLE_GUESS_UEXISTS_THM : thm
val SND_PAIR_EQ : thm
val SND_PAIR_EQ_SYM : thm
val SOME_THE_EQ : thm
val SOME_THE_EQ_SYM : thm
val UNWIND_EXISTS_THM : thm
val quantHeuristics_grammars : type_grammar.grammar * term_grammar.grammar
(*
[ConseqConv] Parent theory of "quantHeuristics"
[list] Parent theory of "quantHeuristics"
[GUESS_EXISTS_GAP_def] Definition
⊢ ∀i P. GUESS_EXISTS_GAP i P ⇔ ∀v. P v ⇒ ∃fv. v = i fv
[GUESS_EXISTS_POINT_def] Definition
⊢ ∀i P. GUESS_EXISTS_POINT i P ⇔ ∀fv. P (i fv)
[GUESS_EXISTS_def] Definition
⊢ ∀i P. GUESS_EXISTS i P ⇔ ((∃v. P v) ⇔ ∃fv. P (i fv))
[GUESS_FORALL_GAP_def] Definition
⊢ ∀i P. GUESS_FORALL_GAP i P ⇔ ∀v. ¬P v ⇒ ∃fv. v = i fv
[GUESS_FORALL_POINT_def] Definition
⊢ ∀i P. GUESS_FORALL_POINT i P ⇔ ∀fv. ¬P (i fv)
[GUESS_FORALL_def] Definition
⊢ ∀i P. GUESS_FORALL i P ⇔ ((∀v. P v) ⇔ ∀fv. P (i fv))
[IS_REMOVABLE_QUANT_FUN_def] Definition
⊢ ∀f. IS_REMOVABLE_QUANT_FUN f ⇔ ∀v. ∃x. f x = v
[SIMPLE_GUESS_EXISTS_def] Definition
⊢ ∀v i P. SIMPLE_GUESS_EXISTS v i P ⇔ P ⇒ (v = i)
[SIMPLE_GUESS_FORALL_def] Definition
⊢ ∀v i P. SIMPLE_GUESS_FORALL v i P ⇔ ¬P ⇒ (v = i)
[CONJ_NOT_OR_THM] Theorem
⊢ ∀A B. A ∧ B ⇔ ¬(¬A ∨ ¬B)
[CONS_EQ_REWRITE] Theorem
⊢ ((x::xs = ys) ⇔ 1 ≤ LENGTH ys ∧ (x = HD ys) ∧ (xs = TL ys)) ∧
((ys = x::xs) ⇔ 1 ≤ LENGTH ys ∧ (HD ys = x) ∧ (TL ys = xs)) ∧
(0 < n ⇒ (n ≤ LENGTH (TL ys) ⇔ n + 1 ≤ LENGTH ys)) ∧
(n ≤ m ⇒ (n ≤ rhs ∧ m ≤ rhs ⇔ m ≤ rhs)) ∧
(([] = TL ys) ⇔ LENGTH ys ≤ 1) ∧ ((TL ys = []) ⇔ LENGTH ys ≤ 1) ∧
(LENGTH (TL ys) ≤ n ⇔ LENGTH ys ≤ n + 1) ∧
(m ≤ n ∧ n ≤ m ⇔ (m = n)) ∧
(m ≤ LENGTH ys ∧ (n = LENGTH ys) ⇔ m ≤ n ∧ (n = LENGTH ys))
[DISJ_IMP_INTRO] Theorem
⊢ (∀x. P x ∨ Q x) ⇒ (¬P y ⇒ Q y) ∧ (¬Q y ⇒ P y)
[EXISTS_NOT_FORALL_THM] Theorem
⊢ ∀P. (∃x. P x) ⇔ ¬∀x. ¬P x
[FST_PAIR_EQ] Theorem
⊢ ∀p p2. ((FST p,p2) = p) ⇔ (p2 = SND p)
[FST_PAIR_EQ_SYM] Theorem
⊢ ∀p p2. (p = (FST p,p2)) ⇔ (SND p = p2)
[GUESSES_NEG_DUALITY] Theorem
⊢ (GUESS_EXISTS i ($¬ ∘ P) ⇔ GUESS_FORALL i P) ∧
(GUESS_FORALL i ($¬ ∘ P) ⇔ GUESS_EXISTS i P) ∧
(GUESS_EXISTS_GAP i ($¬ ∘ P) ⇔ GUESS_FORALL_GAP i P) ∧
(GUESS_FORALL_GAP i ($¬ ∘ P) ⇔ GUESS_EXISTS_GAP i P) ∧
(GUESS_EXISTS_POINT i ($¬ ∘ P) ⇔ GUESS_FORALL_POINT i P) ∧
(GUESS_FORALL_POINT i ($¬ ∘ P) ⇔ GUESS_EXISTS_POINT i P)
[GUESSES_NEG_REWRITE] Theorem
⊢ (GUESS_EXISTS i (λx. ¬P x) ⇔ GUESS_FORALL i (λx. P x)) ∧
(GUESS_FORALL i (λx. ¬P x) ⇔ GUESS_EXISTS i (λx. P x)) ∧
(GUESS_EXISTS_GAP i (λx. ¬P x) ⇔ GUESS_FORALL_GAP i (λx. P x)) ∧
(GUESS_FORALL_GAP i (λx. ¬P x) ⇔ GUESS_EXISTS_GAP i (λx. P x)) ∧
(GUESS_EXISTS_POINT i (λx. ¬P x) ⇔ GUESS_FORALL_POINT i (λx. P x)) ∧
(GUESS_FORALL_POINT i (λx. ¬P x) ⇔ GUESS_EXISTS_POINT i (λx. P x))
[GUESSES_UEXISTS_THM1] Theorem
⊢ ∀i P. GUESS_EXISTS (λx. i) P ⇒ ($?! P ⇔ P i ∧ ∀v. P v ⇒ (v = i))
[GUESSES_UEXISTS_THM2] Theorem
⊢ ∀i P. GUESS_EXISTS_GAP (λx. i) P ⇒ ($?! P ⇔ P i)
[GUESSES_UEXISTS_THM3] Theorem
⊢ ∀i P. GUESS_EXISTS_POINT (λx. i) P ⇒ ($?! P ⇔ ∀v. P v ⇒ (v = i))
[GUESSES_UEXISTS_THM4] Theorem
⊢ ∀i P.
GUESS_EXISTS_POINT (λx. i) P ⇒
GUESS_EXISTS_GAP (λx. i) P ⇒
($?! P ⇔ T)
[GUESSES_WEAKEN_THM] Theorem
⊢ (GUESS_FORALL_GAP i P ⇒ GUESS_FORALL i P) ∧
(GUESS_FORALL_POINT i P ⇒ GUESS_FORALL i P) ∧
(GUESS_EXISTS_POINT i P ⇒ GUESS_EXISTS i P) ∧
(GUESS_EXISTS_GAP i P ⇒ GUESS_EXISTS i P)
[GUESS_EXISTS_FORALL_REWRITES] Theorem
⊢ (GUESS_EXISTS i P ⇔ ∀v. P v ⇒ ∃fv. P (i fv)) ∧
(GUESS_FORALL i P ⇔ ∀v. ¬P v ⇒ ∃fv. ¬P (i fv))
[GUESS_EXISTS_POINT_THM] Theorem
⊢ ∀i P. GUESS_EXISTS_POINT i P ⇒ ($? P ⇔ T)
[GUESS_EXISTS_THM] Theorem
⊢ ∀i P. GUESS_EXISTS i P ⇒ ($? P ⇔ ∃fv. P (i fv))
[GUESS_FORALL_POINT_THM] Theorem
⊢ ∀i P. GUESS_FORALL_POINT i P ⇒ ($! P ⇔ F)
[GUESS_FORALL_THM] Theorem
⊢ ∀i P. GUESS_FORALL i P ⇒ ($! P ⇔ ∀fv. P (i fv))
[GUESS_POINT_THM] Theorem
⊢ (GUESS_EXISTS_POINT i P ⇒ ((∃v. P v) ⇔ T)) ∧
(GUESS_FORALL_POINT i P ⇒ ((∀v. P v) ⇔ F))
[GUESS_REWRITES] Theorem
⊢ ((GUESS_EXISTS i P ⇔ ∀v. P v ⇒ ∃fv. P (i fv)) ∧
(GUESS_FORALL i P ⇔ ∀v. ¬P v ⇒ ∃fv. ¬P (i fv))) ∧
(∀i P. GUESS_EXISTS_POINT i P ⇔ ∀fv. P (i fv)) ∧
(∀i P. GUESS_FORALL_POINT i P ⇔ ∀fv. ¬P (i fv)) ∧
(∀i P. GUESS_EXISTS_GAP i P ⇔ ∀v. P v ⇒ ∃fv. v = i fv) ∧
∀i P. GUESS_FORALL_GAP i P ⇔ ∀v. ¬P v ⇒ ∃fv. v = i fv
[GUESS_RULES_BOOL] Theorem
⊢ GUESS_EXISTS_POINT (λARB. T) (λx. x) ∧
GUESS_FORALL_POINT (λARB. F) (λx. x) ∧
GUESS_EXISTS_GAP (λARB. T) (λx. x) ∧
GUESS_FORALL_GAP (λARB. F) (λx. x)
[GUESS_RULES_COND] Theorem
⊢ (GUESS_FORALL_POINT i (λx. P x) ∧ GUESS_FORALL_POINT i (λx. Q x) ⇒
GUESS_FORALL_POINT i (λx. if b x then P x else Q x)) ∧
(GUESS_EXISTS_POINT i (λx. P x) ∧ GUESS_EXISTS_POINT i (λx. Q x) ⇒
GUESS_EXISTS_POINT i (λx. if b x then P x else Q x)) ∧
(GUESS_EXISTS i (λx. P x) ∧ GUESS_EXISTS i (λx. Q x) ⇒
GUESS_EXISTS i (λx. if bc then P x else Q x)) ∧
(GUESS_FORALL i (λx. P x) ∧ GUESS_FORALL i (λx. Q x) ⇒
GUESS_FORALL i (λx. if bc then P x else Q x)) ∧
(GUESS_EXISTS_GAP i (λx. P x) ∧ GUESS_EXISTS_GAP i (λx. Q x) ⇒
GUESS_EXISTS_GAP i (λx. if b x then P x else Q x)) ∧
(GUESS_FORALL_GAP i (λx. P x) ∧ GUESS_FORALL_GAP i (λx. Q x) ⇒
GUESS_FORALL_GAP i (λx. if b x then P x else Q x)) ∧
(GUESS_FORALL_POINT i (λx. b x) ∧ GUESS_FORALL_POINT i (λx. Q x) ⇒
GUESS_FORALL_POINT i (λx. if b x then P x else Q x)) ∧
(GUESS_FORALL_POINT i (λx. b x) ∧ GUESS_EXISTS_POINT i (λx. Q x) ⇒
GUESS_EXISTS_POINT i (λx. if b x then P x else Q x)) ∧
(GUESS_EXISTS_POINT i (λx. b x) ∧ GUESS_FORALL_POINT i (λx. P x) ⇒
GUESS_FORALL_POINT i (λx. if b x then P x else Q x)) ∧
(GUESS_EXISTS_POINT i (λx. b x) ∧ GUESS_EXISTS_POINT i (λx. P x) ⇒
GUESS_EXISTS_POINT i (λx. if b x then P x else Q x)) ∧
(GUESS_FORALL_GAP i (λx. b x) ∧ GUESS_EXISTS_GAP i (λx. P x) ⇒
GUESS_EXISTS_GAP i (λx. if b x then P x else Q x)) ∧
(GUESS_EXISTS_GAP i (λx. b x) ∧ GUESS_EXISTS_GAP i (λx. Q x) ⇒
GUESS_EXISTS_GAP i (λx. if b x then P x else Q x)) ∧
(GUESS_EXISTS_GAP i (λx. b x) ∧ GUESS_FORALL_GAP i (λx. Q x) ⇒
GUESS_FORALL_GAP i (λx. if b x then P x else Q x)) ∧
(GUESS_FORALL_GAP i (λx. b x) ∧ GUESS_FORALL_GAP i (λx. P x) ⇒
GUESS_FORALL_GAP i (λx. if b x then P x else Q x))
[GUESS_RULES_CONJ] Theorem
⊢ (GUESS_FORALL_POINT i (λx. P x) ⇒
GUESS_FORALL_POINT i (λx. P x ∧ Q x)) ∧
(GUESS_FORALL_POINT i (λx. Q x) ⇒
GUESS_FORALL_POINT i (λx. P x ∧ Q x)) ∧
(GUESS_FORALL i (λx. P x) ∧ GUESS_FORALL i (λx. Q x) ⇒
GUESS_FORALL i (λx. P x ∧ Q x)) ∧
(GUESS_FORALL_GAP i (λx. P x) ∧ GUESS_FORALL_GAP i (λx. Q x) ⇒
GUESS_FORALL_GAP i (λx. P x ∧ Q x)) ∧
(GUESS_EXISTS (λxxx. iK) (λx. P x) ∧
GUESS_EXISTS (λxxx. iK) (λx. Q x) ⇒
GUESS_EXISTS (λxxx. iK) (λx. P x ∧ Q x)) ∧
(GUESS_EXISTS i (λx. P x) ⇒ GUESS_EXISTS i (λx. P x ∧ q)) ∧
(GUESS_EXISTS i (λx. Q x) ⇒ GUESS_EXISTS i (λx. p ∧ Q x)) ∧
(GUESS_EXISTS_POINT i (λx. P x) ∧ GUESS_EXISTS_POINT i (λx. Q x) ⇒
GUESS_EXISTS_POINT i (λx. P x ∧ Q x)) ∧
(GUESS_EXISTS_GAP i (λx. P x) ⇒ GUESS_EXISTS_GAP i (λx. P x ∧ Q x)) ∧
(GUESS_EXISTS_GAP i (λx. Q x) ⇒ GUESS_EXISTS_GAP i (λx. P x ∧ Q x))
[GUESS_RULES_CONSTANT_EXISTS] Theorem
⊢ GUESS_EXISTS i (λx. p) ⇔ T
[GUESS_RULES_CONSTANT_FORALL] Theorem
⊢ GUESS_FORALL i (λx. p) ⇔ T
[GUESS_RULES_DISJ] Theorem
⊢ (GUESS_EXISTS_POINT i (λx. P x) ⇒
GUESS_EXISTS_POINT i (λx. P x ∨ Q x)) ∧
(GUESS_EXISTS_POINT i (λx. Q x) ⇒
GUESS_EXISTS_POINT i (λx. P x ∨ Q x)) ∧
(GUESS_EXISTS i (λx. P x) ∧ GUESS_EXISTS i (λx. Q x) ⇒
GUESS_EXISTS i (λx. P x ∨ Q x)) ∧
(GUESS_EXISTS_GAP i (λx. P x) ∧ GUESS_EXISTS_GAP i (λx. Q x) ⇒
GUESS_EXISTS_GAP i (λx. P x ∨ Q x)) ∧
(GUESS_FORALL (λxxx. iK) (λx. P x) ∧
GUESS_FORALL (λxxx. iK) (λx. Q x) ⇒
GUESS_FORALL (λxxx. iK) (λx. P x ∨ Q x)) ∧
(GUESS_FORALL i (λx. P x) ⇒ GUESS_FORALL i (λx. P x ∨ q)) ∧
(GUESS_FORALL i (λx. Q x) ⇒ GUESS_FORALL i (λx. p ∨ Q x)) ∧
(GUESS_FORALL_POINT i (λx. P x) ∧ GUESS_FORALL_POINT i (λx. Q x) ⇒
GUESS_FORALL_POINT i (λx. P x ∨ Q x)) ∧
(GUESS_FORALL_GAP i (λx. P x) ⇒ GUESS_FORALL_GAP i (λx. P x ∨ Q x)) ∧
(GUESS_FORALL_GAP i (λx. Q x) ⇒ GUESS_FORALL_GAP i (λx. P x ∨ Q x))
[GUESS_RULES_ELIM_UNIT] Theorem
⊢ (GUESS_FORALL_POINT i vt ⇔ GUESS_FORALL_POINT (λx. i (x,())) vt) ∧
(GUESS_EXISTS_POINT i vt ⇔ GUESS_EXISTS_POINT (λx. i (x,())) vt) ∧
(GUESS_EXISTS i vt ⇔ GUESS_EXISTS (λx. i (x,())) vt) ∧
(GUESS_FORALL i vt ⇔ GUESS_FORALL (λx. i (x,())) vt) ∧
(GUESS_EXISTS_GAP i vt ⇔ GUESS_EXISTS_GAP (λx. i (x,())) vt) ∧
(GUESS_FORALL_GAP i vt ⇔ GUESS_FORALL_GAP (λx. i (x,())) vt)
[GUESS_RULES_EQUATION_EXISTS_GAP] Theorem
⊢ ∀i. GUESS_EXISTS_GAP (λxxx. i) (λx. x = i)
[GUESS_RULES_EQUATION_EXISTS_POINT] Theorem
⊢ ∀i P Q. (P i = Q i) ⇒ GUESS_EXISTS_POINT (λxxx. i) (λx. P x = Q x)
[GUESS_RULES_EQUATION_FORALL_POINT] Theorem
⊢ ∀i P Q.
(∀fv. P (i fv) ≠ Q (i fv)) ⇒ GUESS_FORALL_POINT i (λx. P x = Q x)
[GUESS_RULES_EQUIV] Theorem
⊢ (GUESS_EXISTS_POINT i (λx. P x) ∧ GUESS_EXISTS_POINT i (λx. Q x) ⇒
GUESS_EXISTS_POINT i (λx. P x ⇔ Q x)) ∧
(GUESS_FORALL_POINT i (λx. P x) ∧ GUESS_FORALL_POINT i (λx. Q x) ⇒
GUESS_EXISTS_POINT i (λx. P x ⇔ Q x)) ∧
(GUESS_EXISTS_POINT i (λx. P x) ∧ GUESS_FORALL_POINT i (λx. Q x) ⇒
GUESS_FORALL_POINT i (λx. P x ⇔ Q x)) ∧
(GUESS_FORALL_POINT i (λx. P x) ∧ GUESS_EXISTS_POINT i (λx. Q x) ⇒
GUESS_FORALL_POINT i (λx. P x ⇔ Q x)) ∧
(GUESS_FORALL_GAP i (λx. P1 x) ∧ GUESS_FORALL_GAP i (λx. P2 x) ⇒
GUESS_FORALL_GAP i (λx. P1 x ⇔ P2 x)) ∧
(GUESS_EXISTS_GAP i (λx. P1 x) ∧ GUESS_EXISTS_GAP i (λx. P2 x) ⇒
GUESS_FORALL_GAP i (λx. P1 x ⇔ P2 x)) ∧
(GUESS_EXISTS_GAP i (λx. P1 x) ∧ GUESS_FORALL_GAP i (λx. P2 x) ⇒
GUESS_EXISTS_GAP i (λx. P1 x ⇔ P2 x)) ∧
(GUESS_FORALL_GAP i (λx. P1 x) ∧ GUESS_EXISTS_GAP i (λx. P2 x) ⇒
GUESS_EXISTS_GAP i (λx. P1 x ⇔ P2 x))
[GUESS_RULES_EXISTS] Theorem
⊢ ((∀y. GUESS_EXISTS_POINT i (λx. P x y)) ⇒
GUESS_EXISTS_POINT i (λx. ∃y. P x y)) ∧
((∀y. GUESS_EXISTS i (λx. P x y)) ⇒ GUESS_EXISTS i (λx. ∃y. P x y)) ∧
((∀y. GUESS_EXISTS_GAP i (λx. P x y)) ⇒
GUESS_EXISTS_GAP i (λx. ∃y. P x y)) ∧
((∀y. GUESS_FORALL_POINT i (λx. P x y)) ⇒
GUESS_FORALL_POINT i (λx. ∃y. P x y)) ∧
((∀y. GUESS_FORALL (λxxx. iK) (λx. P x y)) ⇒
GUESS_FORALL (λxxx. iK) (λx. ∃y. P x y)) ∧
((∀y. GUESS_FORALL_GAP i (λx. P x y)) ⇒
GUESS_FORALL_GAP i (λx. ∃y. P x y))
[GUESS_RULES_EXISTS_UNIQUE] Theorem
⊢ ((∀y. GUESS_FORALL_POINT i (λx. P x y)) ⇒
GUESS_FORALL_POINT i (λx. ∃!y. P x y)) ∧
((∀y. GUESS_EXISTS_GAP i (λx. P x y)) ⇒
GUESS_EXISTS_GAP i (λx. ∃!y. P x y))
[GUESS_RULES_EXISTS___NEW_FV] Theorem
⊢ ((∀y. GUESS_EXISTS_POINT (iy y) (λx. P x y)) ⇒
GUESS_EXISTS_POINT (λfv. iy (FST fv) (SND fv)) (λx. ∃y. P x y)) ∧
((∀y. GUESS_EXISTS (iy y) (λx. P x y)) ⇒
GUESS_EXISTS (λfv. iy (FST fv) (SND fv)) (λx. ∃y. P x y)) ∧
((∀y. GUESS_EXISTS_GAP (iy y) (λx. P x y)) ⇒
GUESS_EXISTS_GAP (λfv. iy (FST fv) (SND fv)) (λx. ∃y. P x y)) ∧
((∀y. GUESS_FORALL_GAP (iy y) (λx. P x y)) ⇒
GUESS_FORALL_GAP (λfv. iy (FST fv) (SND fv)) (λx. ∃y. P x y))
[GUESS_RULES_EXISTS___NEW_FV_1] Theorem
⊢ ((∀y. GUESS_EXISTS_POINT (λxxx. i y) (λx. P x y)) ⇒
GUESS_EXISTS_POINT i (λx. ∃y. P x y)) ∧
((∀y. GUESS_EXISTS (λxxx. i y) (λx. P x y)) ⇒
GUESS_EXISTS i (λx. ∃y. P x y)) ∧
((∀y. GUESS_EXISTS_GAP (λxxx. i y) (λx. P x y)) ⇒
GUESS_EXISTS_GAP i (λx. ∃y. P x y)) ∧
((∀y. GUESS_FORALL_GAP (λxxx. i y) (λx. P x y)) ⇒
GUESS_FORALL_GAP i (λx. ∃y. P x y))
[GUESS_RULES_FORALL] Theorem
⊢ ((∀y. GUESS_FORALL_POINT i (λx. P x y)) ⇒
GUESS_FORALL_POINT i (λx. ∀y. P x y)) ∧
((∀y. GUESS_FORALL i (λx. P x y)) ⇒ GUESS_FORALL i (λx. ∀y. P x y)) ∧
((∀y. GUESS_FORALL_GAP i (λx. P x y)) ⇒
GUESS_FORALL_GAP i (λx. ∀y. P x y)) ∧
((∀y. GUESS_EXISTS_POINT i (λx. P x y)) ⇒
GUESS_EXISTS_POINT i (λx. ∀y. P x y)) ∧
((∀y. GUESS_EXISTS (λxxx. iK) (λx. P x y)) ⇒
GUESS_EXISTS (λxxx. iK) (λx. ∀y. P x y)) ∧
((∀y. GUESS_EXISTS_GAP i (λx. P x y)) ⇒
GUESS_EXISTS_GAP i (λx. ∀y. P x y))
[GUESS_RULES_FORALL___NEW_FV] Theorem
⊢ ((∀y. GUESS_FORALL_POINT (iy y) (λx. P x y)) ⇒
GUESS_FORALL_POINT (λfv. iy (FST fv) (SND fv)) (λx. ∀y. P x y)) ∧
((∀y. GUESS_FORALL (iy y) (λx. P x y)) ⇒
GUESS_FORALL (λfv. iy (FST fv) (SND fv)) (λx. ∀y. P x y)) ∧
((∀y. GUESS_FORALL_GAP (iy y) (λx. P x y)) ⇒
GUESS_FORALL_GAP (λfv. iy (FST fv) (SND fv)) (λx. ∀y. P x y)) ∧
((∀y. GUESS_EXISTS_GAP (iy y) (λx. P x y)) ⇒
GUESS_EXISTS_GAP (λfv. iy (FST fv) (SND fv)) (λx. ∀y. P x y))
[GUESS_RULES_FORALL___NEW_FV_1] Theorem
⊢ ((∀y. GUESS_FORALL_POINT (λxxx. i y) (λx. P x y)) ⇒
GUESS_FORALL_POINT i (λx. ∀y. P x y)) ∧
((∀y. GUESS_FORALL (λxxx. i y) (λx. P x y)) ⇒
GUESS_FORALL i (λx. ∀y. P x y)) ∧
((∀y. GUESS_FORALL_GAP (λxxx. i y) (λx. P x y)) ⇒
GUESS_FORALL_GAP i (λx. ∀y. P x y)) ∧
((∀y. GUESS_EXISTS_GAP (λxxx. i y) (λx. P x y)) ⇒
GUESS_EXISTS_GAP i (λx. ∀y. P x y))
[GUESS_RULES_IMP] Theorem
⊢ (GUESS_FORALL_POINT i (λx. P x) ⇒
GUESS_EXISTS_POINT i (λx. P x ⇒ Q x)) ∧
(GUESS_EXISTS_POINT i (λx. Q x) ⇒
GUESS_EXISTS_POINT i (λx. P x ⇒ Q x)) ∧
(GUESS_FORALL i (λx. P x) ∧ GUESS_EXISTS i (λx. Q x) ⇒
GUESS_EXISTS i (λx. P x ⇒ Q x)) ∧
(GUESS_FORALL_GAP i (λx. P x) ∧ GUESS_EXISTS_GAP i (λx. Q x) ⇒
GUESS_EXISTS_GAP i (λx. P x ⇒ Q x)) ∧
(GUESS_EXISTS (λxxx. iK) (λx. P x) ∧
GUESS_FORALL (λxxx. iK) (λx. Q x) ⇒
GUESS_FORALL (λxxx. iK) (λx. P x ⇒ Q x)) ∧
(GUESS_EXISTS i (λx. P x) ⇒ GUESS_FORALL i (λx. P x ⇒ q)) ∧
(GUESS_FORALL i (λx. Q x) ⇒ GUESS_FORALL i (λx. p ⇒ Q x)) ∧
(GUESS_EXISTS_POINT i (λx. P x) ∧ GUESS_FORALL_POINT i (λx. Q x) ⇒
GUESS_FORALL_POINT i (λx. P x ⇒ Q x)) ∧
(GUESS_EXISTS_GAP i (λx. P x) ⇒ GUESS_FORALL_GAP i (λx. P x ⇒ Q x)) ∧
(GUESS_FORALL_GAP i (λx. Q x) ⇒ GUESS_FORALL_GAP i (λx. P x ⇒ Q x))
[GUESS_RULES_NEG] Theorem
⊢ (GUESS_EXISTS i (λx. P x) ⇒ GUESS_FORALL i (λx. ¬P x)) ∧
(GUESS_EXISTS_GAP i (λx. P x) ⇒ GUESS_FORALL_GAP i (λx. ¬P x)) ∧
(GUESS_EXISTS_POINT i (λx. P x) ⇒ GUESS_FORALL_POINT i (λx. ¬P x)) ∧
(GUESS_FORALL i (λx. P x) ⇒ GUESS_EXISTS i (λx. ¬P x)) ∧
(GUESS_FORALL_GAP i (λx. P x) ⇒ GUESS_EXISTS_GAP i (λx. ¬P x)) ∧
(GUESS_FORALL_POINT i (λx. P x) ⇒ GUESS_EXISTS_POINT i (λx. ¬P x))
[GUESS_RULES_ONE_CASE___EXISTS_GAP] Theorem
⊢ ∀P Q. (∀x. ∃fv. x = Q fv) ⇒ GUESS_EXISTS_GAP Q P
[GUESS_RULES_ONE_CASE___FORALL_GAP] Theorem
⊢ ∀P Q. (∀x. ∃fv. x = Q fv) ⇒ GUESS_FORALL_GAP Q P
[GUESS_RULES_STRENGTHEN_EXISTS_POINT] Theorem
⊢ ∀P Q.
(∀x. P x ⇒ Q x) ⇒ GUESS_EXISTS_POINT i P ⇒ GUESS_EXISTS_POINT i Q
[GUESS_RULES_STRENGTHEN_FORALL_GAP] Theorem
⊢ ∀P Q. (∀x. P x ⇒ Q x) ⇒ GUESS_FORALL_GAP i P ⇒ GUESS_FORALL_GAP i Q
[GUESS_RULES_TRIVIAL_EXISTS_POINT] Theorem
⊢ ∀i P. P i ⇒ GUESS_EXISTS_POINT (λxxx. i) P
[GUESS_RULES_TRIVIAL_FORALL_POINT] Theorem
⊢ ∀i P. ¬P i ⇒ GUESS_FORALL_POINT (λxxx. i) P
[GUESS_RULES_TWO_CASES] Theorem
⊢ ∀y Q.
(∀x. (x = y) ∨ ∃fv. x = Q fv) ⇒ GUESS_FORALL_GAP Q (λx. x = y)
[GUESS_RULES_WEAKEN_EXISTS_GAP] Theorem
⊢ ∀P Q. (∀x. Q x ⇒ P x) ⇒ GUESS_EXISTS_GAP i P ⇒ GUESS_EXISTS_GAP i Q
[GUESS_RULES_WEAKEN_FORALL_POINT] Theorem
⊢ ∀P Q.
(∀x. Q x ⇒ P x) ⇒ GUESS_FORALL_POINT i P ⇒ GUESS_FORALL_POINT i Q
[HD_TL_EQ_1] Theorem
⊢ ∀l. (HD l::TL l = l) ⇔ l ≠ []
[HD_TL_EQ_NIL_1_bothways] Theorem
⊢ (∀l. ([HD l] = l) ⇔ (LENGTH l = 1)) ∧
∀l. (l = [HD l]) ⇔ (LENGTH l = 1)
[IMP_NEG_CONTRA] Theorem
⊢ ∀P i x. ¬P i ⇒ P x ⇒ x ≠ i
[INL_NEQ_ELIM] Theorem
⊢ ((∀l. x ≠ INL l) ⇔ ISR x) ∧ ((∀l. INL l ≠ x) ⇔ ISR x)
[INR_NEQ_ELIM] Theorem
⊢ ((∀r. x ≠ INR r) ⇔ ISL x) ∧ ((∀r. INR r ≠ x) ⇔ ISL x)
[ISL_exists] Theorem
⊢ ISL x ⇔ ∃l. x = INL l
[ISR_exists] Theorem
⊢ ISR x ⇔ ∃r. x = INR r
[IS_REMOVABLE_QUANT_FUN___EXISTS_THM] Theorem
⊢ ∀f P. IS_REMOVABLE_QUANT_FUN f ⇒ ((∃x. P (f x)) ⇔ ∃x'. P x')
[IS_REMOVABLE_QUANT_FUN___FORALL_THM] Theorem
⊢ ∀f P. IS_REMOVABLE_QUANT_FUN f ⇒ ((∀x. P (f x)) ⇔ ∀x'. P x')
[IS_SOME_EQ_NOT_NONE] Theorem
⊢ ∀x. IS_SOME x ⇔ x ≠ NONE
[LEFT_IMP_AND_INTRO] Theorem
⊢ ∀x t1 t2. (t1 ⇒ t2) ⇒ x ∧ t1 ⇒ x ∧ t2
[LEFT_IMP_OR_INTRO] Theorem
⊢ ∀x t1 t2. (t1 ⇒ t2) ⇒ x ∨ t1 ⇒ x ∨ t2
[LENGTH_LE_NUM] Theorem
⊢ n ≤ LENGTH l ⇔ ∃l1 l2. (LENGTH l1 = n) ∧ (l = l1 ⧺ l2)
[LENGTH_LE_PLUS] Theorem
⊢ n + m ≤ LENGTH l ⇔
∃l1 l2. (LENGTH l1 = n) ∧ m ≤ LENGTH l2 ∧ (l = l1 ⧺ l2)
[LENGTH_NIL_SYM] Theorem
⊢ (0 = LENGTH l) ⇔ (l = [])
[LENGTH_TO_EXISTS_CONS] Theorem
⊢ (n < LENGTH xs ⇔ ∃y ys. (xs = y::ys) ∧ n ≤ LENGTH ys) ∧
(LENGTH xs > n ⇔ ∃y ys. (xs = y::ys) ∧ n ≤ LENGTH ys) ∧
(0 < n ⇒
((LENGTH xs = n) ⇔ ∃y ys. (xs = y::ys) ∧ (LENGTH ys = PRE n))) ∧
(0 < n ⇒
((n = LENGTH xs) ⇔ ∃y ys. (xs = y::ys) ∧ (LENGTH ys = PRE n))) ∧
(0 < n ⇒ (n ≤ LENGTH xs ⇔ ∃y ys. (xs = y::ys) ∧ PRE n ≤ LENGTH ys)) ∧
(0 < n ⇒ (LENGTH xs ≥ n ⇔ ∃y ys. (xs = y::ys) ∧ PRE n ≤ LENGTH ys)) ∧
(0 < x ⇒ (PRE (x + y) = PRE x + y)) ∧
(0 < y ⇒ (PRE (x + y) = x + PRE y))
[LIST_LENGTH_0] Theorem
⊢ ((LENGTH l = 0) ⇔ (l = [])) ∧ ((0 = LENGTH l) ⇔ (l = [])) ∧
(LENGTH l < 1 ⇔ (l = [])) ∧ (1 > LENGTH l ⇔ (l = [])) ∧
(0 ≥ LENGTH l ⇔ (l = [])) ∧ (LENGTH l ≤ 0 ⇔ (l = []))
[LIST_LENGTH_1] Theorem
⊢ ((LENGTH l = 1) ⇔ ∃e1. l = [e1]) ∧
((1 = LENGTH l) ⇔ ∃e1. l = [e1]) ∧
(0 < LENGTH l ⇔ ∃l' e1. l = e1::l') ∧
(LENGTH l > 0 ⇔ ∃l' e1. l = e1::l') ∧
(1 ≤ LENGTH l ⇔ ∃l' e1. l = e1::l') ∧
(LENGTH l ≥ 1 ⇔ ∃l' e1. l = e1::l') ∧
(1 + x ≤ LENGTH l ⇔ ∃l' e1. x ≤ LENGTH l' ∧ (l = e1::l')) ∧
(LENGTH l ≥ 1 + x ⇔ ∃l' e1. x ≤ LENGTH l' ∧ (l = e1::l')) ∧
(x + 1 ≤ LENGTH l ⇔ ∃l' e1. x ≤ LENGTH l' ∧ (l = e1::l')) ∧
(LENGTH l ≥ x + 1 ⇔ ∃l' e1. x ≤ LENGTH l' ∧ (l = e1::l')) ∧
((LENGTH l = 1 + x) ⇔ ∃l' e1. (LENGTH l' = x) ∧ (l = e1::l')) ∧
((1 + x = LENGTH l) ⇔ ∃l' e1. (LENGTH l' = x) ∧ (l = e1::l')) ∧
((LENGTH l = x + 1) ⇔ ∃l' e1. (LENGTH l' = x) ∧ (l = e1::l')) ∧
((x + 1 = LENGTH l) ⇔ ∃l' e1. (LENGTH l' = x) ∧ (l = e1::l')) ∧
((LENGTH l = 0) ⇔ (l = [])) ∧ ((0 = LENGTH l) ⇔ (l = [])) ∧
(LENGTH l < 1 ⇔ (l = [])) ∧ (1 > LENGTH l ⇔ (l = [])) ∧
(0 ≥ LENGTH l ⇔ (l = [])) ∧ (LENGTH l ≤ 0 ⇔ (l = []))
[LIST_LENGTH_COMPARE_1] Theorem
⊢ (LENGTH l < 1 ⇔ (l = [])) ∧ (1 > LENGTH l ⇔ (l = [])) ∧
(0 ≥ LENGTH l ⇔ (l = [])) ∧ (LENGTH l ≤ 0 ⇔ (l = []))
[LIST_LENGTH_COMPARE_SUC] Theorem
⊢ (SUC x ≤ LENGTH l ⇔ ∃l' e1. x ≤ LENGTH l' ∧ (l = e1::l')) ∧
(LENGTH l ≥ SUC x ⇔ ∃l' e1. x ≤ LENGTH l' ∧ (l = e1::l')) ∧
((LENGTH l = SUC x) ⇔ ∃l' e1. (LENGTH l' = x) ∧ (l = e1::l')) ∧
((SUC x = LENGTH l) ⇔ ∃l' e1. (LENGTH l' = x) ∧ (l = e1::l'))
[MOVE_EXISTS_IMP_THM] Theorem
⊢ (∃x. (∀y. ¬P x y ⇒ R y) ⇒ Q x) ⇔ (∀y. ¬(∀x. P x y) ⇒ R y) ⇒ ∃x. Q x
[PAIR_EQ_EXPAND] Theorem
⊢ (((x,y) = X) ⇔ (x = FST X) ∧ (y = SND X)) ∧
((X = (x,y)) ⇔ (FST X = x) ∧ (SND X = y))
[PAIR_EQ_SIMPLE_EXPAND] Theorem
⊢ (((x,y) = (x,y')) ⇔ (y = y')) ∧ (((y,x) = (y',x)) ⇔ (y = y')) ∧
(((FST X,y) = X) ⇔ (y = SND X)) ∧ (((x,SND X) = X) ⇔ (x = FST X)) ∧
((X = (FST X,y)) ⇔ (SND X = y)) ∧ ((X = (x,SND X)) ⇔ (FST X = x))
[RIGHT_IMP_AND_INTRO] Theorem
⊢ ∀x t1 t2. (t1 ⇒ t2) ⇒ t1 ∧ x ⇒ t2 ∧ x
[RIGHT_IMP_OR_INTRO] Theorem
⊢ ∀x t1 t2. (t1 ⇒ t2) ⇒ t1 ∨ x ⇒ t2 ∨ x
[SIMPLE_GUESS_EXISTS_ALT_DEF] Theorem
⊢ (∀v. SIMPLE_GUESS_EXISTS v i (P v)) ⇔
GUESS_EXISTS_GAP (K i) (λv. P v)
[SIMPLE_GUESS_EXISTS_AND_1] Theorem
⊢ ∀v i P1 P2.
SIMPLE_GUESS_EXISTS v i P1 ⇒ SIMPLE_GUESS_EXISTS v i (P1 ∧ P2)
[SIMPLE_GUESS_EXISTS_AND_2] Theorem
⊢ ∀v i P1 P2.
SIMPLE_GUESS_EXISTS v i P2 ⇒ SIMPLE_GUESS_EXISTS v i (P1 ∧ P2)
[SIMPLE_GUESS_EXISTS_EQ_1] Theorem
⊢ ∀v i. SIMPLE_GUESS_EXISTS v i (v = i)
[SIMPLE_GUESS_EXISTS_EQ_2] Theorem
⊢ ∀v i. SIMPLE_GUESS_EXISTS v i (i = v)
[SIMPLE_GUESS_EXISTS_EQ_FUN] Theorem
⊢ ∀v i t1 t2 f.
SIMPLE_GUESS_EXISTS v i (f t1 = f t2) ⇒
SIMPLE_GUESS_EXISTS v i (t1 = t2)
[SIMPLE_GUESS_EXISTS_EQ_T] Theorem
⊢ ∀v. SIMPLE_GUESS_EXISTS v T v
[SIMPLE_GUESS_EXISTS_EXISTS] Theorem
⊢ ∀v i P.
(∀v2. SIMPLE_GUESS_EXISTS v i (P v2)) ⇒
SIMPLE_GUESS_EXISTS v i (∃v2. P v2)
[SIMPLE_GUESS_EXISTS_FORALL] Theorem
⊢ ∀v i P.
(∀v2. SIMPLE_GUESS_EXISTS v i (P v2)) ⇒
SIMPLE_GUESS_EXISTS v i (∀v2. P v2)
[SIMPLE_GUESS_EXISTS_NEG] Theorem
⊢ ∀v i P. SIMPLE_GUESS_FORALL v i P ⇒ SIMPLE_GUESS_EXISTS v i (¬P)
[SIMPLE_GUESS_EXISTS_THM] Theorem
⊢ ∀i P. (∀v. SIMPLE_GUESS_EXISTS v i (P v)) ⇒ ((∃v. P v) ⇔ P i)
[SIMPLE_GUESS_FORALL_ALT_DEF] Theorem
⊢ (∀v. SIMPLE_GUESS_FORALL v i (P v)) ⇔
GUESS_FORALL_GAP (K i) (λv. P v)
[SIMPLE_GUESS_FORALL_EXISTS] Theorem
⊢ ∀v i P.
(∀v2. SIMPLE_GUESS_FORALL v i (P v2)) ⇒
SIMPLE_GUESS_FORALL v i (∃v2. P v2)
[SIMPLE_GUESS_FORALL_FORALL] Theorem
⊢ ∀v i P.
(∀v2. SIMPLE_GUESS_FORALL v i (P v2)) ⇒
SIMPLE_GUESS_FORALL v i (∀v2. P v2)
[SIMPLE_GUESS_FORALL_IMP_1] Theorem
⊢ ∀v i P1 P2.
SIMPLE_GUESS_EXISTS v i P1 ⇒ SIMPLE_GUESS_FORALL v i (P1 ⇒ P2)
[SIMPLE_GUESS_FORALL_IMP_2] Theorem
⊢ ∀v i P1 P2.
SIMPLE_GUESS_FORALL v i P2 ⇒ SIMPLE_GUESS_FORALL v i (P1 ⇒ P2)
[SIMPLE_GUESS_FORALL_NEG] Theorem
⊢ ∀v i P. SIMPLE_GUESS_EXISTS v i P ⇒ SIMPLE_GUESS_FORALL v i (¬P)
[SIMPLE_GUESS_FORALL_OR_1] Theorem
⊢ ∀v i P1 P2.
SIMPLE_GUESS_FORALL v i P1 ⇒ SIMPLE_GUESS_FORALL v i (P1 ∨ P2)
[SIMPLE_GUESS_FORALL_OR_2] Theorem
⊢ ∀v i P1 P2.
SIMPLE_GUESS_FORALL v i P2 ⇒ SIMPLE_GUESS_FORALL v i (P1 ∨ P2)
[SIMPLE_GUESS_FORALL_THM] Theorem
⊢ ∀i P. (∀v. SIMPLE_GUESS_FORALL v i (P v)) ⇒ ((∀v. P v) ⇔ P i)
[SIMPLE_GUESS_SELECT_THM] Theorem
⊢ ∀i P.
(∀v. SIMPLE_GUESS_EXISTS v i (P v)) ⇒
((@v. P v) = if P i then i else @v. F)
[SIMPLE_GUESS_SOME_THM] Theorem
⊢ ∀i P.
(∀v. SIMPLE_GUESS_EXISTS v i (P v)) ⇒
((some v. P v) = if P i then SOME i else NONE)
[SIMPLE_GUESS_UEXISTS_THM] Theorem
⊢ ∀i P. (∀v. SIMPLE_GUESS_EXISTS v i (P v)) ⇒ ((∃!v. P v) ⇔ P i)
[SND_PAIR_EQ] Theorem
⊢ ∀p p1. ((p1,SND p) = p) ⇔ (p1 = FST p)
[SND_PAIR_EQ_SYM] Theorem
⊢ ∀p p1. (p = (p1,SND p)) ⇔ (FST p = p1)
[SOME_THE_EQ] Theorem
⊢ ∀opt. (SOME (THE opt) = opt) ⇔ IS_SOME opt
[SOME_THE_EQ_SYM] Theorem
⊢ ∀opt. (opt = SOME (THE opt)) ⇔ IS_SOME opt
[UNWIND_EXISTS_THM] Theorem
⊢ ∀a P. (∃x. P x) ⇔ (∀x. x ≠ a ⇒ ¬P x) ⇒ P a
*)
end
HOL 4, Trindemossen-1