Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Modify qalpha execution modes and command-line arguments (#136)
This is an overhaul of the qalpha execution modes and their command-line arguments, as well as a clean-up and reorganization of the inference code. This includes: - Removal of unused functionality which requires excessive maintenance and code duplication, such as searching for individually inductive lemmas via `--indiv` or gradually weakening the `Frontier` using `--gradual-advance`. - Simplification of remaining functionality, such as replacing `Frontier` with the much simpler `InductionFrame`, and simplifying the `run_qalpha` code as a result. - Changes to command-line arguments: - Instead of inputting the precise quantifier configuration using a sequence of `--quantifier`, the default mode now uses the sort order in the module file to generate a default quantifier configuration which should be enough to prove safety for all EPR examples, (provided that their sorts are ordered correctly.) This also includes a default for the quantifier-free body, although these can be set manually as before using `--qf-body`, `--cube-size`, etc. - To manually set the quantifier configuration, a new flag `--custom-quant` is introduced. It can be used to define a sort ordering different than the one in the file, using a sequence of `--sort` arguments, or to define a precise configuration using a sequence of `--quantifier` arguments as before. - `--disj` and `--search` have been replaced with `--no-disj` and `--no-search`, respectively, which means that by default, qalpha now splits the transition relation disjunctively when making SMT queries, and executes a gradual search over sub-domains of the quantifier configuration rather than using the precise, maximal specification (which is now accessible via `--no-search`.) - Added `--until-safe`, which halts the execution once a fixpoint was found which proves safety. - Added `--abort-unsafe`, which aborts a fixpoint computation once it is evident that it cannot prove safety. - Additionally, due to the heavier use of the _search_ functionality, the exploration of sub-domains has been modified. Specifically, the domain of the fixpoint computation begins from some size (currently 100), and each iteration grows by some factor which can be set using `--growth-factor` (current default: 5). Growing the domain involves adding the smallest uncovered sub-domains until it passes the threshold for that iteration. - Lastly, if a fixpoint has been found which proves safety, qalpha now prints both the entire fixpoint, as well as a minimized subset of it which is inductive and proves safety. This requires no extra computation, as this information exists in the UNSAT-cores generated by the safety check and by the inductiveness check of the fixpoint. --------- Signed-off-by: edenfrenkel <[email protected]>
- Loading branch information