- Apr 12, 2013
-
-
Etienne Kneuss authored
-
Etienne Kneuss authored
-
Etienne Kneuss authored
-
Etienne Kneuss authored
-
- Apr 03, 2013
-
-
Régis Blanc authored
This commit completes the Justify testcase with some more advanced properties. It provides both an implementation with its specification for verification, and a synthesis benchmark where choose is used to try to derive the correct implementation.
-
- Mar 26, 2013
-
-
Etienne Kneuss authored
-
Philippe Suter authored
This commit introduces `leon.purescala.DataGen`, an object that contains two static methods; `generate` and `findModels`. `generate` is a term generator based on composition of streams. It can generate hundreds of instances of recursive types in less than a tenth of a second. `findModels` leverages `generate` to perform (small-)model finding. Pass it an expression and an evaluator (preferably `CodeGenEvaluator`) and watch it find models to your formula. The commit also includes a small regression test suite. (Note that although we have currently no use for this, the `generate` function can in principle be used to generate arbitrary terms. E.g. you could pass variables as fixed generators for certain types.)
-
- Mar 25, 2013
-
-
Etienne Kneuss authored
- Choose expressions becomes uninterpreted functions under the same constraints. - Fix bug with variablesOf considering choose binders as free. - Silence evaluator errors when occuring with tentative lucky models. Note that choose expressions cannot be evaluated nor compiled.
-
Ivan Kuraj authored
-
- Mar 20, 2013
-
-
Etienne Kneuss authored
-
- Mar 11, 2013
-
-
Etienne Kneuss authored
Z3 may return an id->id model for array kinds, leading to an assertion error caused by the expectation of getting an array literal. We shortcircuit with z3IdToExpr to catch such cases for all kinds.
-
- Mar 09, 2013
-
-
Etienne Kneuss authored
-
- Mar 08, 2013
-
-
Etienne Kneuss authored
-
Etienne Kneuss authored
-
- Feb 13, 2013
-
-
Etienne Kneuss authored
-
Etienne Kneuss authored
-
Etienne Kneuss authored
- Describe individual rule applications to allow a user to select one in particular - Scala-Printing LetDefs correctly, allow initial indenting - Fix Choose with single out variable not generating Tuple1 - Give synthesis a specific path to follow, used by web - Allow val (x: Int, y: Int) = ... along with locally{} - Expose information on the synthesis search tree - Correctly substitute varaibles in ADTInduction's pre/post - Generic transformers with PC tracking, collect chooses with PC - Detect line indentation of choose() to indent solution correctly - Implement simplifier which renames ids based on the context - Rescale timeouts, use uninterpreted solver for filtering simple cases - Assume that choose() can reference the entire scope This is necessary to ensure that Lets do not get thrown away. For instance: Let(x = ..., choose(out => .. y ..)) while the choose may not directly reference x in its preducate, it's part of its path condition and should be usable by synthesis. SimplifyLet should not simplify/replace it. - Modify PC for Let(x, Fcall()), this probably needs to be generalized! - Expose counter-example found during verification, include them in VCReport - Decouple genVCs/checkVCs from Phase.run so that it can be used separately
-
Etienne Kneuss authored
Add ?powermode=1 to the URL to access PowerMode. For now, all you can do is set the flags manually. This allows you to run the synthesis or termination phases from the web, for instance. Remember, with great power comes great responsibility!
-
- Jan 25, 2013
-
-
Etienne Kneuss authored
-
Etienne Kneuss authored
-
- Jan 20, 2013
-
-
Etienne Kneuss authored
Normalizing rules are rules that: 1) always help synthesis 2) are commutative 3) should be applied as early as possible Here we apply normalizing rules explicitly before all other rules, and in a deterministic order. This should dramatically reduce the search space in cases where such rules apply. Note that rules that are said to be normalizing should never fail once instantiated.
-
- Jan 18, 2013
-
-
Etienne Kneuss authored
-
Etienne Kneuss authored
-
- Jan 15, 2013
-
-
Philippe Suter authored
I can only assume this was introduced by accident in a previous commit.
-
Etienne Kneuss authored
Updates on benchmarks from Viktor
-
Viktor Kuncak authored
-
Viktor Kuncak authored
by adding a parametric example.
-
Viktor Kuncak authored
-
- Jan 14, 2013
-
-
Etienne Kneuss authored
Timeouts are now specified in milliseconds instead of seconds. TimeoutSolvers that hit a timeout no longer makes the wrapped solver useless for all subsequent invocations.
-
Etienne Kneuss authored
-
Etienne Kneuss authored
-
Philippe Suter authored
-
Philippe Suter authored
The idea of this commit is to recycle b and e variables in function template instantiations. This essentially means that the graph of guards (b variables), which used to be a tree, is now a DAG. The hope is that this limits the number of unrollings, as different instantiations with the same arguments are now unrolled only once.
-
Philippe Suter authored
-
Etienne Kneuss authored
-
Etienne Kneuss authored
CE-Testing allows CEGIS to compile the program at the current unrolling level and test with provided Bs (the determinized program) on previously discovered inputs. This allows us to skip a SAT query in case one of them fails. Given a series of known valid inputs, it can prune program candidates by enumerating them and testing against these inputs. This should dramatically reduce the number of SAT queries. Currently we have no heuristic to disable enumarting when branching factor becomes too big. We might want to do random sampling. We start by figuring out one basic examples that we can use for pruning. In the presence of a path-condition, we need to perform a simple SAT query Also, B-Paths enforces sub-branches to use a fixed value if the parent branch is closed. This should prune the program exploration behind closed branches. We have observed no clear benefits in terms of performance yet. CEGIS will only use fully determined functions as candidates for gencalls. (e.g. no functions containing 'choose')
-
Etienne Kneuss authored
-
Etienne Kneuss authored
EqualitySplit now is also applied if there is more than two inputs with the same type. InequalitySplit splits two integer inputs in the following way: - a < b - a == b - a > b
-
Etienne Kneuss authored
Given x: T where T only have one inhabitant, CC(a, b), we generate a subproblem with a,b as out variables, and x replaced with CC(a,b) in phi
-
Etienne Kneuss authored
This simplification is done directly when constructing them. Note that it does not preserve everything: e.g (infiniteLoop, 1)._2 would be simplified to 1.
-