【发布时间】:2017-12-03 16:01:25
【问题描述】:
我想在 SMT v2.6 中对泛型数据类型的行为进行建模。我使用 Z3 作为约束求解器。我根据official example 建模了一个通用列表作为参数化数据类型,方法如下:
(declare-datatypes (T) ((MyList nelem (cons (hd T) (tl MyList)))))
我希望列表就数据类型而言是通用的。稍后,我想通过以下方式声明常量:
(declare-const x (MyList Int))
(declare-const y (MyList Real))
但是,现在我想在通用数据类型 MyList 上定义函数(例如,长度操作、空操作等),以便它们可重用于所有 T。你知道我怎么能做到这一点吗?我确实尝试过:
(declare-sort K)
(define-fun isEmpty ((in (MyList K))) Bool
(= in nelem)
)
但这给了我一个错误信息;我想,要让这个例子工作 Z3 需要做一些类型推断。
如果您能给我一个提示,那就太好了。
【问题讨论】: