伊莎贝尔语中“case _ of _”是什么意思

2024-04-05

在读的时候这个关于商类型的答案 https://stackoverflow.com/a/67237629/14656198,我偶然发现了这个结构“case _ of _ ⇒ _”。经检查手册 https://isabelle.in.tum.de/doc/isar-ref.pdf,没有这样的定义,但是“”有单独的定义case _“(§6.5.1)和”of _“(§6.4.3)。尽管如此,阅读这些定义只会让我对这个结构的含义更加困惑。

因此,我决定提出一个我可以证明的引理的简单版本,即:

lemma test: "(case n of (0::nat,0::nat) ⇒ (a,b) = n) ⟹ a = 0 ∧ b = 0"

在我看来,在分析了上述问题的上下文之后,这个陈述应该相当于"(a,b) = (0,0) ⟹ a = 0 ∧ b = 0",这应该是微不足道的证明。出色地,大锤不敢苟同:

"cvc4": Timed out 
"z3": Timed out 
"e": Timed out 
"spass": Timed out 
"remote_vampire": The prover gave up

所以看来我误解了这个结构的含义。

鉴于此,该声明的含义是什么“case _ of _ ⇒ _“在伊莎贝尔?


在《伊莎贝尔》中,这种类型的陈述case _ of _ ⇒ _ | _ ⇒ _ | _ ⇒ _ | ... 是模式匹配的一种形式。

您可能想看看 §2.5.4伊莎贝尔的教程 https://isabelle.in.tum.de/doc/tutorial.pdf(§2.5.5 和 §2.5.6 也很有用)。这个关于模式匹配的问题 https://stackoverflow.com/questions/2502354/what-is-pattern-matching-in-functional-languages and 维基百科文章 https://en.wikipedia.org/wiki/Pattern_matching通常可以提供有关模式匹配的更多信息。

您缺少的是不能保证模式是详尽的。如果没有模式匹配,结果是undefined.

Nitpick 实际上会在你的引理上自动找到一个反例:

Nitpicking formula... 
Kodkod warning: Interrupt 
Nitpick found a counterexample:
  Free variables:
    a = 1
    b = 0
    n = (0, 1)

让我们插回 n 的值:

lemma ‹(case (0,1) of (0::nat,0::nat) ⇒ (a,b) = n)⟹ a = 0 ∧ b = 0›
  apply simp
(*
proof (prove)
goal (1 subgoal):
 1. undefined ⟹ a = 0 ∧ b = 0
*)

编辑,回答以下问题:(case (0,1) of (0::nat,0::nat) ⇒ (a,b) = n)大致意思是[1]:

(case_prod (0,1) of 
   (0::nat,0::nat) ⇒ (a,b) = n
 | _               ⇒ undefined)

where case_prod是对的析构函数。因此,如果不匹配任何模式,结果将是不确定的。

[1]完整输出:

ML ‹@{term ‹(case (0,1) of (0::nat,0::nat) ⇒ (a,b) = n)›}›
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

伊莎贝尔语中“case _ of _”是什么意思 的相关文章

  • 如何在 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 我想从头开始实现一个简单的证明验证器 纯粹出于教育原因 而不是用
  • 使用单射函数的反值

    我试图证明这个引理 lemma assumes x inv f y and inj f and x undefined shows y range f using assms try 但 Nitpick 告诉我这个说法并不正确 Trying
  • 在《伊莎贝尔》中证明关于 THE 的直观陈述

    我想证明伊莎贝尔中类似的引理 lemma assumes y THE x P x shows P THE x P x 我想这个假设意味着THE x P x存在并且定义明确 所以这个引理也应该是正确的 lemma assumes y THE
  • 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 的 ML 级别轻松编写简单的策略?

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

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

    以下等式在伊莎贝尔中是否成立 setprod f UNIV n finite set setprod x x f UNIV n finite set 如果是 我该如何证明 tested with Isabelle2013 2 theory
  • Isabelle函数定义实例分析

    想象一下我有一个包含三种情况的函数定义 function f where eq1 if cond1 eq2 if cond2 eq3 if cond3 我怎样才能证明一些方程 f x y f y x 使用左侧的案例分析 仅编写 apply
  • 伊莎贝尔证明加法的交换律

    我试图证明 Isabelle HOL 中自定义的交换律add功能 我设法证明了关联性 但我坚持这一点 的定义add fun add nat nat nat where add 0 n n add Suc m n Suc add m n 关联
  • Isabelle/HOL 中的 primrec 和 fun 有什么区别?

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

    我想获得与相关的 LaTeX 代码这个理论 https github com rjraya Isabelle blob master curves Hales thy 以前的答案仅提供文档的链接 让我描述一下我做了什么 我去了目录Hales
  • 伊莎贝尔中的“real_of_int”和“real”?

    什么是real of int real and int在伊莎贝尔 它们听起来有点像类型 但通常类型的写法类似于x real这些写法就像real x 我无法证明以下陈述 S n x x S n x C x C n x S x 我注意到伊莎贝尔
  • 法新社的“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
  • Subst refl 关闭重复的子目标。这是怎么回事?

    In this https stackoverflow com questions 15608399 how do i remove duplicate subgoals in isabelle线程马蒂厄证明了subst refl关闭重复的

随机推荐

  • 错误 CS7036 没有给出与“SpecflowBaseTest.SpecflowBaseTest(IWebDriver)”所需的形式参数“driver”相对应的参数

    我正在创建一个新框架 因为 PageFactory 已被弃用 我收到错误 Error CS7036 There is no argument given that corresponds to the required formal par
  • 录制视频时将动态文本渲染到 CVPixelBufferRef 上

    我正在使用录制视频和音频AVCaptureVideoDataOutput and AVCaptureAudioDataOutput并在captureOutput didOutputSampleBuffer fromConnection 委托
  • 当线程数超过 32705 时 boost::thread_resource_error

    我正在实现消息传递算法 消息通过图的节点传播 阻塞直到它们收到足够的信息 来自其他邻居 来发送消息 如果我将每条消息放入其自己的线程中并使用 boost condition 来暂停线程 直到所有必需的信息可用 则该算法很容易编写 我创建了数
  • Laravel - 何时使用 ->get()

    我很困惑什么时候 gt get 在拉拉维尔 E G DB table users gt find 1 不需要 gt get 来检索结果 也不需要User find 1 laravel 文档说 使用 get 或第一个方法执行查询 我已阅读 F
  • 使用 Javascript 跨浏览器处理“Enter”键按下

    我有以下示例 可以轻松检测到 Enter 键按下并正确处理它 这里是
  • bookshelf.js 计数方法

    我一直在寻找如何使用 Bookshelf js 进行基本计数 例如 SELECT COUNT something FROM table 但无济于事 我有什么遗漏的吗 或者它只是与手动选择查询一起使用 Thanks 目前这是一个手动查询 例如
  • 通过 Powershell 关闭时无法停止所有 Excel 进程

    使用此代码 我打开 excel 使用visible false 以便用户看不到它 写入工作簿 然后在脚本结束后打开 excel 使其可见 或完全关闭它而不保存 当我保存 Excel 使其保持打开状态 结束脚本 然后稍后手动关闭 Excel
  • 如何将 JavaScript 中的数字除以任意精度(例如小数点后 28 位)

    我知道https floating point gui de https floating point gui de 事实上 有许多库可以帮助处理大数 但令人惊讶的是 我找不到任何可以处理除法运算结果中小数点后 19 位以上的库 我花了几个
  • 在 Windows 中批量将 cp1252 转换为 utf-8

    所以 我一直在尝试使用我在网上找到的提示和矩阵 将大型java源代码树从cp1252转换为Windows中的UTF 8 特别是here https stackoverflow com a 9310774 问题是 我在 Windows 上 我
  • 将 Select 语句放在 Hibernate 事务上

    我已经阅读了一段时间有关 Hibernate 的内容 但我似乎无法理解有关 Hibernate 的一个概念Transaction 在我访问过的一些网站上 Select语句处于事务模式是这样的 public List
  • 使用短语构建语料库

    我的文件如下 doc1 very good very bad you are great doc2 very bad good restaurent nice place to visit 我想让我的语料库与 这样我的最后DocumentT
  • 将点云转换为深度/多通道图像

    我有一个通过使用立体相机扫描平面生成的点云 我已经生成了法线 fpfh 等特征 并使用这些信息我想对点云中的区域进行分类 为了能够使用更传统的 CNN 方法 我想将此点云转换为 opencv 中的多通道图像 我将点云折叠到 XY 平面 并与
  • 如何在 Safari HTML5 中启用表格行的重影效果?

    当我拖动项目时没有重影效果 table行 在 Safari 上 我用table所以这是一个tr 幻影效果是指您可以看到跟随鼠标移动的项目 在 Chrome FF 上它可以工作 有人知道为什么吗 我注意到它不仅在tr td 如果我使用li o
  • RSA 加密 AES 密钥的强度

    我目前正在开发一个在客户端和服务器之间传输数据的系统 并且想知道我计划使用的加密强度是多少 我的想法是拥有一个私钥 公钥 RSA 密钥对 并将公钥分发给每个客户端 将私钥仅保留在服务器上 然后 每个客户端将生成自己的 AES 密钥并使用 R
  • 绝对定位与固定定位

    我有一个自定义对话框 当我单击按钮时会显示该对话框 显示对话框后 我会显示一个覆盖图 覆盖层的高度和宽度为100 x 100 问题来了 高度 100 只是获取浏览器窗口的高度 所以当我在页面上向下滚动时 它仍然位于顶部 如何将其高度设置为整
  • 如何获取C中最右边设置位的位置

    int a 12 例如 12 的二进制是 1100 所以答案应该是 3 因为设置了右起第 3 位 我想要最后一个最设置位的位置a 谁能告诉我该怎么做 NOTE 我只想要位置 在这里我不想设置或重置该位 所以它与 stackoverflow
  • 如何对我的方法输入参数设置验证约束?

    以下是实现此目标的典型方法 public void myContractualMethod final String x final Set
  • Android:带有 com.android.email 的 ACTION_SEND_MULTIPLE

    我正在尝试将 Intent 中的多个附件发送到电子邮件应用程序 而不是 Gmail 应用程序 我在用着 Intent emailIntent new Intent android content Intent ACTION SEND MUL
  • 在 docker exec 命令中使用“*”

    我正在尝试在运行的 docker 容器中运行特定命令 Docker exec t containername1 ls tmp sth 作为回报我收到 ls cannot access tmp sth No such file or dire
  • 伊莎贝尔语中“case _ of _”是什么意思

    在读的时候这个关于商类型的答案 https stackoverflow com a 67237629 14656198 我偶然发现了这个结构 case of 经检查手册 https isabelle in tum de doc isar r