Isabelle/HOL 中的 primrec 和 fun 有什么区别?

2024-02-04

我正在阅读 Isabelle 教程,并试图澄清我对 primrec 和 fun 的使用的概念。到目前为止我搜索过的内容,包括答案here https://lists.cam.ac.uk/mailman/htdig/cl-isabelle-users/2012-August/msg00042.html;我知道 primrec 内部的构造函数只能有一个方程,而 primrec 默认情况下有 [simp],而 fun 可以有多个方程,并且需要明确指定自动化策略。然而,我仍然很难清楚地理解它。

有哪位好心人能用一些例子来解释一下吗?


primrec does 原始递归 http://en.wikipedia.org/wiki/Primitive_recursive_function在代数数据类型上(或者已经设置为看起来像这样的东西,比如自然数;我对它的内部了解不多)。这意味着您可以拥有的递归方案类型有很多限制:

  • 左侧只能有一个非变量参数(即只有一个参数可以进行模式匹配)。你不能做类似的事情f (x#xs) (y#ys) = … or f n = (if n = 0 then … else …).
  • 您只能在单个构造函数上进行模式匹配(即x # xs, 但不是x # y # xs)
  • 您只能在左侧匹配的变量上递归调用该函数,即f (Node l r) = … f l … f r …, 但不是f (Node l r) = … f (Node r l) ….
  • 仅当嵌套递归反映数据类型的定义时才可能。

fun来自函数包,是一个简化版本function它试图证明模式的详尽性、非重叠性和自动终止性。这适用于实践中出现的大多数功能;如果没有,则必须使用function并亲手证明这些事情。终止通常是一个棘手的问题。

之间的主要区别fun and primrec就是它fun没有我上面列出的任何限制primrec. With fun,几乎一切顺利。据我所知,一切primrec可以做,fun也可以做。

function还可以做很多其他事情,例如互递归函数、偏函数(即不在所有输入上终止的函数)、条件函数方程等。请参阅功能包手册 http://isabelle.in.tum.de/dist/Isabelle2014/doc/functions.pdf欲了解更多信息。

该机的另一个特点是function命令的优点是它为用它定义的每个函数生成许多有用的规则,例如cases规则,即induction规则,即elims规则等。此外,您还可以使用以下命令自动导出专门的消除规则fun_cases命令。手册中也对此进行了描述。

TL;DR:约阿希姆所说的。fun通常是您想要使用的。如果还不够,请使用function。您可以使用primrec对于非常简单的功能,但这样做并没有真正的优势。对于可能的非终止函数来说,另一种可能有趣的选择是inductive.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Isabelle/HOL 中的 primrec 和 fun 有什么区别? 的相关文章

  • 什么样的类型定义在本地环境中是合法的?

    在伊莎贝尔的NEWS文件 我发现 命令 typedef 现在可以在本地理论上下文中工作 无需 引入对参数或假设的依赖 这不是 可以在 Isabelle Pure HOL 中实现 请注意 逻辑环境可能 包含本地 typedef 的多种解释 具
  • 如何在 Isabelle/jEdit 中启用“跟踪”

    I m a vim风扇 但仅emacs有这个 Isabelle HOL 环境 jEdit很棒 但我不能使用 using simp trace true like in emacs 如何启用 跟踪 jEdit 你确实可以使用simp trac
  • Isabelle/HOL 验证器核心

    Question Isabelle HOL验证器的核心算法是什么 我正在寻找方案元循环评估器级别的东西 澄清 我只对Verifier 而不是自动定理证明的策略 Context 我想从头开始实现一个简单的证明验证器 纯粹出于教育原因 而不是用
  • 当证明已经完成但给出“无法完善任何待定目标”错误时,为什么我不能在 Isabelle 中明确说明我的情况?

    我正在阅读具体语义的第五章 我在处理这个玩具示例证明时遇到了一些错误 lemma shows ev Suc 0 我知道这超出了需要 因为by cases 神奇地解 决了所有问题并给出了完整的证明 但我想明确说明这些情况 我试过这个 lemm
  • 简化自然色的漂亮印刷

    假设我编写了一个用于反转列表的函数 我想用value命令 只是为了向自己保证我可能做对了 但输出看起来很糟糕 value reverse 1 8 3 gt 1 1 1 1 1 1 1 1 1 1 1 1 a list 如果我告诉伊莎贝尔将这
  • 使用不同大小的函数进行自动终止证明

    我写了一个自定义尺寸的函数size2对于我的数据类型 使用此函数 我可以手动证明函数的终止 termination apply relation measure a b c size2 c apply auto done 有没有办法制作fu
  • 如何在 Isabelle 中定义偏函数?

    我尝试用以下方法定义偏函数partial function关键词 它不起作用 这是最能表达直觉的 partial function tailrec oddity nat gt nat where oddity Zero Zero oddit
  • Isabelle:向量中的最大值

    我想找到自然数向量中的最大值 然而 向量 即 vec 是与集合或列表不同的类型 我考虑了几个行不通的想法 比如调平或提升 vec 的类型或递归函数的定义 您建议采用什么解决方案来获得向量中的最大值 IMPORTS src HOL Algeb
  • 如何在 Isabelle 的 ML 级别轻松编写简单的策略?

    在 Isabelle 理论文件中 我可以编写简单的一行策略 如下所示 apply clarsimp simp split def split prod splits 然而 我发现 当我开始编写 ML 代码来自动化证明 生成 MLtactic
  • 伊莎贝尔语中的“arith”和“presburger”有什么区别?

    到目前为止 我在伊莎贝尔遇到的每一个目标都可以通过使用来解决arith也可以通过以下方式解决presburger反之亦然 例如 lemma odd n nat Suc 2 n div 2 n by presburger or arith 这
  • 伊莎贝尔:setprod 的问题

    以下等式在伊莎贝尔中是否成立 setprod f UNIV n finite set setprod x x f UNIV n finite set 如果是 我该如何证明 tested with Isabelle2013 2 theory
  • 伊莎贝尔证明加法的交换律

    我试图证明 Isabelle HOL 中自定义的交换律add功能 我设法证明了关联性 但我坚持这一点 的定义add fun add nat nat nat where add 0 n n add Suc m n Suc add m n 关联
  • 隐藏运算符以避免 AST 中出现歧义

    我正在尝试伊莎贝尔官方教程中的列表示例 我更换了 with 和 with 具有与 Haskell 相同的语法 现在我收到有关 AST 中含糊之处的警告 我知道我可以隐藏功能hide const但这对于中缀表示法的运算符不起作用 如何在伊莎贝
  • 伊莎贝尔和斯卡拉[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在考虑创建 Eclipse PDE 并且需要与 Isabelle 进行通信 我确实发现一些出版物声
  • 伊莎贝尔的文件准备

    我想获得与相关的 LaTeX 代码这个理论 https github com rjraya Isabelle blob master curves Hales thy 以前的答案仅提供文档的链接 让我描述一下我做了什么 我去了目录Hales
  • 如何让 typedef 类型从类型类的母类型继承运算符

    发布答案后续问题 Brian 提供了答案 并建议使用提升和转移的解决方案 然而 我找不到足够的关于举重和转移的教程信息 无法知道如何调整他的答案来完成我需要做的事情 在这里 我在黑暗中工作 并使用给出的答案作为即插即用模板来提出这个后续问题
  • 伊莎贝尔案例分析

    如何在伊莎贝尔中应用案例分析 我正在寻找类似的东西apply induct x 用于归纳 案例分析通常是通过cases方法 另见索引中的 案例 方法 伊莎贝尔 伊萨尔参考手册 http isabelle in tum de website
  • 法新社的“find_theorems”

    我怎样才能使用find theorems搜索整个正式证据档案馆 AFP 的机制 我已将存档下载到我的计算机上 并且可以从中导入理论 例如 如果我写imports Kleene Algebra Kleene Algebra Models那么该
  • 修复区域设置扩展中的类型变量

    鉴于此代码 locale A fixes foo a locale B A fixes bar a a locale C A fixes baz a begin sublocale B foo foo baz end I get Type
  • 添加后收集所有非未定义值

    我对伊莎贝尔有以下补充 function proj add real real bit real real bit real real bit where proj add x1 y1 l x2 y2 j add x1 y1 x2 y2 l

随机推荐

  • Flash:距 MovieClip 最近的点

    我需要限制一个点内DisplayObject艺术家给我的 我让它工作 但仅适用于光标仍在内部的情况bounds 有限对象称为limited function onSqMouseMove event MouseEvent if bounds
  • 在画布中移动按钮

    当鼠标悬停在 UIElement 上并且用户按下 Ctrl 键时 以下代码应该在画布中移动 UIElement void keydown Object sender KeyEventArgs e if e Key Key LeftCtrl
  • 如何运行本地 Windows 应用程序并将输出通过管道传输到浏览器

    我有 Windows 应用程序 EXE 文件是用 C 编写并使用 MS Visual Studio 构建的 它将 ASCII 文本输出到标准输出 我希望增强 ASCII 文本以包含有限的 HTML 和一些链接 我想调用此应用程序 EXE 文
  • 将向量列表转换为计数数据帧[重复]

    这个问题在这里已经有答案了 我有一个存储在如下列表中的字符向量列表 basket1 lt c Apple Orange Banana Apple Apple Grape basket2 lt c Grape Grape Grape Grap
  • 如何获取适配器内的视图高度以创建大小的位图?

    我将自定义 CursorAdapter 与自定义项一起使用 我需要视图高度来调整资源文件夹中位图的大小 并将此调整大小的位图设置为列表项中的 ImegeView Override public void bindView View view
  • 在 Firefox 中检测缩放

    我想检测浏览器是否放大或缩小 并不真正关心知道该值 但我认为无论如何都需要在决策过程中找到它 我已经阅读了很多关于该主题的其他 SO 帖子 但是没有一个给出的解决方案适用于 FF 尽管有 IE7 8 和 chrome 解决方案 哦 我不能使
  • 如何强制在派生类中调用基类构造函数?

    我相当确定基本的 C 问题 如果我有一个带有不带参数的构造函数的基类 并且只初始化一些受保护的成员 如果派生类与参数匹配 它是否也会立即调用此基构造函数 一厢情愿但不太可能的想法 如果不是 则为有没有办法强制它从派生类自动调用所述基构造函数
  • 数据绑定:如果属性不为空,则设置属性

    无法理解 仅当变量字段不为空时如何设置视图的某些属性 例如
  • 检查 python 类属性

    我需要一种方法来检查类 以便我可以安全地识别哪些属性是用户定义的类属性 问题是 dir inspect getmembers 等函数返回所有类属性 包括预定义的属性 例如 class doc dict hash 这当然是可以理解的 有人可能
  • 使用 VSTS 设置发布到文件夹

    我正在使用publish to folder通过右键单击项目 gt 发布 gt 发布到文件夹 通过 Visual Studio 选项 结果始终是已应用转换的可复制项目 我想使用 VSTS 自动化此过程并在 VSTS 上进行设置 我使用了后续
  • 如何在TreeView中显示目录? [复制]

    这个问题在这里已经有答案了 下面是我的代码 DirectoryInfo directoryInfo new DirectoryInfo C Users Shahul Documents Visual Studio 2010 Projects
  • sql if 在插入语句中没有选择

    昨天我问了这个问题 if在mysql中插入语句 https stackoverflow com questions 14960022 if in mysql insert statement答案非常有效 问题是 如果值不存在 我需要在表中插
  • 如何将字符串连接到现有文件?

    我有一个文本文件 其中有内容 我想向其中附加文本 这是我的代码 File outputFile new File hello out outputFile createSync List
  • 使用具有不同根和节点类型的 TreeTable

    我有以下问题 我想要一个类似 JTeeTable 的表组件 只不过树的根 下面的类 和节点不是同一类型 例如 假设我有以下课程 public final class Entry private int id private String t
  • 从哪里可以获得 x509 证书?

    我目前正在尝试创建基于 SslStream 类的聊天 我正在浏览该 msdn 链接 点击这里 http msdn microsoft com en us library system net security sslstream aspx
  • Visual Studio 2013 功能带有 NUnit 的 Code Lens

    在新的 Visual Studio 2013 中 有一个很好的新功能 称为代码镜头 http channel9 msdn com Series Visual Studio 2012 Premium and Ultimate Overview
  • 在 Python 中创建多个 CSV 工作表

    有没有办法在 Python 中以编程方式创建具有多个工作表的 CSV 文件 多个 CSV 文件 每张纸一个 CSV 文件 逗号分隔值文件是纯文本格式 它只能表示平面数据 例如表格 或 工作表 要存储多个工作表 您应该使用单独的 CSV 文件
  • 滚动 ListView,某些图像非常滞后

    我看到下面的屏幕 其中包含一些图像 每个可见页面 6 个图像 对我来说 上下滚动似乎很滞后 就像它再次渲染图像一样 向上滚动似乎比向下滚动更糟糕 有人知道如何提高此类区域的性能以创建漂亮的平滑滚动吗 Update 图像和文本都是从我的 SQ
  • 使用没有 ORM 的 SQL 的规范模式,以及存储库模式

    我一直在研究 martin fowler 的企业架构模式中存储库模式部分简要描述的规范模式 以及网络上的几个示例 然而 几乎所有的示例 描述都是通过利用 ORM 和 IsSatisfiedBy 等方法创建的 这些方法由规范对象执行 并且可能
  • Isabelle/HOL 中的 primrec 和 fun 有什么区别?

    我正在阅读 Isabelle 教程 并试图澄清我对 primrec 和 fun 的使用的概念 到目前为止我搜索过的内容 包括答案here https lists cam ac uk mailman htdig cl isabelle use