/// <summary> /// Verify that if the function satisfies the precondition, /// then it also satisfies the postcondition. /// </summary> /// <param name="invariant">The invariant.</param> /// <param name="backend">The backend.</param> /// <returns>An input if one exists satisfying the constraints.</returns> public bool Assert(Func <Zen <T>, Zen <bool> > invariant, Backend backend = Backend.Z3) { var result = invariant(this.function()); return(CommonUtilities.RunWithLargeStack(() => SymbolicEvaluator.Find(result, backend))); }
/// <summary> /// Initializes a new instance of the <see cref="ZenConstantStringExpr"/> class. /// </summary> /// <param name="unescapedValue">The unescaped value.</param> private ZenConstantStringExpr(string unescapedValue) { this.UnescapedValue = unescapedValue; this.EscapedValue = CommonUtilities.ConvertCSharpStringToZ3(unescapedValue); }
/// <summary> /// Create a new instance of the <see cref="ZenFunction{T}"/> class. /// </summary> /// <param name="function">The function.</param> public ZenFunction(Func <Zen <T> > function) { CommonUtilities.ValidateNotNull(function); this.function = function; }
/// <summary> /// Simplify an expression recursively. /// </summary> /// <returns></returns> public Zen <T> Simplify() { return(CommonUtilities.RunWithLargeStack(() => this.Unroll())); }