Я использую SBV (с бэкэндом Z3) в Haskell для создания некоторых теоритических предсказателей. Я хочу проверить, если forall x
и y
с заданными ограничениями (например, x + y = y + x
, где +
- это "плюс оператор", а не добавление), действуют некоторые другие условия. Я хочу определить аксиомы о выражении +
(например, ассоциативность, идентификатор и т.д.), А затем проверить дальнейшие равенства, например, проверить, является ли a + (b + c) == (a + c) + b
формальным a
, b
и c
.
Я пытался выполнить это, используя что-то вроде:
main = do
let x = forall "x"
let y = forall "y"
out <- prove $ (x .== x)
print "end"
Но, похоже, мы не можем использовать оператор .==
по символическим значениям. Это недостающая функция или неправильное использование? Можем ли мы как-то это использовать SBV?