首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查两个FStar.et的相等

如何检查两个FStar.et的相等
EN

Stack Overflow用户
提问于 2019-11-18 17:25:30
回答 1查看 148关注 0票数 1

如何在FStar中检查两个集合是否相等?下面的表达式类型为Type0,而不是Tot Prims.bool,因此我不确定如何使用它来确定集合是否相等(例如,在条件中)。是否应该使用不同的函数而不是Set.equal

代码语言:javascript
复制
Set.equal (Set.as_set [1; 2; 3]) Set.empty
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-19 11:19:35

FStar.Set中定义的集合使用函数作为表示。因此,例如,整数的集合s就是将整数映射到布尔函数的函数。例如,set {1, 2}表示为以下函数:

代码语言:javascript
复制
// {1, 2}
fun x -> if x = 1 then true
         else (
            if x = 2 then true
            else false 
         )

您可以添加/删除值(也就是说,创建一个新的lambda),或者请求一个值作为一个成员(即应用该函数)。

然而,当要比较两组类型的T时,您就不走运了:对于s1s2两组,s1 = s2意味着对于任何值x : Ts1 x = s2 x。当T的居民集是不有限的,这是不可计算的。

解决方案函数表示不适合您。您应该有一个表示,其比较关系是可计算的。FStar.OrdSet.fst将集合定义为列表:您应该使用该集合。

请注意,此OrdSet模块需要对集合中持有的值进行总体排序。(如果您想要一组无序值,我刚才是实现了,但它有点麻烦.)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58919975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档