logo
In [1]:
import proveit
from proveit import alpha
from proveit.core_expr_types import x_1_to_n, Q__x_1_to_n, P__x_1_to_n
from proveit.logic import Not, Equals, TRUE, NotEquals
from proveit import defaults
theory = proveit.Theory() # the theorem's theory
In [2]:
%proving skolem_elim_lemma
With these allowed/disallowed theorem/theory presumptions (e.g., to avoid circular dependencies), we begin our proof of
skolem_elim_lemma:
(see dependencies)
In [3]:
antecedent = skolem_elim_lemma.instance_expr.instance_expr.antecedent
antecedent:
In [4]:
main_assumptions = (*skolem_elim_lemma.conditions.entries, antecedent)
main_assumptions:

This is be a proof by contradiction

In [5]:
defaults.assumptions = (*main_assumptions, Not(alpha))
defaults.assumptions:
In [6]:
existential, universal = antecedent.derive_left(), antecedent.derive_right()
existential:  ⊢  
universal:  ⊢  
In [7]:
unfolded_existential = existential.unfold()
unfolded_existential: ,  ⊢  
In [8]:
universal
In [9]:
alpha_under_assumptions = universal.instantiate(assumptions=[Q__x_1_to_n]).derive_consequent(
    assumptions=[Equals(P__x_1_to_n, TRUE)])
alpha_under_assumptions: , ,  ⊢  
In [10]:
contradiction = Not(alpha).derive_contradiction(
    assumptions=[*defaults.assumptions, Q__x_1_to_n, Equals(P__x_1_to_n, TRUE)])
contradiction: , , ,  ⊢  
In [11]:
contradiction.deny_assumption(Equals(P__x_1_to_n, TRUE))
, ,  ⊢  
In [12]:
P_neq_T = NotEquals(P__x_1_to_n, TRUE).prove(assumptions=[*defaults.assumptions, Q__x_1_to_n])
P_neq_T: , ,  ⊢  
In [13]:
P_neq_T.generalize(x_1_to_n, conditions=[Q__x_1_to_n])
In [14]:
unfolded_existential.affirm_via_contradiction(alpha, assumptions=main_assumptions)
, ,  ⊢  
skolem_elim_lemma may now be readily provable (assuming required theorems are usable).  Simply execute "%qed".
In [15]:
%qed
proveit.logic.booleans.quantification.existence.skolem_elim_lemma has been proven.
Out[15]:
 step typerequirementsstatement
0generalization1  ⊢  
1deduction2,  ⊢  
2instantiation3, 4, 5, ,  ⊢  
  :
3axiom  ⊢  
 proveit.logic.booleans.implication.affirmation_via_contradiction
4assumption  ⊢  
5deduction6,  ⊢  
6instantiation22, 7, 8, ,  ⊢  
  :
7generalization9,  ⊢  
8modus ponens10, 11,  ⊢  
9instantiation12, 13, ,  ⊢  
  : , :
10instantiation14, 15  ⊢  
  :
11instantiation16, 32  ⊢  
  : , :
12theorem  ⊢  
 proveit.logic.equality.fold_not_equals
13instantiation17, 18, 19, ,  ⊢  
  :
14conjecture  ⊢  
 proveit.logic.booleans.quantification.existence.exists_unfolding
15assumption  ⊢  
16theorem  ⊢  
 proveit.logic.booleans.conjunction.left_from_and
17axiom  ⊢  
 proveit.logic.booleans.implication.denial_via_contradiction
18instantiation20  ⊢  
  : , :
19deduction21, ,  ⊢  
20axiom  ⊢  
 proveit.logic.equality.equality_in_bool
21instantiation22, 23, 24, , ,  ⊢  
  :
22conjecture  ⊢  
 proveit.logic.booleans.negation.negation_contradiction
23modus ponens25, 26, ,  ⊢  
24assumption  ⊢  
25instantiation27, 28,  ⊢  
  :
26instantiation29, 30  ⊢  
  :
27instantiation31, 32  ⊢  
  : , :
28assumption  ⊢  
29axiom  ⊢  
 proveit.logic.booleans.eq_true_elim
30assumption  ⊢  
31theorem  ⊢  
 proveit.logic.booleans.conjunction.right_from_and
32assumption  ⊢