如何在 Isabelle 中定义偏函数?

2023-12-14

我尝试用以下方法定义偏函数partial_function关键词。它不起作用。这是最能表达直觉的:

partial_function (tailrec) oddity :: "nat => nat"
where
  "oddity Zero = Zero "
| "oddity (Succ (Succ n)) = n"

然后我尝试了以下操作:

partial_function (tailrec) oddity :: "nat => nat"
where
  "oddity arg = ( case arg of (Succ (Succ n)) => n
                          | Zero => Zero
                )"

partial_function (tailrec) oddity :: "nat => nat"
where
  "oddity (Succ(Succ n)) = n
   | oddity Zero = Zero"

partial_function (tailrec) oddity :: "nat => nat"
where
  "oddity n =
   (if n = Zero then Zero
    else if (n >= 2)
      then do { m ← oddity (n-2); m })"

他们都没有工作。我想我的尝试存在概念和句法问题,这些问题是什么?


您的定义有两个问题:

  1. partial_function不支持左侧的模式匹配。这必须模仿case右边的表达式。

  2. 类型的构造函数nat are Suc and 0, not Succ and Zero。这就是为什么您的 case 表达式会生成错误Succ and Zero不是数据类型构造函数,为什么parital_function抱怨说Zero是右侧的额外变量。

概括起来,主要做了以下工作:

partial_function (tailrec) oddity :: "nat => nat"
where "oddity arg = (case arg of (Suc (Suc n)) => n | 0 => 0 )"

您可以使用模式匹配来恢复简化规则simp_of_case转换自~~/src/HOL/Library/Simps_Case_Conv:

simps_of_case oddity_simps[simp]: oddity.simps

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

如何在 Isabelle 中定义偏函数? 的相关文章

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

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

    Question Isabelle HOL验证器的核心算法是什么 我正在寻找方案元循环评估器级别的东西 澄清 我只对Verifier 而不是自动定理证明的策略 Context 我想从头开始实现一个简单的证明验证器 纯粹出于教育原因 而不是用
  • 使用单射函数的反值

    我试图证明这个引理 lemma assumes x inv f y and inj f and x undefined shows y range f using assms try 但 Nitpick 告诉我这个说法并不正确 Trying
  • 当证明已经完成但给出“无法完善任何待定目标”错误时,为什么我不能在 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 如果我告诉伊莎贝尔将这
  • 在 Isabelle 等中定义不同类型的不相交并集

    我问了一系列问题 直到我可以在 Isabelle 中定义以下简单模型 但我仍然坚持得到我想要的东西 我尝试用一 个例子来非常简短地描述这个问题 Example 假设我有两节课Person and Car Person owns汽车还有dri
  • Isabelle/HOL 中的对象级含义

    我发现 Isabelle HOL 中的许多定理更喜欢元级蕴涵 gt 代替 gt 对象逻辑级别 即高阶逻辑含义 伊莎贝尔维基说粗略地说 应该使用元级别含义将规则语句中的假设与结论分开 除此之外 关于对象和元级别含义的使用我应该了解什么 我发现
  • 尝试像集合和子集一样对待类型类和子类型

    这个问题与我之前的SO问题有关类型类 我问这个问题是为了设置一个有关语言环境的未来问题 我不认为类型类适合我想要做的事情 但是类型类的工作方式让我了解了我想要从语言环境中得到什么 下面 当我使用大括号表示法时 0 0 它不代表普通的 HOL
  • 使用不同大小的函数进行自动终止证明

    我写了一个自定义尺寸的函数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 的 ML 级别轻松编写简单的策略?

    在 Isabelle 理论文件中 我可以编写简单的一行策略 如下所示 apply clarsimp simp split def split prod splits 然而 我发现 当我开始编写 ML 代码来自动化证明 生成 MLtactic
  • 如何使用持久堆图像在 Isabelle/jEdit 中更快地加载理论?

    假设我有一个目录isabelle afp存储了很多理论的地方 该目录是一个库 我不打算更改其中的文件 我想加快 Isabelle jEdit 的启动时间 默认情况下 所有理论isabelle afp我当前的理论取决于重新处理 我怎样才能跳过
  • 伊莎贝尔语中的“arith”和“presburger”有什么区别?

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

    想象一下我有一个包含三种情况的函数定义 function f where eq1 if cond1 eq2 if cond2 eq3 if cond3 我怎样才能证明一些方程 f x y f y x 使用左侧的案例分析 仅编写 apply
  • Isabelle/HOL 中的 primrec 和 fun 有什么区别?

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

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

    我怎样才能使用find theorems搜索整个正式证据档案馆 AFP 的机制 我已将存档下载到我的计算机上 并且可以从中导入理论 例如 如果我写imports Kleene Algebra Kleene Algebra Models那么该
  • 伊莎贝尔语中“case _ of _”是什么意思

    在读的时候这个关于商类型的答案 https stackoverflow com a 67237629 14656198 我偶然发现了这个结构 case of 经检查手册 https isabelle in tum de doc isar r
  • 修复区域设置扩展中的类型变量

    鉴于此代码 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

随机推荐

  • mysql 如果存在

    我已经盯着这个看了有一段时间了 也许一些新的眼睛能够指出我做错了什么 这是我的查询 IF EXISTS SELECT FROM admin rule module WHERE rule set id 13 AND entity id 2 b
  • 使用应用程序访问令牌时,Android 中的 OAUTH 访问令牌无效

    正如标题所示 当我尝试请求获取安装了该字段的好友列表时 me friends Fields installed access token 我的 logcat 中出现以下错误 Invalid OAuth access token 当查看 fa
  • SSIS包通过部署升级

    在我们的 QA 虚拟环境中 其中包含多个 SQL Server 我想部署一个通过 Visual Studio 2010 维护的 SSIS 2012 包 ispac 项目部署 目标 SSIS 服务器是 2012 但工作站上的客户端包括 SQL
  • php 邮件重复

    有什么原因会导致重复发送电子邮件吗 我有一个 PHP 页面 上面只有这段代码 每次运行它时 它都会向我发送两封电子邮件 感谢您的意见 事实证明这是一个浏览器插件问题 特别是 Firefox 4 0 1 上的 ySlow 2 1 0 我要求我
  • 在 FileZilla 中下载文件的命令行选项

    我正在使用 FileZilla GUI 从 FTP 服务器下载文件 谁能告诉我一个从 FTP 服务器下载文件到本地文件系统的命令行参数 FileZilla 没有任何允许自动传输的命令行参数 也没有任何其他方式 See FileZilla 客
  • 如何在 Google Maps API V3 中检索英文结果

    directionsDisplay new google maps DirectionsRenderer directionsDisplay setMap map directionsService new google maps Dire
  • 对 pandas 数据集执行 SQL 查询

    我有一个 pandas 数据集 称为 df 我怎样才能做类似下面的事情 df query select from df 谢谢 对于那些了解 R 的人 有一个名为 sqldf 的库 您可以在 R 中执行 SQL 代码 我的问题基本上是 pyt
  • 获取不带查询字符串的 url

    我有一个像这样的网址 http www example com mypage aspx myvalue1 hello myvalue2 goodbye 我想要得到http www example com mypage aspx从中 你能告诉
  • JQuery load() 和 .prepend()

    好的 我有以下代码 function ul postbit load load php fadeIn slow 3000 我想要实现的是加载 load php 之后将结果添加到 li 并让它淡入 此时它会覆盖其中的内容ul postbit
  • 未经身份验证的使用超出了 Google Api 日历的每日限制

    我正在测试示例代码 它一直有效 但突然我得到 error errors domain usageLimits reason dailyLimitExceededUnreg message Daily Limit for Unauthenti
  • Windows 不会从所有接口接收多播 IPv6 数据包

    我正在尝试使用此 python 2 7 代码在 Windows 上接收 IPv6 多播数据包 发送到 ff02 1 地址 import socket import win inet pton import struct socket IPP
  • 在java中添加一个简单的按钮,但java不允许我这样做

    好吧 从我的角度来看 我的代码相当不错 足以获得及格分数 但我在添加简单的刷新 随机播放按钮时遇到了麻烦 不使用 JOptionPane 的帮助 Eclipse 似乎没有意识到我创建了一个按钮 这对我来说根本没有意义 因为它告诉我一些关于节
  • python 中的猴子修补:什么时候我们需要它?

    在 Python 中 术语monkey patch仅指在运行时动态修改类或模块 作为初学者 我很难在 python 上下文中理解这个术语 有人能用一个现实世界的例子向我解释一下我们到底是怎么做的吗 类的动态修改 运行时动态修改模块 我坚持用
  • 查找下一个最接近的日期

    我有一些日期当前存储为字符串列表 例如 List
  • 将资源绑定到自定义控件属性

    我正在创建一个自定义按钮 通常显示稍微褪色的文本 并在MouseOver or MouseDown 我在中定义了两个资源Generic xaml我的控件来表示这些文本颜色的画笔
  • edu.stanford.nlp.io.RuntimeIOException:无法连接到服务器

    我正在尝试使用 CoreNLP 服务器注释多个句子 但是 如果我尝试这样做too many我得到的句子 Exception in thread Thread 48 edu stanford nlp io RuntimeIOException
  • Android 片段无法正确替换

    我正在尝试使用片段构建 3 0 的应用程序 应用程序的左侧有一个静态片段 右侧有一个动态片段 我的动态部分中的每个片段都有一个标题 每当我去替换初始片段时 第一个片段的标题仍然显示在第一个片段的标题上方 连续的替换替换了下部 但仍然显示初始
  • 并发更新期间的 Hibernate StaleObjectStateException

    我在 Java J2EE Web 应用程序中使用 Hibernate 3 5 2 和 Spring Core 3 0 1 当不同的用户同时更新同一记录时 我收到 StaleObjectStateExcpetion 事务由 javax per
  • 带有 2 行文本的 Windows Phone 8.1 AppBarButton 图标

    我想知道如何使 AppBarButton 图标具有 2 行文本 我想让它像 Windows 日历中一样 AppBarButton 不在其图标中显示文本或任意 Xaml 它必须是来自字体 位图或路径的符号 对于这样的日历显示 最好使用位图 由
  • 如何在 Isabelle 中定义偏函数?

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