如何禁止简单策略展开算术表达式?

2023-11-25

The simpl策略展开诸如2 + a“匹配树”这看起来一点也不简单。例如:

Goal forall i:Z, ((fun x => x + i) 3 = i + 3).
simpl.

导致:

forall i : Z,
match i with
| 0 => 3
| Z.pos y' =>
    Z.pos
      match y' with
      | q~1 =>
          match q with
          | q0~1 => (Pos.succ q0)~1
          | q0~0 => (Pos.succ q0)~0
          | 1 => 3
          end~0
      | q~0 =>
          match q with
          | q0~1 => (Pos.succ q0)~0
          | q0~0 => q0~1
          | 1 => 2
          end~1
      | 1 => 4
      end
| Z.neg y' => Z.pos_sub 3 y'
end = i + 3

如何避免此类并发症simpl tactic?

这个特定的目标可以通过以下方式解决omega,但如果它更复杂一点,欧米茄就会失败,我必须求助于类似的东西:replace (2 + a) with (a + 2); simpl; replace (a + 2) with (2 + a).


您可以使用以下命令控制定义的展开Transparent and Opaque命令。在你的例子中,你应该能够说类似的话

Opaque Z.add.
simpl.
Transparent Z.add.

或者,Arguments command可以用来指示simpl避免在某些情况下简化术语的策略。例如。

Arguments Z.add _ _ : simpl nomatch.

在你的情况下对我有用。这个特殊变体的作用是避免在一个又大又丑的情况下简化术语。match这样做后会出现在头部位置(您在示例中看到的)。然而,还有其他变体。

最后,为了完整起见,反射库提供了良好的基础设施,使某些定义在本地不透明。所以你可以这样说

rewrite (lock Z.add) /= -lock.

意思是“锁”Z.add,这样它就不会简化,然后简化表达式的其余部分(/=开关),然后再次解锁定义(-lock)".

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

如何禁止简单策略展开算术表达式? 的相关文章

  • Coq 中的 `destruct` 和 `case_eq` 策略有什么区别?

    我明白了destruct因为它将归纳定义分解为其构造函数 我最近看到case eq我不明白它有什么不同 1 subgoals n nat k nat m M t nat H match M find elt nat n m with Som
  • 在 Coq 中使用我自己的 == 运算符重写策略

    我试图直接从字段的公理证明简单的字段属性 经过对 Coq 原生现场支持的一些实验 像这个 我决定最好简单地写下 10 条公理并使其自成一体 我在需要使用的时候遇到了困难rewrite与我自己的 运算符自然不起作用 我意识到我必须添加一些我的
  • 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 但我可以使用哪种
  • 证明唯一的零长度向量为零

    我有一个类型定义为 Inductive bits nat gt Set bitsNil bits 0 bitsCons forall l bool gt bits l gt bits S l 我试图证明 Lemma emptyIsAlway
  • Ltac:通过回溯重复策略 n 次

    假设我有一个像这样的策略 取自 HaysTac 它搜索一个参数来专门化一个特定的假设 Ltac find specialize in H multimatch goal with v gt specialize H v end 然而 我想写
  • 如何有效地查找 Coq 中定义标识符的位置?

    在大多数 IDE 或文本编辑器中 您可以右键单击某个术语 它会将您带到定义该术语的文件 CoqIDE好像没有这个 所以我一直在做coqdoc myfile v html 然后转到生成的 HTML 文档 但该文件中唯一可点击的术语是针对 Co
  • 证明匹配语句

    为了解决一个练习 我有以下代表整数的定义 Inductive bin Type Zero bin Twice bin gt bin TwiceOne bin gt bin 这个想法是 Twice x is 2 x 两次一x is 2 x 1
  • F# 中的命令式多态性

    OCaml 的 Hindley Milner 类型系统不允许命令式多态性 类似于 System F 除非通过最近对记录类型的扩展 这同样适用于 F 然而 有时需要将用命令式多态性 例如 Coq 编写的程序翻译成此类语言 Coq 的 OCam
  • 将假设中的 ~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
  • Coq 中的“错误:宇宙不一致”是什么意思?

    我正在努力通过软件基础 http www cis upenn edu bcpierce sf current 目前正在做教堂数字的练习 这是自然数的类型签名 Definition nat forall X Type X gt X gt X
  • Coq:添加“强归纳”策略

    对自然数的 强 或 完全 归纳意味着当证明 n 上的归纳步骤时 您可以假设该属性对于任何 k 都成立 Theorem strong induction forall P nat gt Prop forall n nat forall k n
  • Coq 中 MSet 的使用示例

    MSets https coq inria fr library Coq MSets MSets html似乎是 OCaml 式有限集的最佳选择 可悲的是 我找不到示例用途 如何定义一个空的MSet或单身人士MSet 我怎样才能结合两个MS
  • 如何匹配 Coq 中的特定值?

    我正在尝试实现一个函数 该函数可以简单地计算包中某些 nat 的出现次数 只是列表的同义词 这就是我想做的 但它不起作用 Require Import Coq Lists List Import ListNotations Definiti
  • 为什么coq互感类型必须具有相同的参数?

    下列的亚瑟的建议 https stackoverflow com a 17304209 403875 我改变了我的Fixpoint相互关系Inductive这种关系 建立 游戏之间的不同比较 而不是 深入研究 但现在我收到一条全新的错误消息
  • Coq案例分析和函数返回子集类型的重写

    我正在做一个关于使用子集类型编写经过认证的函数的简单练习 想法是先写一个前驱函数 pred forall n n nat n gt 0 m nat S m n 1 然后使用这个定义给定一个函数 pred2 forall n n nat n
  • 我可以将 Coq 证明提取为 Haskell 函数吗?

    自从学了一点 Coq 以来 我就想学着写一个所谓的除法算法的 Coq 证明 它实际上是一个逻辑命题 forall n m nat exists q nat exists r nat n q m r 我最近利用我学到的知识完成了这项任务软件基
  • “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
  • 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 上

随机推荐

  • 如何为约束布局上的嵌套视图设置动画?

    我有一个要求 视图需要位于底部中心并根据其内容调整高度 于是创建了constraint layout根内constraint layout为了达成这个 但现在我面临动画的问题 我无法申请constraintSet
  • 搜索函数源代码

    在 R 中 您可以将函数的源视为函数只是另一个对象 我正在寻找一种方法来搜索此源代码 而不知道源代码保存在哪个文件中 例如 我可能想知道该函数是否shapiro test包含函数sort 确实如此 If shapiro test是我要使用的
  • 在 iPhone 应用程序中将单个像素直接绘制到屏幕上的最快方法是什么?

    我正在寻找在 iPhone 应用程序中将数千个单独计算的像素直接绘制到屏幕上的最快方法 该应用程序的性能非常好 最有可能使用 OpenGL 例如 glBegin GL POINTS glColor3f glVertex3f glEnd 甚至
  • Mac 上的 cronjobs 入门

    我正在尝试熟悉 cron 作业 我想我已经了解了基本的想法 调度 语法等 但是 我似乎无法在我的 mac 上使用终端来正确地完成它 我到底在哪里可以找到定时任务 我应该如何引用脚本的路径 我想做的是在远程机器上点击 php 脚本 http
  • CSS 中不断扩展的中间体

    我将如何设计一个具有固定高度的页眉和页脚 附加到浏览器窗口的顶部和底部 但中间可扩展的网站 滚动条仅适用于中间 图中的橙色部分 因此页面的其余部分永远不需要滚动 为了更清楚地解释 我在下面画了一个模型 理想情况下 它需要完全用 CSS 和
  • 如何在 SSRS 报告中创建动态列

    I need to create a SSRS report like 我有 3 列的表格开发者名称 工作时间 日期 如何创建报告以及获取数据的 sql 查询是什么 我不要求完整的 SQL 查询 我只需要一些提示 您可以使用 Matrix
  • Python 重新“伪造转义错误”

    我一直在摆弄 python re 模块 search方法 cur是来自 Tkinter 条目小部件的输入 每当我在条目小部件中输入 时 它都会引发此错误 我不太确定错误是什么或如何处理它 任何见解将不胜感激 cur是一个字符串 tup 0
  • SevenZipSharp - 压缩内存流

    我正在使用 SevenZipSharp 将文件压缩为 zip 文件 有没有办法使用它从内存流创建 zip 也就是说 之前将文件加载到内存流中 谢谢 玛雅 我正在使用 SevenZipSharp 来处理流 没有任何问题 SevenZip Se
  • 这个标志到底意味着什么? |=

    我很想了解这个运营商 我在 Java 中设置标志时见过这种表示法 例如 notification flags Notification FLAG AUTO CANCEL 它是否执行某种位操作 这个标记到底有什么作用 还有其他类似的众所周知的
  • 如何在android中打开特定的短信

    有没有办法用特定的短信在android上打开消息传递活动 threadId应该是您要查看的 SMS MMS 线程的 id Intent defineIntent new Intent Intent ACTION VIEW defineInt
  • 是否可以输入多种类型的提示?

    我可以使用类型提示允许两种不同的类型吗 例如 范围 requester可以是以下任一者User or File function log User File requester 从 PHP 8 0 开始 这将是可能的包含联合类型 The 该
  • Subversion:合并时“目标路径不存在”是什么意思?

    使用 subversion 1 5 我有分支 B 它是从分支 A 分支出来的 在两个分支中完成工作后 我将更改从 A 合并到 B 中 使用svn merge http path to A在B 的工作目录中并得到svn Target path
  • 为什么在结构体的构造函数中设置属性不起作用?

    我有以下不允许的代码 下面的错误 为什么 struct A private int b public A int x B x public int B get return b set b value 我收到以下错误 在分配 this 对象
  • 如何让 Matlab 读取正确数量的 xml 节点

    我正在使用 matlab 的 xmlread 内部函数读取一个简单的 xml 文件
  • MapView.onMapReady 从未在 Fragment 中调用以在 MapView 中加载 Google 地图

    我将尝试在 Android 应用程序中的名为的片段上显示地图RoeteFragment 如果我调试我的代码 我会看到该方法onMapReady永远不会被调用 因此地图不会加载 该片段实现了OnMapReadyCallback喜欢需要并且在o
  • JavaScript ecma6 将普通函数更改为箭头函数

    我有那个代码 function defineProperty object name callback if object prototype Object defineProperty object prototype name get
  • 在 UITableView 底部添加活动指示器? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 I have UITableview像第一个这样的分页将从服务器获取 20 个对象并填充UITableView然后 当它到达最后一行时 需要进行另一个服务调用来获取接下来的 20 个对象
  • 在 TestNG/Selenium 中自动重启失败的测试用例

    我正在使用 Selenium webdriver 在 Java 中与 TestNG 一起运行 X 数量的测试用例 我希望任何测试用例一旦失败就自动重新启动 无论是从开始还是从故障点 我知道TestNG框架有以下方法 Override pub
  • 对网络响应进行单元测试。在调试时有效,而不是在实际运行时有效

    我目前正在尝试测试是否确实收到了网络响应 虽然我知道这不是我应该做的测试 但这是我自己的好奇心 如果可能的话我想继续下去 就目前情况而言 我已经成功创建了测试 请求会毫无问题地发送到齐射队列 现在奇怪的部分 该请求永远不会被执行 这是我如何
  • 如何禁止简单策略展开算术表达式?

    The simpl策略展开诸如2 a 匹配树 这看起来一点也不简单 例如 Goal forall i Z fun x gt x i 3 i 3 simpl 导致 forall i Z match i with 0 gt 3 Z pos y