Skip to content

Commit

Permalink
Merge pull request #1 from vcanumalla/vcanumalla/add-stp
Browse files Browse the repository at this point in the history
Add STP and Yices2
  • Loading branch information
vcanumalla authored Dec 7, 2023
2 parents 63524aa + ad210a6 commit 8748778
Show file tree
Hide file tree
Showing 5 changed files with 165 additions and 4 deletions.
21 changes: 20 additions & 1 deletion .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ jobs:
- name: Install solvers
run: |
mkdir bin &&
wget $CVC4_URL -nv -O bin/cvc4 &&
chmod +x bin/cvc4 &&
wget $BOOLECTOR_URL -nv -O boolector.tar.gz &&
Expand Down Expand Up @@ -57,7 +58,25 @@ jobs:
ninja &&
popd &&
popd &&
cp bitwuzla/build/src/main/bitwuzla bin/
cp bitwuzla/build/src/main/bitwuzla bin/ &&
sudo apt-get install -y git cmake bison flex libboost-all-dev python2 perl &&
git clone https://github.com/stp/stp &&
pushd stp &&
git submodule init && git submodule update &&
./scripts/deps/setup-gtest.sh &&
./scripts/deps/setup-outputcheck.sh &&
./scripts/deps/setup-cms.sh &&
./scripts/deps/setup-minisat.sh &&
mkdir build &&
cd build &&
cmake .. &&
cmake --build . &&
cp stp bin/ &&
sudo add-apt-repository -y ppa:sri-csl/formal-methods &&
sudo apt-get update &&
sudo apt-get install -y yices2
- name: Install Rosette
run: raco pkg install --auto --name rosette
- name: Compile Rosette tests
Expand Down
68 changes: 68 additions & 0 deletions rosette/solver/smt/stp.rkt
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#lang racket

(require racket/runtime-path
"server.rkt" "env.rkt"
"../solver.rkt"
(prefix-in base/ "base-solver.rkt"))

(provide (rename-out [make-stp stp]) stp? stp-available?)

(define-runtime-path stp-path (build-path ".." ".." ".." "bin" "stp"))
(define stp-opts '())

(define (stp-available?)
(not (false? (base/find-solver "stp" stp-path #f))))

(define (make-stp [solver #f] #:options [options (hash)] #:logic [logic #f] #:path [path #f])
(define config
(cond
[(stp? solver)
(base/solver-config solver)]
[else
(define real-stp-path (base/find-solver "stp" stp-path path))
(when (and (false? real-stp-path) (not (getenv "PLT_PKG_BUILD_SERVICE")))
(error 'stp "stp binary is not available (expected to be at ~a); try passing the #:path argument to (stp)" (path->string (simplify-path stp-path))))
(base/config options real-stp-path logic)]))
(stp (server (base/config-path config) stp-opts (base/make-send-options config)) config '() '() '() (env) '()))

(struct stp base/solver ()
#:property prop:solver-constructor make-stp
#:methods gen:custom-write
[(define (write-proc self port mode) (fprintf port "#<stp>"))]
#:methods gen:solver
[
(define (solver-features self)
'(qf_bv))

(define (solver-options self)
(base/solver-options self))

(define (solver-assert self bools)
(base/solver-assert self bools))

(define (solver-minimize self nums)
(base/solver-minimize self nums))

(define (solver-maximize self nums)
(base/solver-maximize self nums))

(define (solver-clear self)
(base/solver-clear self))

(define (solver-shutdown self)
(base/solver-shutdown self))

(define (solver-push self)
(base/solver-push self))

(define (solver-pop self [k 1])
(base/solver-pop self k))

(define (solver-check self)
(base/solver-check self))

(define (solver-debug self)
(base/solver-debug self))])

(define (set-default-options server)
void)
68 changes: 68 additions & 0 deletions rosette/solver/smt/yices-smt2.rkt
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#lang racket

(require racket/runtime-path
"server.rkt" "env.rkt"
"../solver.rkt"
(prefix-in base/ "base-solver.rkt"))

(provide (rename-out [make-yices-smt2 yices-smt2]) yices-smt2? yices-smt2-available?)

(define-runtime-path yices-smt2-path (build-path ".." ".." ".." "bin" "yices-smt2"))
(define yices-smt2-opts '("--incremental"))

(define (yices-smt2-available?)
(not (false? (base/find-solver "yices-smt2" yices-smt2-path #f))))
(define default-logic 'QF_BV) ;; YICES_2 needs a default logic set otherwise it will error
(define (make-yices-smt2 [solver #f] #:options [options (hash)] #:logic [logic default-logic] #:path [path #f])
(define config
(cond
[(yices-smt2? solver)
(base/solver-config solver)]
[else
(define real-yices-smt2-path (base/find-solver "yices-smt2" yices-smt2-path path))
(when (and (false? real-yices-smt2-path) (not (getenv "PLT_PKG_BUILD_SERVICE")))
(error 'yices-smt2 "yices-smt2 binary is not available (expected to be at ~a); try passing the #:path argument to (yices-smt2)" (path->string (simplify-path yices-smt2-path))))
(base/config options real-yices-smt2-path logic)]))
(yices-smt2 (server (base/config-path config) yices-smt2-opts (base/make-send-options config)) config '() '() '() (env) '()))

(struct yices-smt2 base/solver ()
#:property prop:solver-constructor make-yices-smt2
#:methods gen:custom-write
[(define (write-proc self port mode) (fprintf port "#<yices-smt2>"))]
#:methods gen:solver
[
(define (solver-features self)
'(qf_bv))

(define (solver-options self)
(base/solver-options self))

(define (solver-assert self bools)
(base/solver-assert self bools))

(define (solver-minimize self nums)
(base/solver-minimize self nums))

(define (solver-maximize self nums)
(base/solver-maximize self nums))

(define (solver-clear self)
(base/solver-clear self))

(define (solver-shutdown self)
(base/solver-shutdown self))

(define (solver-push self)
(base/solver-push self))

(define (solver-pop self [k 1])
(base/solver-pop self k))

(define (solver-check self)
(base/solver-check self))

(define (solver-debug self)
(base/solver-debug self))])

(define (set-default-options server)
void)
9 changes: 8 additions & 1 deletion test/all-rosette-tests.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@
rosette/solver/smt/boolector
rosette/solver/smt/cvc5
rosette/solver/smt/bitwuzla
rosette/solver/smt/stp
rosette/solver/smt/yices-smt2
"config.rkt")

(error-print-width default-error-print-width)


Expand Down Expand Up @@ -91,6 +92,12 @@
(when (bitwuzla-available?)
(printf "===== Running bitwuzla tests =====\n")
(run-tests-with-solver bitwuzla))
(when (stp-available?)
(printf "===== Running stp tests =====\n")
(run-tests-with-solver stp))
(when (yices-smt2-available?)
(printf "===== Running yices-smt2 tests =====\n")
(run-tests-with-solver yices-smt2))
)

(module+ test
Expand Down
3 changes: 1 addition & 2 deletions test/base/bitvector.rkt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#lang racket

(require rackunit rackunit/text-ui racket/generator (rename-in rackunit [check-exn rackunit/check-exn])
rosette/solver/solution
rosette/solver/solution
rosette/lib/roseunit rosette/solver/smt/boolector
racket/fixnum
rosette/base/core/term
Expand All @@ -26,7 +26,6 @@
(define maxval+1 (expt 2 (sub1 (bitvector-size BV))))
(define maxval (sub1 maxval+1))
(define (bv v [t BV]) (@bv v t))

(define-syntax-rule (check-exn e ...)
(begin
(rackunit/check-exn e ...)
Expand Down

0 comments on commit 8748778

Please sign in to comment.