[docs]classQuantifierRules:"""Inference rules for quantifiers (∀, ∃)."""
[docs]@staticmethoddefuniversal_elimination(quantifier:UniversalQuantifier,constant:str)->Relation:""" ∀x P(x) ⊢ P(a) Replace variable x with constant a. """ifisinstance(quantifier,UniversalQuantifier):new_predicate=quantifier.predicate.model_copy()new_predicate.parameters=[constantifp==quantifier.variableelsepforpinnew_predicate.parameters]returnnew_predicateraiseValueError("Invalid application of Universal Elimination.")
[docs]@staticmethoddefexistential_instantiation(quantifier:ExistentialQuantifier,constant:str)->Relation:""" ∃x P(x) ⊢ P(a) Introduce a fresh constant. """ifisinstance(quantifier,ExistentialQuantifier):new_predicate=quantifier.predicate.model_copy()new_predicate.parameters=[constantifp==quantifier.variableelsepforpinnew_predicate.parameters]returnnew_predicateraiseValueError("Invalid application of Existential Instantiation.")
[docs]@staticmethoddefexistential_generalization(predicate:Relation,variable:str)->ExistentialQuantifier:""" P(a) ⊢ ∃x P(x) Replace a constant with a quantified variable. """ifisinstance(predicate,Relation):new_predicate=predicate.model_copy()new_predicate.parameters=[variableifpnotinpredicate.parameterselsepforpinnew_predicate.parameters]returnExistentialQuantifier(variable=variable,predicate=new_predicate)raiseValueError("Invalid application of Existential Generalization.")