nltk.sem.ApplicationExpression¶
- class nltk.sem.ApplicationExpression[source]¶
Bases:
Expression
This class is used to represent two related types of logical expressions.
The first is a Predicate Expression, such as “P(x,y)”. A predicate expression is comprised of a
FunctionVariableExpression
orConstantExpression
as the predicate and a list of Expressions as the arguments.The second is a an application of one expression to another, such as “(x.dog(x))(fido)”.
The reason Predicate Expressions are treated as Application Expressions is that the Variable Expression predicate of the expression may be replaced with another Expression, such as a LambdaExpression, which would mean that the Predicate should be thought of as being applied to the arguments.
The logical expression reader will always curry arguments in a application expression. So, “x y.see(x,y)(john,mary)” will be represented internally as “((x y.(see(x))(y))(john))(mary)”. This simplifies the internals since there will always be exactly one argument in an application.
The str() method will usually print the curried forms of application expressions. The one exception is when the the application expression is really a predicate expression (ie, underlying function is an
AbstractVariableExpression
). This means that the example from above will be returned as “(x y.see(x,y)(john))(mary)”.- __init__(function, argument)[source]¶
- Parameters
function –
Expression
, for the function expressionargument –
Expression
, for the argument
- property type¶
- property pred¶
Return uncurried base-function. If this is an atom, then the result will be a variable expression. Otherwise, it will be a lambda expression.
- property args¶
Return uncurried arg-list
- is_atom()[source]¶
Is this expression an atom (as opposed to a lambda expression applied to a term)?
- equiv(other, prover=None)[source]¶
Check for logical equivalence. Pass the expression (self <-> other) to the theorem prover. If the prover says it is valid, then the self and other are equal.
- Parameters
other – an
Expression
to check equality againstprover – a
nltk.inference.api.Prover
- free()[source]¶
Return a set of all the free (non-bound) variables. This includes both individual and predicate variables, but not constants. :return: set of
Variable
objects
- replace(variable, expression, replace_bound=False, alpha_convert=True)[source]¶
Replace every instance of ‘variable’ with ‘expression’ :param variable:
Variable
The variable to replace :param expression:Expression
The expression with which to replace it :param replace_bound: bool Should bound variables be replaced? :param alpha_convert: bool Alpha convert automatically to avoid name clashes?
- substitute_bindings(bindings)[source]¶
- Returns
The object that is obtained by replacing each variable bound by
bindings
with its values. Aliases are already resolved. (maybe?)- Return type
(any)
- typecheck(signature=None)[source]¶
Infer and check types. Raise exceptions if necessary.
- Parameters
signature – dict that maps variable names to types (or string representations of types)
- Returns
the signature, plus any additional type mappings
- variables()[source]¶
Return a set of all the variables for binding substitution. The variables returned include all free (non-bound) individual variables and any variable starting with ‘?’ or ‘@’. :return: set of
Variable
objects
- visit_structured(function, combinator)[source]¶
Recursively visit subexpressions. Apply ‘function’ to each subexpression and pass the result of each function application to the ‘combinator’ for aggregation. The combinator must have the same signature as the constructor. The function is not applied to bound variables, but they are passed to the combinator. :param function:
Function
to call on each subexpression :param combinator:Function
with the same signature as the constructor, to combine the results of the function calls :return: result of combination