Я новичок в z3 и пытаюсь использовать z3 для решения следующей проблемы:
![formula](https://i.stack.imgur.com/WvxBZ.png)
Мой код z3 следующий:
(declare-sort A)
(declare-sort O)
(declare-const o1 O)
(declare-const o2 O)
(declare-fun x () A)
(declare-fun g (A O) A)
(declare-fun f (A) Int)
(assert (= (f x) 0))
(assert (forall ((a A))
(forall ((o O))
(= (f (g a o)) (+ (f a) 1))
)
)
)
(assert (= (f (g x o1)) 1))
(assert (= (f (g (g x o2) o1)) 2))
(check-sat)
(get-model)
Когда я запускаю это (используя z3 без флагов), кажется, что оно зависает (я позволил ему работать в течение часа, прежде чем его остановить).Я знаю, что z3 не является процедурой принятия решений для универсально количественных формул в целом.Эта проблема выходит за пределы z3 или мне нужно что-то еще, чтобы z3 решил эту проблему?