伊莎贝尔证明加法的交换律

2024-01-10

我试图证明 Isabelle/HOL 中自定义的交换律add功能。我设法证明了关联性,但我坚持这一点。

的定义add:

fun add :: "nat ⇒ nat ⇒ nat" where
"add 0 n = n" |
"add (Suc m) n = Suc(add m n)"

关联性证明:

lemma add_Associative: "add(add k m) z = add k (add m z)"
apply(induction k)
apply(auto)
done

交换律的证明:

theorem add_commutativity: "add k m = add m k"
apply(induction k)
apply(induction m)
apply(auto)

我得到以下目标:

goal (3 subgoals):
1. add 0 0 = add 0 0
2. ⋀m. add 0 m = add m 0 ⟹
     add 0 (Suc m) = add (Suc m) 0
3. ⋀k. add k m = add m k ⟹
     add (Suc k) m = add m (Suc k)

应用 auto 后,我只剩下子目标 3:

3. ⋀k. add k m = add m k ⟹
     add (Suc k) m = add m (Suc k)

编辑:我并不是在寻找答案,而是朝着正确的方向推动。这些练习来自一本名为“具体语义学”的书。


我建议使证明尽可能模块化(即证明中间引理,这将有助于解决交换性证明)。为此,思考以下子目标通常会提供更多信息:induct,在应用完全自动化之前(就像你的apply (auto)).

lemma add_comm:
  "add k m = add m k"
  apply (induct k)

此时的子目标是:

 goal (2 subgoals):
  1. add 0 m = add m 0
  2. ⋀k. add k m = add m k ⟹ add (Suc k) m = add m (Suc k)

让我们分别来看一下。

  1. 使用的定义add我们只能简化左侧, IE。,add 0 m = m。那么问题就是如何证明add m 0 = m。 你这样做是作为主要证明的一部分。我认为它会增加 证明以下单独引理的可读性

    lemma add_0 [simp]:
      "add m 0 = m"
      by (induct m) simp_all
    

    并将其添加到自动化工具中(例如simp and auto) using [simp]。在此刻 第一个子目标可以通过以下方式解决simp只剩下第二个子目标了。

  2. 应用定义后add以及归纳假设(add k m = add m k)我们必须证明Suc (add m k) = add m (Suc k)。这看起来与原始定义的第二个方程非常相似add,仅使用交换的参数。 (从这个角度来看,我们必须证明的第一个子目标对应于定义中的第一个方程add交换参数。)现在,我建议尝试证明一般引理add m (Suc n) = Suc (add m n)以便继续。

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

伊莎贝尔证明加法的交换律 的相关文章

  • Isabelle函数定义实例分析

    想象一下我有一个包含三种情况的函数定义 function f where eq1 if cond1 eq2 if cond2 eq3 if cond3 我怎样才能证明一些方程 f x y f y x 使用左侧的案例分析 仅编写 apply
  • 如何根据日历模式创建事件?

    我正在尝试为某人创建一个 轮班 日历 我知道该模式从哪一天开始 并且我知道该模式的断断续续的日期 但我在将其翻译成代码时遇到了麻烦 他们工作4天 休息3天 工作4天 休息3天 工作4天 休息2天 如此循环 我需要创建一些逻辑来基于此为日历创
  • VBA 如果 <其中任何一个> = <值>?

    我对 VBA 相当陌生 我找不到一种简单的方法来测试任何指定变量是否等于指定值 下面的方法似乎可行 但是有更简单的方法吗 If variable1 1 Or variable2 1 Or variable3 1 Or variable4 1
  • 在 Idris 中证明如果 n = m 且 m = o,则 n + m = m + o?

    我正在尝试通过查看一些练习来提高我的伊德里斯技能软件基础 https softwarefoundations cis upenn edu lf current toc html 最初是为 Coq 设计的 但我希望对 Idris 的翻译不会太
  • Python:pyswip 输出返回 Atom 和 Functor

    基于一些较旧的post https stackoverflow com questions 63890053 prolog define logical operator in prolog as placeholder for other
  • XOR 中的 Exclusive 到底意味着什么?

    也许这对每个人来说都是显而易见的 但有人可以解释 XOR 或异或 的名字从何而来吗 这个词是什么意思独家的实际意思 这并不重要 但从早上起它就一直萦绕在我的脑海里 OR 0 0 0 0 1 1 1 0 1 1 1 1 XOR 0 0 0 0
  • 8086 汇编中的大二进制移位?

    我有一个 512 字节长的二进制数据块 我想知道如果我想将其右移一次 最有效的方法是什么 我现在最好的猜测 对于汇编来说非常新 是我必须首先检查一个块 可能是 int 看看它将移出什么 移出 然后携带先前 int 移出的任何内容并继续携带这
  • 输入字符时无限循环[重复]

    这个问题在这里已经有答案了 我试图限制用户仅输入 1 或 2 int ch do cout lt lt Enter n cin gt gt ch switch ch case 1 cout lt lt 1 break case 2 cout
  • 在Android中使用EditText上的TextWatcher实时计算总计和总和?

    在这里 我想采用来自我的数据库的默认值 并将 Text 设置为该值并计算净费率和总计 否则如果用户编辑费率或收取费用 我想根据该值计算净费率和总计即时的 这是我用于计算和显示值的代码 private void showItem String
  • 网格中最大的产品

    我被这个问题困扰了 我确实认为我已经找到了正确的解决方案 但是当将其提交到网站时 它不接受 我尝试通过打印所有可能的组合来调试它 它们都完成了 水平 垂直和对角线 数组也被正确填充 我后来打印出来检查了一下 你知道问题可能出在哪里吗 Que
  • C++:检查括号和方括号在字符串中是否平衡(逻辑问题)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 检查字符串中的每个 是否都满足 或 检查字符串中的每个 是否与 或 匹配 例如 您永远不能拥有像这样的字符串 a a a a a 但是
  • jquery函数中的索引是什么意思

    我是一个 jQuery 初学者 所以如果质量不好请原谅我 我想知道什么是index函数中的意思以及它到底指的是什么 以前我认为它指的是索引号 如 0 1 2 3 等 但是当我通过 1 2 3 代替索引时 我的代码停止工作 我检查了这个的类型
  • 伊莎贝尔中的“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 我注意到伊莎贝尔
  • Unity3D 中 Update() 循环方法内的执行顺序

    我正在尝试找到合适的词语来描述我遇到的问题 希望这能解释问题 我有两个Update 两个不同类中的方法 并且一个类中的某些功能依赖于另一个类中的数据 代码 A 依赖于代码 B 的数据 使用调试日志 我发现代码B的Update 在代码 A 之
  • 使用 SPARK 证明选择排序算法

    我试图证明我在 Ada 中的选择排序实现是正确的 我尝试了一些循环不变量 但使用 gnatprove 只能证明内部循环的不变量 package body Selection with SPARK Mode is procedure Sort
  • 稳定的比较排序,时间复杂度为 O(n * log(n)),空间复杂度为 O(1)

    在经历的同时维基百科的排序算法列表 https secure wikimedia org wikipedia en wiki Sorting algorithm Comparison of algorithms我注意到没有稳定的比较排序 h
  • 在Python中动态评估简单的布尔逻辑

    我有一些动态生成的布尔逻辑表达式 例如 A 或 B 和 C 或 D A 或 A 和 B A 空 计算结果为 True 占位符被替换为布尔值 我是不是该 将此信息转换为 Python 表达式 例如True or True or False a
  • 法新社的“find_theorems”

    我怎样才能使用find theorems搜索整个正式证据档案馆 AFP 的机制 我已将存档下载到我的计算机上 并且可以从中导入理论 例如 如果我写imports Kleene Algebra Kleene Algebra Models那么该
  • Subst refl 关闭重复的子目标。这是怎么回事?

    In this https stackoverflow com questions 15608399 how do i remove duplicate subgoals in isabelle线程马蒂厄证明了subst refl关闭重复的
  • 过早退出 Qualtrics 中的循环和合并块

    我目前正在进行一项 Qualtrics 调查 受访者必须解决一长串字谜问题 然后回答一些人口统计问题 为了使变位词部分更容易 我使用了循环和合并块 第一个字段是要解决的变位词 第二个字段是变位词的解决方案 因此调查可以根据受访者的答案来检查

随机推荐

  • 解析可选参数和非可选参数

    我是 bash 的新手 在阅读并尝试了很多有关如何解析参数的内容后 我无法做我真正想做的事情 我想解析可选参数和非可选参数 更具体地说 我想解析 3 个参数 第一个 fastaq 文件 第二个 第二个可选 fastaq 文件 第三个参数将是
  • pgAdmin Docker 错误:“用户名或密码不正确”

    有一些简单的 docker compose yml 文件配置 但我不确定为什么我不能使用登录到 pgAdmin 电子邮件受保护 cdn cgi l email protection作为电子邮件和admin作为密码 是否需要更多配置或者我使用
  • PHP函数注释

    我看到一些 PHP 函数在顶部被注释 使用的格式我不知道 Convert an object to an array param object object The object to convert return array 我的 IDE
  • 快速检测用户点击屏幕

    我想删除UIView用户点击除该视图之外的其他内容后从屏幕上显示 为了让您形象化 我将上传我的视图草图 我想去掉蓝色UIView用户点击此视图中除按钮之外的其他内容后 我应该用什么 编辑 穿蓝色衣服UIView有两个按钮 我想在用户点击背景
  • 特质类别如何运作以及它们的作用是什么?

    我正在读斯科特 迈耶斯的书有效的C https rads stackoverflow com amzn click 0321334876 他在谈论特征类 我明白我需要它们在编译时确定对象的类型 但我无法理解他对这些类实际上做什么的解释 从技
  • Spark scala 中的枢轴

    我有一个这样的df M M Max Sales Rank M1 100 200 1 M1 100 175 2 M1 101 150 3 M1 100 125 4 M1 100 90 5 M1 100 85 6 M2 200 1001 1 M
  • 苹果开发者拒绝 - 应用程序中使用的订阅 - 商业 - 3.1.1

    苹果开发者以此理由拒绝了我的应用程序 商业 3 1 1 您的应用程序包含帐户注册功能 该功能被视为访问外部机制以在应用程序中使用购买或订阅 此功能不符合 App Store 审核指南 下一步 请删除帐户注册链接以及指向您网站的任何其他完全合
  • 如何在没有 jQuery 的情况下在 Javascript 中链接选择器

    在尝试操纵外部站点的布局时 我经常被迫使用一系列选择器来定位我想要的特定元素 我第一次遇到这个问题时 有人向我提供了一个 jQuery 解决方案 并且很容易得到结果 我不想依赖 jQuery 并且想知道这在标准 Javascript 中是否
  • JavaScript,在公共方法中将私有函数作为字符串调用,而不使用 eval (揭示模式)

    我试图在揭示模式中调用一个私有函数 这是我的代码 var module function var privateMethod function val console log val var publicMethod function va
  • 如何在 SQL Server 中获取具有复合主键的表列表?

    如何创建一个查询 为我提供 SQL Server 中具有复合主键的表列表 也许使用 sys tables 或 information schema tables 或其他东西 你可以挖掘这些信息information schema table
  • PHP计数替换[重复]

    这个问题在这里已经有答案了 我有一些代码在 PHP 7 以下运行的服务器上运行良好 但在 PHP 7 上我收到一条警告 需要删除 我需要修复代码以消除警告 我不能只是隐藏警告 我的问题是 count 函数 这是我收到的警告及其所引用的一小段
  • 我可以在调试时仅“跳过”jQuery 代码吗?

    在单步执行使用 jQuery 的脚本时 我just想要测试代码I wrote 我不想进入 jQuery 文件 我不是在调试 jQuery 只是在调试我自己的文件 有什么方法可以告诉调试器不要进入 jQuery 文件吗 我使用 Visual
  • Windows 10 - 任务计划程序 - 未运行 (0x41303)

    我正在尝试在 Windows 10 中安排一项任务 在 登录时 事件中启动多个程序 但在多次尝试 错误后它不会运行 任务配置如下 常规 无论用户是否登录都运行 它提示凭据输入框 也尝试仅在用户登录时运行 以最高权限运行 在尝试过的情况下配置
  • 如何在当前Vue实例上添加方法或数据?

    我是新来的Vue js我正在摆弄它 有没有办法创建可重用的方法和数据 这是我想要实现的非常简单的代码 第1页 html div div
  • 从 Assembly.GetTypes() 获取的类型的排序

    我有一个要求 我需要获取以下类型 public class Class1 public class Class2 Class1 public class Class3 Class1 我可以致电Assembly GetTypes 在目标程序集
  • IGrouping 不包含以下定义

    我一直在这里查看其他线程以了解如何在 linq 中执行 GroupBy 我遵循对其他人有效的精确语法 但是它不起作用 这是查询 var results from p in pending group p by p ContactID int
  • 如何手动将 .dump() 文件的输出解析为文本小部件

    我如何手动将 dump 的输出从包含斜体和粗体文本的文本小部件解析到不同的文本小部件以将其及其文本格式加载 这是代码 如果有帮助的话 文本应该与文本格式一起保存 但是当文件打开时 文本格式消失了 from tkinter import fr
  • OutputCache 属性和 jQuery Ajax 不缓存

    我有一个像这样的简单 MVC3 控制器操作 HttpGet OutputCache Duration 1200 Location System Web UI OutputCacheLocation Server public string
  • C#:有关套接字编程(同步或异步)的问题

    我正在用 C 编写一个即时消息服务器用于学习目的 我的问题是我应该使用同步还是异步套接字来处理 IM 客户端 目标是处理尽可能多的客户 我不太确定 但据我所知 异步套接字的数据包不会按顺序到达 这意味着当您发送 2 条聊天消息并且存在延迟
  • 伊莎贝尔证明加法的交换律

    我试图证明 Isabelle HOL 中自定义的交换律add功能 我设法证明了关联性 但我坚持这一点 的定义add fun add nat nat nat where add 0 n n add Suc m n Suc add m n 关联