リスト(Rise4Fun)のcontains-operationをAxiomatisingとして
(declare-fun Seq.in ((List Int) Int) Bool)
(assert (forall ((e Int))
(not (Seq.in nil e))))
(assert (forall ((xs (List Int)) (e Int))
(iff
(not (= xs nil))
(=
(Seq.in xs e)
(or
(= e (head xs))
(Seq.in (tail xs) e))))))
Z34.0がアサーションに反論できるようにします
(declare-const x Int)
(assert (Seq.in nil x))
(check-sat) ; UNSAT, as expected
私の目には同等の公理化
(assert (forall ((xs (List Int)) (e Int))
(ite (= xs nil)
(= (Seq.in xs e) false)
(=
(Seq.in xs e)
(or
(= e (head xs))
(Seq.in (tail xs) e))))))
結果はunknown
。
これはトリガーの問題でしょうか、それとも動作の違いを説明できるListドメインに固有の何かがありますか?