-
Notifications
You must be signed in to change notification settings - Fork 0
Basic tutorial
This page contains a set of examples to show the basic usage of NuZot. All the examples are saved in the examples folder. You can either type them in the shell manually or simply load the file.
To open the shell run java -jar NuZot.jar --shell
.
The example GreaterThan.zot shows how to run SMT-like coommands in NuZot. Open the shell and type:
(set-info :k 5) (declare-fun x () Int) (assert (> x 5)) (get-model)
Which means that in a time from 0 to 5 the property x > 5 has to be satisfied. NuZot verify the property and creates the model:
Model: loopex -> true iLoop -> 4 x -> 6 zot-p0 -> { 1 -> true 6 -> true 0 -> true 2 -> true 3 -> true 4 -> true 5 -> true else -> true } (get-model)
You can run the push and pop example by executing java -jar NuZot.jar --file examples/GreaterThan.zot
.
NuZot supports a push and pop interface. To save the status of your model use the (push)
command. To restore the last stored state use the (pop)
command.
Open the NuZot shell and type:
(set-info :k 5) (declare-fun x () Int) (push) (assert (= x 5)) (get-model) (pop) (assert (= x 10)) (get-model)
NuZot will produce the following output. Notice that after the pop the model is discarded and recreated.
Welcome to NuZot shell. Type '(exit)' to leave. Type '(save "filename")' to save. Type '(load "filename")' to load a script at the current stack level. NuZot>(set-info :k 5) (set-info :k 5) NuZot>(declare-fun x () Int) (declare-fun iLoop () Int) (declare-fun loopex () Bool) (assert (or (! loopex) (and (< 0 iLoop) (<= iLoop 5)))) (declare-fun x () Int) NuZot>(push) (push) Stack level: 2 NuZot>(assert (= x 5)) (declare-fun zot-p0 (Int) Bool) (assert (zot-p0 1)) (assert (-> loopex (iff (zot-p0 6) (zot-p0 iLoop)))) (assert (-> (! loopex) (! (zot-p0 6)))) (assert (iff (zot-p0 0) (= x 5))) (assert (iff (zot-p0 1) (= x 5))) (assert (iff (zot-p0 2) (= x 5))) (assert (iff (zot-p0 3) (= x 5))) (assert (iff (zot-p0 4) (= x 5))) (assert (iff (zot-p0 5) (= x 5))) (assert (iff (zot-p0 6) (= x 5))) NuZot>(get-model) (get-model) Model: loopex -> true iLoop -> 4 x -> 5 zot-p0 -> { 1 -> true 6 -> true 0 -> true 2 -> true 3 -> true 4 -> true 5 -> true else -> true } NuZot>(pop) (pop) Stack level: 1 NuZot>(assert (= x 10)) (declare-fun zot-p1 (Int) Bool) (assert (zot-p1 1)) (assert (-> loopex (iff (zot-p1 6) (zot-p1 iLoop)))) (assert (-> (! loopex) (! (zot-p1 6)))) (assert (iff (zot-p1 0) (= x 10))) (assert (iff (zot-p1 1) (= x 10))) (assert (iff (zot-p1 2) (= x 10))) (assert (iff (zot-p1 3) (= x 10))) (assert (iff (zot-p1 4) (= x 10))) (assert (iff (zot-p1 5) (= x 10))) (assert (iff (zot-p1 6) (= x 10))) NuZot>(get-model) (get-model) Model: loopex -> true iLoop -> 5 x -> 10 zot-p1 -> { 1 -> true 6 -> true 0 -> true 2 -> true 3 -> true 4 -> true 5 -> true else -> true } NuZot>(exit) (exit) NuZot shell terminated
You can run the push and pop example by executing java -jar NuZot.jar --file examples/PushAndPop.zot
.
The example OnlyTomorrow.zot shows a predicate which is only satisfied for one instant:
(set-info :k 5) (declare-tfun x () Bool) (assert (! x)) (assert (next x)) (assert (! (next (next x)))) (get-model)
If you run this example by executing java -jar NuZot.jar --file examples/OnlyTomorrow.zot
.
NuZot will generate the following model:
Model: loopex -> true iLoop -> 5 zot-p0 -> { 1 -> true 6 -> false 0 -> true 2 -> false 3 -> true 4 -> false 5 -> false else -> false } zot-p1 -> { 1 -> true 6 -> true 0 -> false 2 -> false 3 -> true 4 -> true 5 -> true else -> true } x -> { 0 -> false 1 -> false 2 -> true 3 -> false 4 -> true 5 -> true 6 -> true else -> true } zot-p2 -> { 1 -> true 6 -> false 0 -> false 2 -> false 3 -> false 4 -> false 5 -> false else -> false } zot-p3 -> { 6 -> false 1 -> false 2 -> true 3 -> false 4 -> false 5 -> false 0 -> true else -> false }
Please continue to the advanced tutorial page.