summaryrefslogtreecommitdiff
path: root/Assignment2
diff options
context:
space:
mode:
Diffstat (limited to 'Assignment2')
-rw-r--r--Assignment2/src/Z3.dcl10
-rw-r--r--Assignment2/src/Z3.icl23
2 files changed, 18 insertions, 15 deletions
diff --git a/Assignment2/src/Z3.dcl b/Assignment2/src/Z3.dcl
index 0329987..e7555cf 100644
--- a/Assignment2/src/Z3.dcl
+++ b/Assignment2/src/Z3.dcl
@@ -4,10 +4,10 @@ from System.Process import :: ProcessHandle, :: ProcessIO
:: Z3
-startZ3 :: *World -> (Z3, *World)
-addAssert :: Z3 String *World -> *World
-addVariable :: Z3 String *World -> *World
-checkSat :: Z3 *World -> (Bool, *World)
+startZ3 :: !*World -> (!Z3, !*World)
+addAssert :: !Z3 !String !*World -> !*World
+addVariable :: !Z3 !String !*World -> !*World
+checkSat :: !Z3 !*World -> (!Bool, !*World)
// Note: getModel terminates z3
-getModel :: Z3 *World -> (String, *World)
+getModel :: !Z3 !*World -> (!String, !*World)
diff --git a/Assignment2/src/Z3.icl b/Assignment2/src/Z3.icl
index 0bef921..2efe664 100644
--- a/Assignment2/src/Z3.icl
+++ b/Assignment2/src/Z3.icl
@@ -14,7 +14,7 @@ import StdDebug
, stdErr :: ReadPipe
}
-startZ3 :: *World -> (Z3, *World)
+startZ3 :: !*World -> (!Z3, !*World)
startZ3 w
# (err, w) = runProcessIO "z3" ["-smt2", "-in"] Nothing w
# (handle, {ProcessIO | stdIn, stdOut, stdErr}) = fromOk err
@@ -26,28 +26,31 @@ startZ3 w
}
= (z3, w)
-addAssert :: Z3 String *World -> *World
+addAssert :: !Z3 !String !*World -> *World
addAssert z3 s w
-# (_, w) = writePipe ("(assert (" <+ s <+ "))\n") z3.Z3.stdIn w
+# (_, w) = writePipe (trace_s ("(assert " <+ s <+ ")\n")) z3.Z3.stdIn w
= w
-addVariable :: Z3 String *World -> *World
+addVariable :: !Z3 !String !*World -> *World
addVariable z3 s w
-# (_, w) = writePipe ("(declare-const " <+ s <+ " Real)\n") z3.Z3.stdIn w
+# (_, w) = writePipe (trace_s ("(declare-const " <+ s <+ " Real)\n")) z3.Z3.stdIn w
= w
-checkSat :: Z3 *World -> (Bool, *World)
+checkSat :: !Z3 !*World -> (!Bool, !*World)
checkSat z3 w
-# (_, w) = writePipe "(check-sat)\n" z3.Z3.stdIn w
+# (_, w) = writePipe (trace_s "(check-sat)\n") z3.Z3.stdIn w
# (out, w) = readPipeBlocking z3.Z3.stdOut w
# out = fromOk out
= (startsWith "sat" out, w)
-getModel :: Z3 *World -> (String, *World)
+getModel :: !Z3 !*World -> (!String, !*World)
getModel z3 w
-# (_, w) = writePipe "(get-model)\n" z3.Z3.stdIn w
-# (_, w) = writePipe "(exit)\n" z3.Z3.stdIn w
+# (_, w) = writePipe (trace_s "(get-model)\n") z3.Z3.stdIn w
+# (_, w) = writePipe (trace_s "(exit)\n") z3.Z3.stdIn w
# (_, w) = waitForProcess z3.Z3.handle w
# (out, w) = readPipeNonBlocking z3.Z3.stdOut w
# out = fromOk out
= (out, w)
+
+trace_s :: String -> String
+trace_s s = trace_n s s