probably.pysmt
¶
Probably contains some utility functions to translate parts of a pGCL program to pySMT.
Translation Context¶
The translation of pGCL programs to pySMT requires a few details to be known:
How to translate variables to pySMT, how to handle infinities, and so on. The
TranslationContext
handles all that.
- class probably.pysmt.context.TranslationContext(variables, infinity=None, id_subst=None)[source]¶
Context used for translation of pGCL parts.
- Parameters:
-
infinity:
FNode
¶
Expression Translation¶
Translation of pGCL expressions to pySMT formulas.
- probably.pysmt.expr.expr_to_pysmt(context, expr, *, is_expectation=False, allow_infinity=False)[source]¶
Translate a pGCL expression to a pySMT formula.
Note that substitution expressions are not allowed here (they are not supported in pySMT).
You can pass in the optional is_expectation parameter to have all integer values converted to real values.
If allow_infinity is True, then infinity expressions will be mapped directly to the infinity variable of the given
TranslationContext
. Take care to appropriately constrain the infinity variable! Note that arithmetic expressions may not contain infinity, to prevent expressions like infinity - infinity.>>> from probably.pgcl.parser import parse_expr >>> from pysmt.shortcuts import Symbol >>> from pysmt.typing import INT >>> expr = parse_expr("x + 4 * 13") >>> context = TranslationContext({"x": Symbol("x", INT)}) >>> expr_to_pysmt(context, expr) (x + (4 * 13))
- Parameters:
context (
TranslationContext
) –expr (
Union
[VarExpr
,BoolLitExpr
,NatLitExpr
,RealLitExpr
,UnopExpr
,BinopExpr
,CategoricalExpr
,SubstExpr
,TickExpr
,DUniformExpr
,CUniformExpr
,BernoulliExpr
,GeometricExpr
,PoissonExpr
,LogDistExpr
,BinomialExpr
,IidSampleExpr
]) –is_expectation (
bool
) –allow_infinity (
bool
) –
- Return type:
FNode