如何在Z3 .NET API中为int list定义ADT构造函数
在Z3 .NET API中定义int list的ADT构造函数
对于你给出的代码示例,?1和?2的正确替换值如下:
?1替换为null:因为第二个字段是递归的list类型,按照文档规则,递归类型对应的sorts元素需设为0(在.NET API中用null表示)。?2替换为[|0u|]:递归类型引用的是当前正在定义的list类型,若这是你声明的第一个递归数据类型,它的索引为0,所以sortRefs数组里对应位置填0u。
完整的构造函数调用代码如下:
_.MkConstructor("cons", "is_cons", [|"x"; "y"|], [|_.mkIntSort(); null|], [|0u|])
关键逻辑说明
sorts数组:第一个元素是明确的int类型,直接传入_.mkIntSort();第二个元素是待定义的递归list类型,因此用null占位。sortRefs数组:其元素数量需与sorts中null元素的数量一致,每个元素对应递归数据类型的索引。这里仅第二个字段是递归类型,且当前定义的list是第一个递归数据类型,所以传入[|0u|]。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

