У меня есть программа, которая сортирует переменные, и я пытаюсь проверить ее правильность с помощью Z3, но у меня есть один сегмент кода, где переменные меняются местами, и я не знаю, как это смоделировать в синтаксисе SMT. Вот исходный сегмент кода:
if (x > y) {
temp = x;
x = y;
y = temp;
}
А по поводу SMT я написал утверждение, но думаю оно не совсем верное:
(declare-fun x () Int)
(declare-fun y () Int)
(declare-fun temp () Int)
(assert (=> (> s1 s2) (and (= tmp s1) (= s1 s2) (= s2 tmp))))
Любые идеи, как выполнить назначение переменных в SMT?