在SMT-LIB Standard Version 2.6中引入了match
构造,可以通过以下方式使用它:
; Axiom for list append : version 1
; List is a parametric datatype
; with constructors " nil " and " cons "
;
(forall ((l1 (List Int)) (l2 (List Int)))
(= (append l1 l2)
(match l1 (
(nil l2)
((cons h t) (cons h (append t l2)))))))
使用C API编写此代码的正确方法是什么?还是只是翻译成一系列的ite
和let
绑定?