logo
In [1]:
import proveit
from proveit import P, Q, 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.logic.booleans.quantification.existence import skolem_elim_lemma
from proveit import defaults
theory = proveit.Theory() # the theorem's theory
In [2]:
%proving skolem_elim
With these allowed/disallowed theorem/theory presumptions (e.g., to avoid circular dependencies), we begin our proof of
skolem_elim:
(see dependencies)
In [3]:
skolem_elim_lemma
In [4]:
skolem_elim_lemma_inst = skolem_elim_lemma.instantiate({alpha:Equals(alpha, TRUE), P:P, Q:Q}, 
                                                   assumptions=[skolem_elim.condition])
skolem_elim_lemma_inst:  ⊢  
In [5]:
antecedent = skolem_elim.instance_expr.instance_expr.antecedent
antecedent:
In [6]:
defaults.assumptions = (skolem_elim_lemma.condition, antecedent)
defaults.assumptions:
In [7]:
P_impl_alpha = antecedent.derive_right().instantiate(assumptions=[Q__x_1_to_n])
P_impl_alpha: ,  ⊢  
In [8]:
P_impl_alpha.derive_consequent(assumptions=[P__x_1_to_n])
, ,  ⊢  
In [9]:
alpha_eq_true__under__assumptions = Equals(alpha, TRUE).prove(
    assumptions=[*defaults.assumptions, Q__x_1_to_n, P__x_1_to_n])
alpha_eq_true__under__assumptions: , ,  ⊢  
In [10]:
P__impl__alpha_eq_T = alpha_eq_true__under__assumptions.as_implication(P__x_1_to_n)
P__impl__alpha_eq_T: ,  ⊢  
In [11]:
P__impl__alpha_eq_T.generalize(x_1_to_n, conditions=[Q__x_1_to_n])
In [12]:
skolem_elim_lemma_inst.derive_consequent()
skolem_elim may now be readily provable (assuming required theorems are usable).  Simply execute "%qed".
In [13]:
%qed
proveit.logic.booleans.quantification.existence.skolem_elim has been proven.
Out[13]:
 step typerequirementsstatement
0generalization1  ⊢  
1deduction2  ⊢  
2instantiation3, 4,  ⊢  
  :
3axiom  ⊢  
 proveit.logic.booleans.eq_true_elim
4modus ponens5, 6,  ⊢  
5instantiation7, 8, 9  ⊢  
  : , : , : , :
6instantiation10, 11, 12  ⊢  
  : , :
7conjecture  ⊢  
 proveit.logic.booleans.quantification.existence.skolem_elim_lemma
8assumption  ⊢  
9instantiation13  ⊢  
  : , :
10conjecture  ⊢  
 proveit.logic.booleans.conjunction.and_if_both
11instantiation14, 24  ⊢  
  : , :
12generalization15  ⊢  
13axiom  ⊢  
 proveit.logic.equality.equality_in_bool
14theorem  ⊢  
 proveit.logic.booleans.conjunction.left_from_and
15deduction16,  ⊢  
16instantiation17, 18, ,  ⊢  
  :
17axiom  ⊢  
 proveit.logic.booleans.eq_true_intro
18modus ponens19, 20, ,  ⊢  
19instantiation21, 22,  ⊢  
  :
20assumption  ⊢  
21instantiation23, 24  ⊢  
  : , :
22assumption  ⊢  
23theorem  ⊢  
 proveit.logic.booleans.conjunction.right_from_and
24assumption  ⊢