This is a toy Rust SMT solver build using platsat and plat-egg
that accepts a subset of SMT2LIB syntax for the logic QF_UF
-
true,false,and,or,not, -
=>,xor -
= -
distinct -
as -
declare-sort -
declare-function -
assert -
check-sat -
check-sat-assuming -
let -
let*(sequential let binding) -
if -
get-value -
get-model -
:named -
get-unsat-core -
declare-const -
define-const -
push,pop,reset,reset-assertions -
set-option -
echo -
set-info -
get-info -
get-proof
The binary (produced by cargo build) takes in a list of .smt2 files and evaluates sequentially as if they were a single concatenated file.
This list can optionally be followed by -i which enters interactive mode (reading from stdin) after the files are evaluated
Most parameters currently come from batsat, and are prefixed by sat.,
for example random initial activations would be enabled with:
(set-option :sat.rnd_init_act true)
plat-smt also supports the SMT-LIB standard parameters:
:produce-models(defaulttrue):produce-unsat-cores(defaulttrue):print-success(defaultfalse)
- The
yices-smt2file is fromhttps://yices.csl.sri.com/and is only included for testing - The
scramblerandModelValidatorfiles are fromhttps://smt-comp.github.io/2021/tools.htmland are also only used for testing - If the environment variable
SEEDis set the initial decisions made are randomized based on it when running the star exec tests (these should otherwise be configured viaset-option)