/// <summary> /// Evaluate the function against a value. /// </summary> /// <returns>Result.</returns> public T Evaluate() { if (compiledFunction != null) { return(compiledFunction()); } return(CommonUtilities.RunWithLargeStack(() => Interpreter.Run(this.function).Item1)); }
/// <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> /// Simplify an expression recursively. /// </summary> /// <returns></returns> public Zen <T> Simplify() { return(CommonUtilities.RunWithLargeStack(() => this.Unroll())); }