sygus-comp-2016-eval
SyGuS-Comp 2016: Results and Analysis — Alur et al. (2016) (arXiv:1611.07627, 2016)
What this evaluates
Evaluates syntax-guided program synthesis solvers on their ability to generate correct programs from logical constraints and grammars. It probes capabilities in conditional linear integer arithmetic, invariant generation, and programming-by-example with bit-vectors and strings.
Datasets
- SyGuS-Comp 2016 — total 1307; splits: General (309), Conditional Linear Integer Arithmetic (73), Invariant Synthesis (67), Programming By Example (858)
Metrics
number_of_benchmarks_solved (primary) — range: percent
- Count of benchmarks for which the solver produces a correct program within the time limit, divided by the total number of benchmarks in the track, expressed as a percentage.
time_to_solve — range: other
- Wall-clock time to solve a benchmark, classified into pseudo-logarithmic buckets: [0,1), [1,3), [3,10), [10,30), [30,100), [100,300), [300,1000), [1000,3600), >3600 seconds.
expression_size — range: other
- Number of nodes in the SyGuS parse-tree of the generated expression, classified into pseudo-logarithmic buckets: [1,10), [10,30), [30,100), [100,300), [300,1000), >1000.
Input / output format
Input: Logical constraints (e.g., pre/post conditions, invariants, or input-output examples) and a function grammar defining the valid program structure.
Output: A synthesized program/expression that satisfies the constraints, represented as a SyGuS parse tree.
Scoring recipe
def compute_metrics(predictions, gold_specs, times, parse_trees, time_limit=3600):
solved = 0
for pred, spec, t, tree in zip(predictions, gold_specs, times, parse_trees):
if pred is not None and verify(pred, spec) and t <= time_limit:
solved += 1
solve_rate = (solved / len(gold_specs)) * 100
time_bucket = classify_pseudo_log(t, [0,1,3,10,30,100,300,1000,3600])
size_bucket = classify_pseudo_log(len(tree.nodes), [1,10,30,100,300,1000])
return solve_rate, time_bucket, size_bucket
Common pitfalls
- Time comparisons use pseudo-logarithmic buckets rather than absolute seconds, which can mask performance differences within the same bucket.
- Expression size is measured by parse-tree node count, which may not reflect actual runtime efficiency or code quality.
- Solvers may terminate without producing a result or produce incorrect results; the evaluation counts these as unsolved, but the time bound may still be reported as the termination time.
Evidence (verbatim from paper)
The primary criterion for winning a track was the number of benchmarks solved, but we also analyzed the time to solve and the the size of the generated expressions. Both where classified using a pseudo-logarithmic scale as follows.
Citation
@misc{alur2016syguscomp,
title={SyGuS-Comp 2016: Results and Analysis},
author={Alur et al. (2016)},
year={2016},
note={arXiv:1611.07627}
}
1---2name: sygus-comp-2016-eval3description: Evaluates syntax-guided program synthesis solvers on their ability to generate correct programs from logical constraints and grammars. It probes capabilities in conditional linear integer arithmetic, invariant generation, and programming-by-example with bit-vectors and strings. Use when the user wants to benchmark on SyGuS-Comp 2016, or asks about evaluating this task. Reports number_of_benchmarks_solved.4---56# sygus-comp-2016-eval78> SyGuS-Comp 2016: Results and Analysis — Alur et al. (2016) (arXiv:1611.07627, 2016)910## What this evaluates1112Evaluates syntax-guided program synthesis solvers on their ability to generate correct programs from logical constraints and grammars. It probes capabilities in conditional linear integer arithmetic, invariant generation, and programming-by-example with bit-vectors and strings.1314## Datasets1516- **SyGuS-Comp 2016** — total 1307; splits: General (309), Conditional Linear Integer Arithmetic (73), Invariant Synthesis (67), Programming By Example (858)1718## Metrics1920- `number_of_benchmarks_solved` **(primary)** — range: percent21 - Count of benchmarks for which the solver produces a correct program within the time limit, divided by the total number of benchmarks in the track, expressed as a percentage.22- `time_to_solve` — range: other23 - Wall-clock time to solve a benchmark, classified into pseudo-logarithmic buckets: [0,1), [1,3), [3,10), [10,30), [30,100), [100,300), [300,1000), [1000,3600), >3600 seconds.24- `expression_size` — range: other25 - Number of nodes in the SyGuS parse-tree of the generated expression, classified into pseudo-logarithmic buckets: [1,10), [10,30), [30,100), [100,300), [300,1000), >1000.2627## Input / output format2829**Input**: Logical constraints (e.g., pre/post conditions, invariants, or input-output examples) and a function grammar defining the valid program structure.3031**Output**: A synthesized program/expression that satisfies the constraints, represented as a SyGuS parse tree.3233## Scoring recipe3435```python36def compute_metrics(predictions, gold_specs, times, parse_trees, time_limit=3600):37 solved = 038 for pred, spec, t, tree in zip(predictions, gold_specs, times, parse_trees):39 if pred is not None and verify(pred, spec) and t <= time_limit:40 solved += 141 solve_rate = (solved / len(gold_specs)) * 10042 time_bucket = classify_pseudo_log(t, [0,1,3,10,30,100,300,1000,3600])43 size_bucket = classify_pseudo_log(len(tree.nodes), [1,10,30,100,300,1000])44 return solve_rate, time_bucket, size_bucket45```4647## Common pitfalls4849- Time comparisons use pseudo-logarithmic buckets rather than absolute seconds, which can mask performance differences within the same bucket.50- Expression size is measured by parse-tree node count, which may not reflect actual runtime efficiency or code quality.51- Solvers may terminate without producing a result or produce incorrect results; the evaluation counts these as unsolved, but the time bound may still be reported as the termination time.5253## Evidence (verbatim from paper)5455> The primary criterion for winning a track was the number of benchmarks solved, but we also analyzed the time to solve and the the size of the generated expressions. Both where classified using a pseudo-logarithmic scale as follows.5657## Citation5859```bibtex60@misc{alur2016syguscomp,61 title={SyGuS-Comp 2016: Results and Analysis},62 author={Alur et al. (2016)},63 year={2016},64 note={arXiv:1611.07627}65}66```6768- arXiv: 1611.07627