+#!/usr/bin/env python3
+NUMA=7
+
+function generate {
+ local i n j
+ echo "(benchmark a4.smt"
+ echo ":logic QF_UFLIA"
+ echo ":extrafuns ("
+ echo "(a1 Int)"
+ echo "(a$NUMA Int)"
+ for i in $(seq 2 $((NUMA-1))); do
+ for n in $(seq 0 $1); do
+ echo "(i${n}a$i Int)"
+ done
+ done
+ echo ")"
+ echo ":formula"
+ echo "(and"
+
+ echo "(= a1 1)"
+ echo "(= a$NUMA $NUMA)"
+ for i in $(seq 2 $((NUMA-1))); do
+ echo "(= i0a$i $i)"
+ done
+
+ for n in $(seq 1 $1); do
+ echo "(or"
+ for i in $(seq 2 $((NUMA-1))); do
+ echo "(and"
+ [ $i = 2 ] && prev=1 || prev="i$((n-1))a$((i-1))"
+ [ $i = $((NUMA-1)) ] && next=7 || next="i$((n-1))a$((i+1))"
+ echo "(= i${n}a$i (+ $prev $next)) "
+ for j in $(seq 2 $((NUMA-1))); do
+ if [ $i != $j ]; then
+ echo "(= i${n}a$j i$((n-1))a$j)"
+ fi
+ done
+ echo ")"
+ done
+ echo ")"
+ done
+
+ echo "(or"
+ for i in $(seq 2 $((NUMA-1))); do
+ echo "(and"
+ echo "(>= i${1}a$i 50)"
+ echo "(or"
+ for j in $(seq 2 $((NUMA-1))); do
+ if [ $i != $j ]; then
+ echo "(= i${1}a$i i${1}a$j)"
+ fi
+ done
+ echo "))"
+ done
+ echo ")))"
+}
+
i=1
-while [ $(python3 a4.py $i | yices-smt) = "unsat" ]; do
+while [ $(generate $i | yices-smt) = "unsat" ]; do
echo "N=$i is still unsat"
i=$((i+1))
done
echo "N=$i is sat thus minimum N=$i"
-python3 a4.py $i | yices-smt -m