[docs]classTerm(BaseModel):"""Represents a term in predicate logic (constants, variables, functions)."""value:Union[str,List["Term"]]# Supports functions like f(x, y)
[docs]classPredicate(BaseModel):"""Represents a predicate in first-order logic."""name:strterms:List[Term]
[docs]defevaluate(self,context:Dict[str,bool])->bool:"""Evaluates the predicate given a context mapping variables to truth values."""term_values=tuple(context.get(term.value,False)forterminself.terms)returncontext.get(self.name,lambda*args:False)(*term_values)
[docs]defvariables(self)->List[str]:"""Returns a list of variable names used in the predicate."""return[term.valueforterminself.terms]