下面的 smt2 代码给出了与类型相关的错误。
( declare-datatypes ( ( List 1 ) )
( ( par ( T ) ( ( cons ( hd T ) ( tl ( List T ) ) )
( nil )
) )
) )
(declare-sort Ty 0)
(define-fun-rec func ((x (List Ty) ) (y (List Ty))) (List Ty)
(match x ( ((cons xt xts) ( cons xt (func xts y)) )
( nil nil )
)
)
)
错误:
(error "Both branches of the ITE must be a subtype of a common type.
then branch: ((lambda ((xt Ty) (xts (List Ty))) (cons xt (func xts y))) (hd x) (tl x))
its type : (List Ty)
else branch: nil
its type : (List T)
")
为什么它不知道使用返回类型,有没有办法做到这一点?
一种方法是手动将其设置为(nil (as nil (List Ty)) )
解决错误但我不想在程序中的每个 nil 处指定返回类型。还有其他方法吗?或者我需要提到的任何选项 enable ?