С учетом типичного типа списка:
(declare-datatypes (X)(
(Lst
(nil)
(insert
(head X)
(tail Lst)))))
Я пытаюсь создать функцию, которая возвращает, находится ли данный элемент в данном списке.Похоже, я должен использовать неинтерпретированную функцию.Я пробовал разные подходы без успеха.Например:
(declare-fun is-in-lst ((Int)(Lst Int)) Bool)
(assert (forall((elem Int)(lst (Lst Int)))
(=
(is-in-lst elem lst)
(and
(is-insert lst)
(or
(= elem (head lst))
(is-in-lst elem (tail lst)))))))
(declare-const l1 (Lst Int))
(assert (is-in-lst 6 l1))
(assert (is-in-lst 5 l1))
Это возможно в Z3?Если это так, что будет лучшим способом решения проблемы?Спасибо