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

2023-11-22

在尝试创建循环可变长度参数列表的 Ltac 定义时,我在 Coq 8.4pl2 上遇到了以下意外行为。谁能给我解释一下吗?

Ltac ltac_loop X :=
  match X with
  | 0 => idtac "done"
  | _ => (fun Y => idtac "hello"; ltac_loop Y)
  end.

Goal True.
  ltac_loop 0.  (* prints "done" as expected *)
  ltac_loop 1 0.  (* prints "hello" then "done" as expected *)
  ltac_loop 1 1 0.  (* unexpectedly yields "Error: Illegal tactic application." *)

让我们扩展最后一个调用ltac_loop看看发生了什么:

ltac_loop 1 1 0
-> (fun Y => idtac "hello"; ltac_loop Y) 1 0
-> (idtac "hello"; ltac_loop 1) 0

在那里您可以看到问题:您试图将不是函数的东西应用于参数,这会导致您看到的错误。解决方案是以连续传递的方式重写策略:

Ltac ltac_loop_aux k X :=
  match X with
  | 0 => k
  | _ => (fun Y => ltac_loop_aux ltac:(idtac "hello"; k) Y)
  end.

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

Coq:变量参数列表上的 Ltac 定义? 的相关文章

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

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

    我正在阅读Mike Nahas 的 Coq 入门教程 其中说 ex intro 的参数是 谓词 证人 与证人一起提出的谓词的证明 我在看定义 Inductive ex A Type P A gt Prop Prop ex intro for
  • 使用 lambda 参数重写 Coq

    我们有一个函数可以将元素插入到列表的特定索引中 Fixpoint inject into A x A l list A n nat option list A match n l with 0 gt Some x l S k gt None
  • 在 Coq 中使用我自己的 == 运算符重写策略

    我试图直接从字段的公理证明简单的字段属性 经过对 Coq 原生现场支持的一些实验 像这个 我决定最好简单地写下 10 条公理并使其自成一体 我在需要使用的时候遇到了困难rewrite与我自己的 运算符自然不起作用 我意识到我必须添加一些我的
  • 如何在 Coq 中将一条线的公理定义为两个点

    我想找一个例子axiom in Coq类似于几何中的线公理 如果给定两个点 则这两点之间存在一条线 我想看看如何在 Coq 中定义它 本质上选择这个简单的直线公理来看看如何定义一些非常原始的东西 因为我很难在自然语言之外定义它 具体来说 我
  • 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 但我可以使用哪种
  • Coq 平等实现

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

    我有一个类型 比如说 Inductive Tt a b c 定义它的子类型的最简单和 或最好的方法是什么 假设我希望子类型仅包含构造函数a and b 一种方法是对二元素类型进行参数化 例如布尔 Definition filt x bool
  • 对术语...进行抽象会导致术语...类型错误

    这是我想证明的 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 - 在 if ... then ... else 中使用 Prop (True | False)

    我对 Coq 有点陌生 我正在尝试实现插入排序的通用版本 我正在实现一个以比较器作为参数的模块 该 Comparator 实现了比较运算符 如 is eq is le is neq 等 在插入排序中 为了插入 我必须比较输入列表中的两个元素
  • Coq 中的程序定点和函数有什么区别?

    它们似乎有相似的目的 到目前为止我注意到的一个区别是Program Fixpoint将接受复合措施 例如 measure length l1 length l2 Function似乎拒绝这一点并且只会允许 measure length l1
  • 如何暂时禁用 Coq 中的符号

    当您熟悉项目时 符号很方便 但当您刚刚开始使用代码库时 符号可能会令人困惑 我知道你可以用白话关闭所有符号Set Printing All 但是 我想保留一些打印 例如隐式参数 全部打印如下 Require Import Utf8 core
  • 将假设中的 ~exists 转换为 forall

    我陷入了假设的境地 exists k k lt n 1 f k f n 2 并希望将其转换为等效的 我希望如此 假设forall k k lt n 1 gt f k lt gt f n 2 这是一个小例子 Require Import Co
  • 在 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
  • Coq - 在不丢失信息的情况下归纳函数

    当尝试对函数的结果 返回归纳类型 执行案例分析时 我在 Coq 中遇到了一些麻烦 当使用通常的策略时 比如elim induction destroy等等 信息就会丢失 我举个例子 我们首先有一个像这样的函数 Definition f n
  • 如何在构造微积分中提取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中 destruct https coq inria fr distrib current refman Reference Manual010 html hevea tactic65策略有一个接受 连接析取引入模式 的变体 该模式
  • 在依赖类型的函数式编程语言中,扁平化列表是否更容易?

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

    我注意到 那auto忽略双条件 这是一个简化的示例 Parameter A B Prop Parameter A iff B A lt gt B Theorem foo1 A gt B Proof intros H apply A iff

随机推荐

  • 如何列出 Cloud Firestore 文档中的子集合

    假设我将这个最小数据库存储在 Cloud Firestore 中 我怎样才能检索到的名字subCollection1 and subCollection2 rootCollection aDocument someField value 1
  • iPhone 室内定位应用程序

    我正在研究如何为我的工作创建一个应用程序 允许客户下载该应用程序 最好通过应用程序商店 并使用某种 wifi 三角测量 指纹能够确定他们的位置 以进行本质上的交互式游览 现在 我的具体问题是 iPhone 的最佳选择是什么 预计所有客户都不
  • Eclipse 生成的 Web 服务客户端速度极慢

    一些预先信息 我有一个 SOAP 服务 使用 JAX WS 端点类 托管 但我认为这并不重要 我可以通过 Visual Studio 生成客户端 C 来连接并使用 Web 服务 我使用 Eclipse Web Tools 生成了一个 jav
  • 有没有办法从准备好的语句中检索自动增量ID

    当使用带有准备好的语句的 java 查询时 有没有办法从数据库查询中检索自动生成的密钥 例如 我知道 AutoGenerateKeys 可以按如下方式工作 stmt conn createStatement stmt executeUpda
  • 如何为Android实现自定义设备照片库?

    我正在开发 Android 应用程序 它将包含基本的图片库功能 我已经成功构建了从应用程序后端 API 获取照片列表并在活动布局内的 android gridview 中渲染它们的活动 This is how it looks like a
  • JPA Hibernate 运行时动态实体映射和持久化

    基本上 我们有一个 Spring Boot 应用程序 它要求用户可以定义他 她自己的一组字段 并且这些字段应在运行时通过 JPA Hibernate 持久保存在自己的类 表中 这些类将通过bytebuddy动态生成 所有这些都应该动态完成
  • BLE 外设吞吐量限制

    我们正在开发一款与 iPad 配合使用的 BLE 传感器外设 需要使用 TI CC2541 BLE 模块和自定义配置文件实现以下 BLE 通知特征 无应答 的数据吞吐量 每 10 毫秒 1 个 20 字节 GATT 最大标准数据包 或者由于
  • django 用户中的多个登录字段

    使用 Django 用户时是否可以以某种方式使用多个登录字段 就像在 Facebook 中一样 我们可以使用用户名 电子邮件以及电话号码登录 是的 您可以编写自己的身份验证后端 如本节所述 https docs djangoproject
  • 如何检查一个选项是否被选中?

    mySelectBox option each function if this isChecked alert this option is selected else alert this is not 显然 isChecked不起作用
  • 2013,iOS 中现有的绘图包(绘画、画笔、线条)?

    我需要将典型的手指绘图添加到应用程序中 通常 选择颜色 擦除 厚度 就像您在每个应用程序中看到的那样 很难相信在当今时代我必须从头开始编程 很难相信这个问题没有一个通用的解决方案 我所能找到的只是 https github com levi
  • 在单例背后抽象 IoC 容器 - 做错了吗?

    一般来说 我喜欢让应用程序完全不了解 IoC 容器 然而 我在需要访问它的地方遇到了问题 为了消除痛苦 我使用了一个基本的单例 在你跑向山丘或拔出猎枪之前 让我回顾一下我的解决方案 基本上 IoC 单例绝对不执行任何操作 它只是委托给必须传
  • multiprocessing.Process(使用spawn方法):继承哪些对象?

    文档 python 3 4 解释说spawn 子进程只会继承运行进程对象所需的资源run 方法 但哪些对象是 必需的 呢 我读它的方式告诉我 所有可以从内部到达的物体run 是 必要的 包括作为传递的参数args to Process in
  • 如何使用 GCM 3.0 为我的 Android 应用程序保留不同的配置

    我想为我的调试 发布构建变体保留不同的配置 但显然 google services json 文件只允许一个 还有其他选择吗 有没有办法保留多个文件 我正在使用此解决方法来解决构建风格的类似问题 风味具体谷歌服务 json文件存储在 app
  • PyCharm 中未解决的参考问题

    我有一个目录结构 simulate py src networkAlgorithm py 我可以通过以下方式访问网络模块sys path insert import sys import os path sys path insert 0
  • Visual Studio 2010 扩展性入门 - 3 个问题

    1 Visual Studio Package 项目与 VSIX 项目有何不同 2 在哪里可以找到一些初学者指南 3 在哪里可以找到 Visual Studio 2010 的可扩展性模型或扩展点的概述 提前致谢 你能解释一下你想写什么类型的
  • Unity 3 和错误“无法解析类型名称或别名“xxxxx”。请检查您的配置文件并验证此类型名称。”

    Unity 3 有什么办法可以解决这个问题吗 我已尽一切可能绕过此消息错误 但无法解决 我已经做了我在谷歌搜索中看到的一切 我几乎要放弃并尝试另一种 DI 解决方案 我的配置文件
  • 如果新大小小于或等于旧大小,标准是否保证 std::string::resize 不会重新分配内存?

    我需要经常将字符串设为空 然后在其中附加一些字符 std string clear 可能会重新分配 std string resize 0 是否进行重新分配 标准的话没有对此做出任何保证 我认为最好的答案是 注释 部分http en cpp
  • 在 Android 上,React Native 中的获取无法与 ssl 一起使用

    当我在 React Native 应用程序中使用 fetch 函数时 在 iOS 上一切按预期工作 但在 Android 中出现错误 错误是 TypeError 网络请求失败 做了一些调试 我发现错误的原因似乎如下 java securit
  • Markdown 中的单独列表

    在 Markdown 中可以有两个不同的列表 一个紧挨着另一个 without水平尺 元素 1 元素2 元素 3 元素 1 元素2 我通常使用 HTML 注释来分解相邻列表 例如 1 One 1 Two 1 One 1 Two 在 Stac
  • Coq:变量参数列表上的 Ltac 定义?

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