Coq - 在不丢失信息的情况下归纳函数

2024-02-27

当尝试对函数的结果(返回归纳类型)执行案例分析时,我在 Coq 中遇到了一些麻烦。当使用通常的策略时,比如elim, induction, destroy等等,信息就会丢失。

我举个例子:

我们首先有一个像这样的函数:

Definition f(n:nat): bool := (* definition *)

现在,假设我们正处于证明特定定理的这一步:

n: nat
H: f n = other_stuff
------
P (f n )

当我应用一种策略时,比如说,induction (f n), 有时候是这样的:

Subgoal 1
n:nat
H: true = other_stuff
------
P true

Subgoal 2
n:nat
H: false = other_stuff
------
P false

然而,我想要的是这样的:

Subgoal 1
n:nat
H: true = other_stuff
H1: f n = true
------
P true

Subgoal 2
n:nat
H: false = other_stuff
H1: f n = false 
------
P false

在它实际工作的方式中,我丢失了信息,特别是我丢失了有关的任何信息f n。在我处理的问题中,我需要使用以下信息f n = true or f n = false,与其他假设一起使用等。 有办法做第二个选项吗? 我尝试使用类似的东西cut(f n = false \/ f n = true)但这变得非常烦人,特别是当我连续进行几次这样的“特殊”归纳时。我想知道是否有一些东西基本上与cut如上所述,但策略/证据较少


问题是你执行induction基于一个构建的术语,而不是单个变量。事实证明,将信息保存在您的案件中是一个非常困难的问题。

通常的解决方法是使用以下方法抽象您构建的术语remember战术。我现在不知道确切的语法,但你应该尝试类似的东西

remember (f n) as Fn. (* this introduces an equality HeqFn : Fn = f n *)
revert f n HeqFn. (* this is useful in many cases, but not mandatory *)
induction Fn; intros; subst in *.

希望能帮助到你, 五、

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

Coq - 在不丢失信息的情况下归纳函数 的相关文章

  • 如何在 Coq 中使用归纳类型来处理案例

    我想使用destruct通过案例来证明陈述的策略 我在网上读了几个例子 但我很困惑 有人可以更好地解释一下吗 这是一个小例子 还有其他方法可以解决它 但尝试使用destruct Inductive three zero one two Le
  • 证明唯一的零长度向量为零

    我有一个类型定义为 Inductive bits nat gt Set bitsNil bits 0 bitsCons forall l bool gt bits l gt bits S l 我试图证明 Lemma emptyIsAlway
  • Coq 平等实现

    我正在编写一种玩具语言 其中 AST 中的节点可以有任意数量的子节点 Num has 0 Arrow有 2 个 等等 您可以致电这些接线员 此外 AST 中可能只有一个节点被 聚焦 我们对数据类型进行索引Z如果它有焦点 或者H如果没有 我需
  • Coq:定义子类型

    我有一个类型 比如说 Inductive Tt a b c 定义它的子类型的最简单和 或最好的方法是什么 假设我希望子类型仅包含构造函数a and b 一种方法是对二元素类型进行参数化 例如布尔 Definition filt x bool
  • 匹配中的冗余子句

    当我运行以下脚本时 Definition inv a Prop Prop match a with False gt True True gt False end 我收到 错误 该子句是多余的 知道为什么会发生这种情况吗 谢谢 马库斯 这件
  • 对术语...进行抽象会导致术语...类型错误

    这是我想证明的 A Type i nat index f nat nat n nat ip n lt i partial index f nat option nat L partial index f index f n Some n V
  • Coq 无法在 Z 上计算有根据的函数,但它可以在 nat 上运行

    我正在 为我自己 写一篇关于如何在 Coq 中进行有根据的递归的解释 参见 Coq Art 书 第 15 2 章 首先我做了一个基于的示例函数nat效果很好 但后来我又做了一次Z 当我使用Compute来评估它 它并没有一直降低到Z价值 为
  • 证明匹配语句

    为了解决一个练习 我有以下代表整数的定义 Inductive bin Type Zero bin Twice bin gt bin TwiceOne bin gt bin 这个想法是 Twice x is 2 x 两次一x is 2 x 1
  • 如何在 Coq 中禁用我的自定义符号?

    我定义了一个符号来模拟命令式编程 Notation a gt gt b b a at level 50 然而之后 所有函数应用表达式都表示为 gt gt 样式 例如 在 Coq Toplevel 的证明模式下 我可以看到 bs nat gt
  • 如何将假设中的具体变量更改为存在量化变量?

    假设我有一个这样的假设 FooProp a b 我想将假设改为这种形式 exists a FooProp a b 我怎样才能做到这一点 我知道我能做到assert exists a FooProp a b by eauto但我试图找到一个不
  • 如何在 Coq 中切换当前目标?

    是否可以切换当前目标或子目标来在 Coq 中进行证明 例如 我有一个这样的目标 来自 eexists 1 1 s gt 0 r1 r1 s1 s r3 r3 s2 我想做的是split并首先证明正确的连接 我认为这将给出存在变量的值 s 并
  • 如何在 Coq 简化过程中应用一次函数?

    据我了解 Coq 中的函数调用是不透明的 有时 我需要使用unfold应用它然后fold将函数定义 主体恢复为其名称 这通常很乏味 我的问题是 是否有更简单的方法来应用函数调用的特定实例 作为一个最小的例子 对于一个列表l 证明右附加 没有
  • 在 Coq 中使用依赖类型(安全第 n 个函数)

    我正在尝试学习 Coq 但我发现很难从我读到的内容中实现飞跃软件基础 and 依赖类型的认证编程到我自己的用例 特别是 我想我应该尝试制作一个经过验证的版本nth列表上的函数 我设法写了这个 Require Import Arith Req
  • 逻辑:tr_rev_ Correct 的辅助引理

    在逻辑章节中 介绍了反向列表函数的尾递归版本 我们需要证明它可以正确工作 Fixpoint rev append X l1 l2 list X list X match l1 with gt l2 x l1 gt rev append l1
  • 在 Coq 中证明可逆列表是回文

    这是我对回文的归纳定义 Inductive pal X Type list X gt Prop pal0 pal pal1 forall x X pal x pal2 forall x X l list X pal l gt pal x l
  • 如何在构造微积分中提取Sigma的第二个元素?

    我尝试这样做 A gt B A gt gt t r gt x a gt B x gt r gt r gt t B t A x A gt y B x gt x x A gt y B x gt y 请注意 由于该函数返回的值取决于 sigma
  • 在 Coq 中查找 ++ 等定义和符号

    我们如何获得这些符号的定义 类型 例如 or of List 我努力了 Search Search Search SearchAbout and Check Check Check 然而它们都不起作用 SearchAbout 确实显示了一些
  • 我可以将 Coq 证明提取为 Haskell 函数吗?

    自从学了一点 Coq 以来 我就想学着写一个所谓的除法算法的 Coq 证明 它实际上是一个逻辑命题 forall n m nat exists q nat exists r nat n q m r 我最近利用我学到的知识完成了这项任务软件基
  • 在 Coq 模块系统中导入 与包含

    确切的语义是什么Include M1在另一个模块中 比如 M 这与做有什么不同Import M1在模块 M 内 更准确地说 以下命令的语义是什么 Module Type M M1 lt M2 lt M3 总结这两个白话命令的语义 命令Inc
  • 在依赖类型的函数式编程语言中,扁平化列表是否更容易?

    在 haskell 中寻找一个可以展平任意深度嵌套列表的函数时 即应用的函数concat递归并在最后一次迭代时停止 使用非嵌套列表 我注意到这需要有一个更灵活的类型系统 因为随着列表深度的变化 输入类型也会变化 确实 有几个 stackov

随机推荐

  • 在 Express REST API 中使用 OOP 的最佳方式?

    我将全力以赴并仅使用节点来做一个项目 这很有趣 但有时我会有点迷失其中 当我感到困惑时 我想尝试获得理解 这样我就可以正确地构建它 并且不会太不知所措 不管怎样 问题是这样的 我有使用 Express 和 mysql 的 REST API
  • Jackson Scala 模块的小例子?

    任何人都可以向我指出 Jackson 序列化 反序列化及其 2 10 的 Scala 模块的简单示例吗 我正在寻找基于反射的 JSON 不需要逐个字段注释或分配 这似乎可以做到这一点 但他们的文档不包含任何示例 如果我有一个案例类 case
  • 如何解压 .asar 文件?

    我使用以下命令打包了我的 Electron 应用程序 asar pack app app asar 现在 我需要解压它并取回整个代码 有什么办法可以做到吗 来自阿萨尔文档 https github com electron asar 指某东
  • 如何通过 Maven 使用 Netbeans 调试 Spring Boot

    经过很长时间的摆弄 直到我在 Netbeans 8 2 和 Spring Boot 1 4 3 中得到了正确的调试设置 我想我应该把我的发现写下来作为其他人的问答 问题是 Netbeans 的默认配置无法在调试模式下正确启动 Spring
  • Jetpack Compose:如何禁用浮动操作按钮?

    根据docs https developer android com reference kotlin androidx compose material package summary FloatingActionButton kotli
  • 检索与 Perl 中的所有正则表达式完全匹配的模式

    我有一个子图数据库 如下所示 t 3 231 1 v 0 94 v 1 14 v 2 16 v 3 17 u 0 1 2 u 0 2 2 u 0 3 2 t 3 232 1 v 0 14 v 1 94 v 2 19 v 3 91 u 0 1
  • 将不同日期范围内的相似对象分组以获取 SQL Server 中的最小和最大日期

    我有一张桌子 account onln status browse status beg date end date 123456789 On Y 1 1 2018 2 1 2018 123456789 On N 2 2 2018 4 1
  • 为什么这个分配的对象与原始对象共享相同的内存空间?

    在 python 中 我在使用 itertools groupby 模块时遇到了这种奇怪的现象 在Python中 变量赋值意味着将新变量分配给它自己的内存 而不是指向原始内存的指针 根据我的理解 如果这是不正确的 请告诉我 y 7 x y
  • 通过 WebApp 与本地 PC 交互

    我目前正在开发一个公司内部网应用程序 部分要求是让应用程序在用户本地 PC Minitab 上启动一个程序 然后让 Web 应用程序通过其 COM 接口与其进行通信 做这样的事情我有什么选择 一个签名的 Java 小程序和Jacob htt
  • 在 JavaScript 中计算两个数组的交集[重复]

    这个问题在这里已经有答案了 给定两个长度不等的数组 var arr1 mike sue tom kathy henry arr1 length 5 var arr2 howey jim sue jennifer kathy hank ale
  • 从jupyter服务器下载数据

    我通过连接到服务器来使用 ipython 笔记本 我不知道如何以编程方式将内容 例如数据框 csv 文件等 下载到我的本地计算机 因为我无法具体声明路径 如 C user 它将被下载到他们的机器而不是我的机器上 在其中一个笔记本的单独单元格
  • svelte 包应该是依赖项还是 devDependency?

    我知道已经有很多帖子讨论了两者之间的区别dependency and devDependency但我没有找到任何解释 svelte 情况的信息 所以让我们在这里打开这个 在大多数 svelte 包中 比如svelte 材质 ui https
  • 在 VS2012 上禁用 C++11 功能

    是否可以在 VS2012 上禁用 C 11 功能 我的代码还没有准备好 我不想引入进一步的混乱 从 Visual C 2015 Update 3 开始 现在可以为语言行为指定语言版本 显然它不仅仅影响一致性检查 https blogs ms
  • 我应该在 ejs 文件中使用脚本标签吗?

    我正在学习如何开发节点应用程序 这是一个人们可以发布城市周围发生的事件的应用程序 我有一个 ejs 文件 new ejs 它允许用户提交新事件 显然 有一个事件开始时间和结束时间 我想确保结束时间在开始时间之后 所以我简单地添加了一个脚本来
  • 如何从 Maven 的主文件夹访问测试类?

    我创建了一个具有标准文件夹结构的 Maven 项目 i n src main java src test java 等 我写了一个类ClassA和一个测试类TestA 在ClassA的主程序中 我引用了TestA的一个静态成员 代码可以编译
  • 设置数组所有值的最快方法?

    我有一个char 我想将每个索引的值设置为相同char value 有一个明显的方法可以做到这一点 迭代 char f char c new char 50 for int i 0 i lt c length i c i f 但我想知道是否
  • Xamarin.Forms Shell GoToAsync 在 iOS 中无法按预期工作

    我正在使用 Xamarin Forms Shell 功能 我需要从一个选项卡 根 导航到另一个选项卡 第二级 该示例有三个页面 为简单起见 我将其命名为 Page1 Page2 和 Page3 Page1 和 Page2 是 App She
  • 使用 Python unittest 测试回调调用的正确方法是什么?

    我有一个如下所示的应用程序代码 Filename app py class Foo def init self self callback None def set handler self callback self callback c
  • setjmp.h 中定义的 C 语言非本地跳转如何工作?

    The C语言参考手册 附录B描述了两个函数setjmp and longjmp对于所谓的东西非局部跳转 除了基本的了解之外setjmp保存状态信息 longjmp 恢复state 我一直无法理解此功能的确切流程和用例 那么 这个功能到底有
  • Coq - 在不丢失信息的情况下归纳函数

    当尝试对函数的结果 返回归纳类型 执行案例分析时 我在 Coq 中遇到了一些麻烦 当使用通常的策略时 比如elim induction destroy等等 信息就会丢失 我举个例子 我们首先有一个像这样的函数 Definition f n