aboutsummaryrefslogtreecommitdiff
path: root/entries/funemy/z3/z3fib.sh
diff options
context:
space:
mode:
authorfunemy2022-10-23 23:14:40 +0000
committerfunemy2022-10-23 23:14:40 +0000
commit679ee8faf561b6e53f582edef2d93b65615bcea7 (patch)
tree6d44da9114f4d0b832619a07a932b828630ed713 /entries/funemy/z3/z3fib.sh
parent72c87a2aafa2bd98952494463353b2a48c1a06f5 (diff)
z3 fib impl
Diffstat (limited to 'entries/funemy/z3/z3fib.sh')
-rwxr-xr-xentries/funemy/z3/z3fib.sh48
1 files changed, 48 insertions, 0 deletions
diff --git a/entries/funemy/z3/z3fib.sh b/entries/funemy/z3/z3fib.sh
new file mode 100755
index 0000000..fdc8937
--- /dev/null
+++ b/entries/funemy/z3/z3fib.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+# Instruction:
+# 1. having z3 installed and under you $PATH
+# 2. making sure z3fib.sh is executable, by `chmod +x z3fib.sh`
+# 3. run as `./z3fib.sh [length of the fib sequence]`
+# 4. having fun :)
+
+if [ -e fib.smt2 ]
+then
+ rm -f fib.smt2
+ touch fib.smt2
+else
+ touch fib.smt2
+fi
+
+for i in $(seq 0 $1);
+do
+ echo "(declare-const x$i Int)" >> fib.smt2
+done
+
+echo "" >> fib.smt2
+
+echo "(assert" >> fib.smt2
+echo " (and" >> fib.smt2
+
+for i in $(seq 0 $1);
+do
+ echo " (>= x$i 0)" >> fib.smt2
+done
+
+echo " (= x0 0)" >> fib.smt2
+echo " (= x1 1)" >> fib.smt2
+
+for i in $(seq 2 $1);
+do
+ echo " (= x$i (+ x$(($i - 2)) x$(($i - 1))))" >> fib.smt2
+done
+
+echo " )" >> fib.smt2
+echo ")" >> fib.smt2
+
+echo "" >> fib.smt2
+
+echo "(check-sat)" >> fib.smt2
+echo "(get-model)" >> fib.smt2
+
+z3 fib.smt2