对术语...进行抽象会导致术语...类型错误

2023-12-27

这是我想证明的:

  A : Type
  i : nat
  index_f : nat → nat
  n : nat
  ip : n < i
  partial_index_f : nat → option nat
  L : partial_index_f (index_f n) ≡ Some n
  V : ∀ i0 : nat, i0 < i → option A
  l : ∀ z : nat, partial_index_f (index_f n) ≡ Some z → z < i
  ============================
   V n ip
   ≡ match
       partial_index_f (index_f n) as fn
       return (partial_index_f (index_f n) ≡ fn → option A)
     with
     | Some z => λ p : partial_index_f (index_f n) ≡ Some z, V z (l z p)
     | None => λ _ : partial_index_f (index_f n) ≡ None, None
     end eq_refl

显而易见的下一步是rewrite L或破坏(partial_index_f (index_f n)。尝试应用重写给我一个错误:

Error: Abstracting over the term "partial_index_f (index_f n)"
leads to a term
"λ o : option nat,
 V n ip
 ≡ match o as fn return (o ≡ fn → option A) with
   | Some z => λ p : o ≡ Some z, V z (l z p)
   | None => λ _ : o ≡ None, None
   end eq_refl" which is ill-typed.

我不明白是什么导致了这个问题。我也想了解我一般如何处理它。

我能够使用以下步骤证明它,但我不确定这是最好的方法:

  destruct (partial_index_f (index_f n)).
  inversion L.
  generalize (l n0 eq_refl).
  intros. subst n0.
  replace l0 with ip by apply proof_irrelevance.
  reflexivity.
  congruence.

在 Coq 的理论中,当您使用方程进行重写时,您必须对要替换的方程一侧进行概括。在你的情况下,你想更换partial_index_f (index_f n),因此 Coq 尝试概括这一点,正如您从收到的错误消息中可以看出的那样。

现在,如果你的目标包含以下内容type提到你想要替换的东西,你可能会遇到麻烦,因为这种概括可能会使目标变得错误类型。 (请注意,该类型并不完全出现在目标中,因此 Coq 不会尝试像目标中发生某些事情时那样处理它。)回到您的情况,您的l函数有类型∀ z : nat, partial_index_f (index_f n) ≡ Some z → z < i,其中提到partial_index_f (index_f n),您要替换的术语。在你的第一个分支match,您将此函数应用于o = Some z你抽象出来的假设。在最初的目标上,o是你想要替换的东西,但是当 Coq 尝试泛化时,两者不再匹配,因此出现错误消息。

我无法尝试自己解决问题,但您通常可以通过概括上下文中提及您要替换的术语的术语来解决此类问题,因为这样它的类型将显示在目标中,与普遍量化变量。如果您的术语是全局定义的,并且您需要它在重写后具有一定的形状,以便能够执行额外的推理步骤,这可能没有帮助,在这种情况下,您可能还必须概括您需要的引理。

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

对术语...进行抽象会导致术语...类型错误 的相关文章

  • Coq:变量参数列表上的 Ltac 定义?

    在尝试创建循环可变长度参数列表的 Ltac 定义时 我在 Coq 8 4pl2 上遇到了以下意外行为 谁能给我解释一下吗 Ltac ltac loop X match X with 0 gt idtac done gt fun Y gt i
  • 使用由明确定义的归纳定义的递归函数进行计算

    当我使用Function在 Coq 中定义一个非结构递归函数 当要求进行特定计算时 生成的对象会表现得很奇怪 事实上 不是直接给出结果 而是Eval compute in 指令返回一个相当长 通常为 170 000 行 的表达式 Coq 似
  • 如何切换到 Coq 的特定版本——尤其是在使用 Opam 管理 Coq 版本时?

    我目前使用的是标准方式 可能通过网站 安装的标准方式 但我想用tcoq 我相信我已经正确安装了它 因为我有一个 bin 文件 并且所有常见的 Coq 内容似乎都在那里 pinno gamepad tcoq ls bin coq tex co
  • Coq 将不存在的语句转换为 forall 语句

    我是 Coq 的新手 这是我的问题 我有一个声明说 H forall x term exists y term P x y P y x 我猜它相当于 forall x y term P x y P y x gt false 但我可以使用哪种
  • 类型参数和索引之间的区别?

    我是依赖类型的新手 对两者之间的区别感到困惑 似乎人们通常说类型是由另一种类型参数化 and 按某个值索引 但是 在依赖类型语言中 类型和术语之间不是没有区别吗 参数和指数之间的区别是根本性的吗 您能否举例说明它们在编程和定理证明中的含义差
  • Coq 无法在 Z 上计算有根据的函数,但它可以在 nat 上运行

    我正在 为我自己 写一篇关于如何在 Coq 中进行有根据的递归的解释 参见 Coq Art 书 第 15 2 章 首先我做了一个基于的示例函数nat效果很好 但后来我又做了一次Z 当我使用Compute来评估它 它并没有一直降低到Z价值 为
  • 如何在 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但我试图找到一个不
  • `Set` 类型的具体示例是什么?`Set` 的含义是什么?

    我一直试图理解什么Set除了在 Adam Chlipala 的书中遇到它之后SO中的这个精彩讨论 https stackoverflow com questions 39601502 what exactly is a set in coq
  • 依赖类型的 Church 编码:从 Coq 到 Haskell

    在 Coq 中 我可以为长度为 n 的列表定义 Church 编码 Definition listn A Type nat gt Type fun m gt forall X nat gt Type X 0 gt forall m A gt
  • 如何一步步检查 Coq 中更复杂的策略的作用?

    我试图经历那些著名的和精彩的软件基础书籍 https softwarefoundations cis upenn edu lf current Basics html lab30但我举了一个例子simpl and reflexivity 只
  • Coq :> 符号

    这可能是非常微不足道的 但我找不到任何关于 gt 符号在 Coq 中含义的信息 有什么区别 U 类型 和 W gt 类型 这取决于符号出现的位置 例如 如果它位于记录声明内 它会指示 Coq 添加相应的记录投影作为强制 具体来说 假设我们有
  • Coq QArith 除以零就是零,为什么?

    我注意到在 Coq 的有理数定义中 零的倒数被定义为零 通常 除以零是没有明确定义 合法 允许的 Require Import QArith Lemma inv zero is zero 0 0 Proof unfold Qeq refle
  • 如何处理 Coq 中 Program Fixpoint 生成的非常大的项?

    我试图在 Coq 中定义并证明正确的函数 该函数可以有效地比较两个排序列表 由于它并不总是在结构较小的项上递归 第一个或第二个列表较小 Fixpoint不会接受它 所以我尝试使用Program Fixpoint反而 当尝试使用策略证明函数的
  • 没有可判定的相等性或排除中间值的鸽巢证明

    在软件基础中IndProp v https softwarefoundations cis upenn edu lf current IndProp html lab244一个人被要求证明鸽巢原理 并且可以使用排除中间 但有人提到这并不是绝
  • 在 Coq 模块系统中导入 与包含

    确切的语义是什么Include M1在另一个模块中 比如 M 这与做有什么不同Import M1在模块 M 内 更准确地说 以下命令的语义是什么 Module Type M M1 lt M2 lt M3 总结这两个白话命令的语义 命令Inc
  • 在 coq 的 then 部分中使用 if expression = true 的证明

    对于所有 1 Require Import ZArith Znumtheory Local Open Scope Z scope Require Coq Program Tactics Require Coq Program Wf Lemm
  • Coq:多个构造函数的单一表示法

    是否可以在 Coq 中为多个构造函数定义单一符号 如果构造函数的参数类型不同 则可以从中推断出它们 一个最小的 非 工作示例 Inductive A Set a b c C gt A d D gt A with C Set c1 c2 wi
  • Coq:承认断言

    有没有办法在 Coq 中承认断言 假设我有一个这样的定理 Theorem test forall m n nat m n n m Proof intros n m assert H1 m m n m S n Admitted Abort 上
  • 证明依赖类型实例之间的相等性

    当尝试形式化对应于代数结构的类 例如所有幺半群的类 时 自然的设计是创建一个类型monoid a Type 作为对所有必需字段进行建模的产品类型 元素e a 一个操作员app a gt a gt a 证明幺半群定律得到满足等 在此过程中 我

随机推荐

  • 不区分大小写

    If TextBox2 Text a AndAlso TextBox21 Text a Then MessageBox Show A totCorrect totCorrect corAns ElseIf TextBox2 Text b A
  • 如何实现通用 Kafka Streams 反序列化器

    我喜欢 Kafka 但讨厌编写大量序列化器 反序列化器 所以我尝试创建一个GenericDeserializer
  • Tk 树视图列排序

    有没有办法对 a 中的条目进行排序Tk 树视图 http www tkdocs com tutorial tree html通过单击该列 令人惊讶的是 我找不到任何相关文档 教程 帕特霍伊茨 http www patthoyts tk fr
  • .htaccess 中的 RewriteCond 和 RewriteRule

    我有一个客户端文件夹位于http www example com client http www example com client但是 我现在已经在服务器上安装了 SSL 并且想要使用 HTACCESS 添加永久重定向 以便每当访问 c
  • Swagger UI 中的掩码输入(示例 - 密码)?

    我有一个 API 的三个路径变量 我想用 屏蔽 Swagger UI 上的一个输入 使用 Springdoc OpenAPI 时如何做到这一点 您只需使用 swagger 注释即可 Parameter schema Schema type
  • 有什么理由不在单个节点上使用 Docker Swarm(而不是 Docker-Compose)?

    有 Docker Swarm 现已内置于 Docker 中 和 Docker Compose 人们似乎只在单个节点上运行容器时使用 Docker Compose 但是 Docker Compose 不支持任何deploy配置值 请参见htt
  • jqGrid:禁用排序

    我使用手动将行添加到 jqGridaddRowData 并且必须保持这些行的顺序 但是 在分页时 所有行都会重新排序以按网格的第一个可见列进行排序 我已经关闭了所有可以找到记录的排序选项 如何防止所有排序并维护所有页面中的行顺序 Code
  • 如何使用 LINQ 将这些数据组织成我想要的对象?

    我有一个以下类 我试图创建一个包含我查询过的一堆数据的列表 public class Agency public string AgencyName get set public int AgencyID get set public IE
  • Weblogic 12.1.3 PrivilegedActions 类未找到

    我创建了一个简单的项目 调用 jms 队列并放入消息 这里是代码 public class QueueSend Defines the JNDI context factory public final static String JNDI
  • 在 iOS 配置门户上创建 AdHoc 配置文件时出错 [已关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 每当我尝试
  • IE想要从Django下载返回的JSON

    我有一个 Django 站点 其中一个页面正在执行基于 AJAX 的文件上传 使用Valum 的文件上传器 http valums com ajax upload 通过 JSON 返回一些信息 Django 返回 JSON 的方式是 ret
  • Dapper for NET Core:插入表并返回插入行的 id [重复]

    这个问题在这里已经有答案了 我的存储库中有以下方法 到目前为止 我相信返回的 int 只是指示操作是否成功的一个 我希望 int 是成功执行后返回的 id 表的单列 我该如何做到这一点 public async Task
  • 邮件中的证书链错误中的自签名证书

    我尝试编写一个简单的邮件程序 我用了节点邮件程序 and SMTP协议模块 我执行了 但它显示一个错误 例如 邮件中的证书链错误中的自签名证书 问题是什么 var express require express var app expres
  • 在 vscode 中调试 Serverless 时未命中断点

    在 VSCode 中调试基于无服务器的应用程序时 我的断点均未处于活动状态 启动 json configurations console integratedTerminal cwd workspaceRoot name Debug por
  • 如何正确使用 LINQ 和 MySQL? [复制]

    这个问题在这里已经有答案了 可能的重复 LINQ to MySQL 最好的选择是什么 https stackoverflow com questions 1469100 linq to mysql what is the best opti
  • Virtualenv 与 Eclipse (Galileo) [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有人可以指导让 Eclipse Galileo PyDev 和 Virtualenv 一起工作吗 我专门尝试运行 Pinax 但任何说
  • C++:处理线程本地对象销毁

    我有一个日志系统 它基本上使用线程本地缓冲区来记录 这有助于减少锁定 可以将一堆消息写入线程本地缓冲区并一次性刷新 而且由于它是线程本地的 我们可以避免为每个日志消息分配缓冲区 无论如何 问题是在进程退出期间 我们在访问线程本地缓冲区时看到
  • 如何以不同的增量减去 2 个单独文件的特定行

    https i stack imgur com oYoYz png https i stack imgur com oYoYz png https i stack imgur com AdmuM png https i stack imgu
  • 如何在 MVC 模型中表示一个月的复选框

    我无法理解如何使用 MVC 创建下表 并将其成功绑定到模型 我基本上需要跟踪该月的哪几天需要发生事件 这是我对模型的尝试 EDIT 这不是一个月 而是任意 4 周的周期 public class ScheduleViewModel publ
  • 对术语...进行抽象会导致术语...类型错误

    这是我想证明的 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