Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add examples and document it #82

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions examples/Example/Monad/SatFile.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
module Example.Monad.SatFile where

import Z3.Monad

run :: IO ()
run =
evalZ3 result >>= print

result :: MonadZ3 z3 => z3 (Result, Maybe String)
result = do
fil <- parseSMTLib2File "examples/SMTLibFiles/Sat.smtlib" [] [] [] []
mapM_ assert fil
(res, mModel) <- solverCheckAndGetModel
strModel <- traverse showModel mModel
return (res, strModel)
12 changes: 12 additions & 0 deletions examples/Example/Monad/UnsatFile.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module Example.Monad.UnsatFile where

import Z3.Monad

run :: IO ()
run =
evalZ3 result >>= print

result :: MonadZ3 z3 => z3 Result
result = do
fil <- parseSMTLib2File "examples/SMTLibFiles/Unsat.smtlib" [] [] [] []
solverCheckAssumptions fil
14 changes: 14 additions & 0 deletions examples/Examples.hs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import qualified Example.Monad.ToSMTLib
import qualified Example.Monad.Tuple
import qualified Example.Monad.ParserInterface
import qualified Example.Monad.IntList
import qualified Example.Monad.UnsatFile
import qualified Example.Monad.SatFile

import System.Environment

Expand Down Expand Up @@ -49,9 +51,21 @@ examples =
, ("intList"
, Example.Monad.IntList.run
)
, ("unsatFile"
, Example.Monad.UnsatFile.run
)
, ("satFile"
, Example.Monad.SatFile.run
)
]

runExample :: String -> IO ()
runExample "all" = mapM_ go examples
where
go :: (String, IO ()) -> IO ()
go (name, run) = do
putStrLn $ "\nRunning " ++ name ++ ":"
run
runExample x = case lookup x examples of
Just x -> x
Nothing -> error "Example not found"
Expand Down
28 changes: 28 additions & 0 deletions examples/README
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Examples of Haskell-Z3

## Available examples

To list the name of the available examples, run

```
cabal run --flags examples examples
```

## Run all examples

To run all examples, run

```
cabal run --flags examples examples -- all
```

## Run one examples

To run the example named `my-example`, run

```
cabal run --flags examples examples -- my-example
```

Note that the name of the example is the name of the file containing it,
but with a lower-case first letter.
2 changes: 2 additions & 0 deletions examples/SMTLibFiles/CREDITS
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
The example files in this folder were copied from the smt-lib website:
https://smtlib.cs.uiowa.edu/examples.shtml
17 changes: 17 additions & 0 deletions examples/SMTLibFiles/Sat.smtlib
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
; Getting values or models
(set-option :print-success false)
(set-option :produce-models true)
(set-logic QF_LIA)
(declare-const x Int)
(declare-const y Int)
(assert (= (+ x (* 2 y)) 20))
(assert (= (- x y) 2))
(check-sat)
; sat
(get-value (x y))
; ((x 8) (y 6))
(get-model)
; ((define-fun x () Int 8)
; (define-fun y () Int 6)
; )
(exit)
8 changes: 8 additions & 0 deletions examples/SMTLibFiles/Unsat.smtlib
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
; Integer arithmetic
(set-logic QF_LIA)
(declare-const x Int)
(declare-const y Int)
(assert (= (- x y) (+ x (- y) 1)))
(check-sat)
; unsat
(exit)
6 changes: 5 additions & 1 deletion z3.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,8 @@ Executable examples
Build-depends: base >=4.5,
z3,
containers,
transformers >= 0.2
transformers >= 0.2,
directory

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems, like the dependency on directory is not needed?

else
Buildable: False

Expand All @@ -120,6 +121,9 @@ Executable examples
Example.Monad.QuantifierElimination
Example.Monad.ToSMTLib
Example.Monad.Tuple
Example.Monad.IntList
Example.Monad.UnsatFile
Example.Monad.SatFile

Test-suite spec

Expand Down