この投稿は、Z3の組み込みリストの長さ関数を公理化する方法を示しています。ただし、この関数はソート固有(ここではInt)であり、boolのリストやカスタムソートには適用できません。
; declare len as an uninterpreted function
(declare-fun len ((List Int)) Int)
; assert defining equations for len as an axiom
(assert (forall ((xs (List Int)))
(ite (= nil xs)
(= 0 (len xs))
(= (+ 1 (len (tail xs))) (len xs)))))
ソートジェネリックリスト関数をエンコードする最も賢い方法は何でしょうか?(私が正しく覚えていれば、関数自体をジェネリックにすることはできません)。