首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FStar中简单断言的问题

FStar中简单断言的问题
EN

Stack Overflow用户
提问于 2020-05-20 00:06:06
回答 1查看 45关注 0票数 0

我刚刚开始学习FStar。我想说的是,对于每个自然数,都存在一个更大的自然数。

代码语言:javascript
复制
let _ = assert (forall (m:nat). exists (n: nat). n > m)

它失败了,我想知道为什么。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-20 00:27:39

默认情况下,使用Z3的启发式进行基于模式的量化实例化,来处理像这里这样的量化公式。您可以在这里阅读更多关于Z3模式的内容:https://rise4fun.com/Z3/tutorialcontent/guide#h28https://github.com/FStarLang/FStar/wiki/Quantifiers-and-patterns

简而言之,您需要帮助F*和Z3为存在量词找到一个见证。一种方法是这样做:

代码语言:javascript
复制
let lem (m:nat)
  : Lemma (exists (n:nat). n > m)
  = assert (m + 1 > m)

这证明了一个引理:对于任何m:nat,都存在大于mn:nat。它向F*+Z3提供的证据表明,m + 1是为n选择的一个很好的见证。

您可以通过多种方式将这样的引理转换为量化的断言。有关这方面的一些示例,请参阅FStar.Classical。例如,这是可行的:

代码语言:javascript
复制
let _ =
  FStar.Classical.forall_intro lem;
  assert (forall (m:nat). exists (n: nat). n > m)

这里是另一种方法,它避免定义中间引理,而是使用中间断言。

代码语言:javascript
复制
let _ =
  assert (forall (m:nat). m + 1 > m);
  assert (forall (m:nat). exists (n: nat). n > m)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61895603

复制
相关文章

相似问题

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