Coq 中的 Modus Ponens 和 Modus Tollens

2024-03-05

我想要针对这些简单的推理规则使用 Ltac 策略。

在 Modus Ponens 中,如果我有H:P->Qand H1:P, Ltac mp H H1将添加Q到上下文为H2 : Q.

在 Modus Tollens 中,如果我有H:P->Qand H1:~Q, then Ltac mt H H1将添加H2:~P结合上下文。

我已经为“肯定前件”写了一个,但在先例也是一种暗示的复杂情况下它不起作用。

Ltac mp H0 H1 := let H := fresh "H" in apply H0 in H1 as H.

编辑:我在另一个看似不相关的问题中找到了 Modus Ponens 的答案(用 Coq 重写假设,保留蕴涵 https://stackoverflow.com/questions/47520531/rewrite-hypothesis-in-coq-keeping-implication),其中“简化”版本apply是用generalize.

Ltac mp H H0 := let H1 := fresh "H" in generalize (H H0); intros H1.

不过,我仍然希望 Modus Tollens 能够给出答案。


这是一种解决方案:

Ltac mt PtoQ notQ notP :=
  match type of PtoQ with
  | ?P -> _ => pose proof ((fun p => notQ (PtoQ p)) : ~ P) as notP
  end.

该策略要求用户提供两个输入假设和输出假设的明确名称。我用type of PtoQ构建提取类型P从输入含义中得出,然后提供一个明确的术语(fun p => notQ (PtoQ p)类型的P -> False,其定义等于~ P。显式类型归属: ~ P用于使上下文看起来更漂亮,如果没有它,Coq 会将输出假设的类型显示为P -> False.

顺便说一句,我会使用类似这样的东西来实施肯定取件策略:

Ltac mp PtoQ P Q := 
  pose proof (PtoQ P) as Q.

又是在这里PtoQ and P参数是输入假设的名称和Q是要添加到上下文中的名称。

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

Coq 中的 Modus Ponens 和 Modus Tollens 的相关文章

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

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

    我见过很多 Coq 策略 它们在功能上是相互重叠的 例如 当你在假设中得到确切的结论时 你可以使用assumption apply exact trivial 也许还有其他人 其他例子包括destruct and induction对于无感
  • 使用 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 中归纳集的归纳子集

    我有一个用三个构造函数构建的归纳集 Inductive MF Set D MF cn MF gt MF gt MF dn Z gt MF gt MF 我想以某种方式定义一个新的归纳集 B 使得 B 是 MF 的子集 仅包含从 D 和 dn
  • 归纳命题在 Coq 中如何运作?

    我正在阅读软件基础中的 IndProp 和 Adam Chlipala 的第 4 章书 但我在理解归纳命题时遇到了困难 为了运行示例 让我们使用 Inductive ev nat gt Prop ev 0 ev 0 ev SS forall
  • 证明唯一的零长度向量为零

    我有一个类型定义为 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:将信息保存在匹配语句中

    我正在构建一个递归函数match在清单上l 在里面cons分支我需要使用以下信息l cons a l 为了证明递归函数终止 但是 当我使用match l信息丢失 我该如何使用match保留信息 这是函数 drop and drop lemm
  • Coq 无法在 Z 上计算有根据的函数,但它可以在 nat 上运行

    我正在 为我自己 写一篇关于如何在 Coq 中进行有根据的递归的解释 参见 Coq Art 书 第 15 2 章 首先我做了一个基于的示例函数nat效果很好 但后来我又做了一次Z 当我使用Compute来评估它 它并没有一直降低到Z价值 为
  • 如何将假设中的具体变量更改为存在量化变量?

    假设我有一个这样的假设 FooProp a b 我想将假设改为这种形式 exists a FooProp a b 我怎样才能做到这一点 我知道我能做到assert exists a FooProp a b by eauto但我试图找到一个不
  • 在 Coq 中使用依赖类型(安全第 n 个函数)

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

    OCaml 的 Hindley Milner 类型系统不允许命令式多态性 类似于 System F 除非通过最近对记录类型的扩展 这同样适用于 F 然而 有时需要将用命令式多态性 例如 Coq 编写的程序翻译成此类语言 Coq 的 OCam
  • 我可以在“coqtop - nois”下定义策略吗?

    coqtop nois Welcome to Coq 8 7 0 October 2017 Coq lt Ltac i idtac Toplevel input characters 0 4 gt Ltac i idtac gt Error
  • Coq 中的“错误:宇宙不一致”是什么意思?

    我正在努力通过软件基础 http www cis upenn edu bcpierce sf current 目前正在做教堂数字的练习 这是自然数的类型签名 Definition nat forall X Type X gt X gt X
  • Coq QArith 除以零就是零,为什么?

    我注意到在 Coq 的有理数定义中 零的倒数被定义为零 通常 除以零是没有明确定义 合法 允许的 Require Import QArith Lemma inv zero is zero 0 0 Proof unfold Qeq refle
  • Coq 中 MSet 的使用示例

    MSets https coq inria fr library Coq MSets MSets html似乎是 OCaml 式有限集的最佳选择 可悲的是 我找不到示例用途 如何定义一个空的MSet或单身人士MSet 我怎样才能结合两个MS
  • 为什么coq互感类型必须具有相同的参数?

    下列的亚瑟的建议 https stackoverflow com a 17304209 403875 我改变了我的Fixpoint相互关系Inductive这种关系 建立 游戏之间的不同比较 而不是 深入研究 但现在我收到一条全新的错误消息
  • 没有可判定的相等性或排除中间值的鸽巢证明

    在软件基础中IndProp v https softwarefoundations cis upenn edu lf current IndProp html lab244一个人被要求证明鸽巢原理 并且可以使用排除中间 但有人提到这并不是绝
  • 我可以将 Coq 证明提取为 Haskell 函数吗?

    自从学了一点 Coq 以来 我就想学着写一个所谓的除法算法的 Coq 证明 它实际上是一个逻辑命题 forall n m nat exists q nat exists r nat n q m r 我最近利用我学到的知识完成了这项任务软件基
  • 在 coq 的 then 部分中使用 if expression = true 的证明

    对于所有 1 Require Import ZArith Znumtheory Local Open Scope Z scope Require Coq Program Tactics Require Coq Program Wf Lemm

随机推荐

  • Typescript 实现接受多种类型输入的通用函数

    出于抽象目的 我需要实现一个接受不同类型输入的函数 type ContentA string type ContentB number type InputA name method a content ContentA type Inpu
  • 如何在 Visual Studio 中切换自动换行?

    Visual Studio NET 是否有办法打开和关闭自动换行 我习惯了 Eclipse 中的这个功能 它允许您右键单击并打开和关闭自动换行 这样当您有向右延伸的长行时 您不必向右和向左移动底部滚动条阅读你的代码 html http we
  • 从字符串在 node.js 中创建一个文本文件并将其作为响应进行流式传输

    我正在使用express js 我有一个字符串 Hello world 我希望用户点击 a href download Download a 用户应该下载包含文本的 Hello txt 而不是打开包含文本的选项卡 我已经四处寻找实现此目的的
  • 如何在 Xcode 4.5 上安装 iOS 4.3 模拟器?

    我通过 App Store 安装了 Xcode 4 5 它支持 iOS 5 1 和 6 0 但不支持 iOS 4 3 也无法在首选项的 下载 选项卡中下载 我尝试从另一台计算机上抓取它并将其放在这台计算机上 因为多米尼克 波拉达描述 htt
  • 如何根据字符数确定文件大小?

    在 Windows 上使用 java 和 jcifs 读取文件 我需要确定文件的大小 其中包含多字节以及 ASCII 字符 我怎样才能有效地实现它或java中的任何现有API Thanks 毫无疑问 要获得确切的字符数 您必须使用正确的编码
  • C# 或 VB 文档注释中的粗体还是斜体?

    有没有办法使用bold or italic里面的文档注释 就像是
  • secItemCopyMatching 返回 nil 数据

    首先 我观看了 WWDC 2013 关于使用钥匙串保护秘密的会议 我想做一个基本的密码存储 看完了整个视频 但在视频的前 10 分钟找到了我需要的东西 这看起来很简单 但我不完全理解数据编码和检索是如何工作的 问题 在 secItemCop
  • 有没有办法跟踪 API 网关限制的调用?

    我一直在使用 CloudWatch 跟踪 API Gateway 和 Lambda 的指标 它显示 Lambda 的受限制的调用 但是有什么方法可以查看 API Gateway 之前限制的调用数量 还没有 但我们计划在不久的将来解决这个问题
  • 自动委托java类的所有方法

    假设我有一个包含许多公共方法的类 public class MyClass public void method1 public void method2 public void methodN 现在我想创建一个wrapper类 它将所有方
  • 使用 javascript 旋转 div

    我想单击一个 div 并旋转另一个 div 然后当再次单击第一个 div 时 另一个 div 旋转回其原始位置 如果需要我可以参考这个库http ricostacruz com jquery transit http ricostacruz
  • 创建新的 SQLCommand 或重复使用相同的 SQLCommand

    我需要使用 ADO NET 将一系列命令发送到 SQL 2008 以便逐个执行 我应该为我发送的每个 SQL 创建一个新的 SQLCommand 吗 或者重用相同的 SQLCommand 并仅更改 CommandText 属性 谢谢 内斯特
  • 动态构建表达式树

    我正在遵循这个很好的例子 将 Linq to Sql 表达式转换为表达式树 https stackoverflow com questions 5225416 convert linq to sql expression to expres
  • 暂时禁用 SelectItems

    我有一个
  • 如何查找该月的最后一天?

    我正在尝试新的 Google Dart 语言 但我不知道如何获取当月的最后一天 这给了我当前日期 var now new DateTime now 为下个月提供零的日期值可得出上个月的最后一天 var date new DateTime 2
  • 如何在不使用 Windows 任务计划程序的情况下安排运行 bat 文件? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个触发 Python 脚本的批处理 bat 文件 该脚本需要大约 25 分钟才能交互完成 通过命令提示符手动完成 该批处理文件需要每天
  • 为什么捆绑程序不会在 OS X 10.8 上安装 json 1.7.4 gem?

    我使用的是 OS X 10 8 XCode 4 4 Ruby 1 9 3 和 Rails 3 2 当我从 git 克隆我的 Rails 项目并运行时 bundle install I get 安装 json 1 7 4 Errno EPER
  • 如何在play框架2.1中使用wro4j

    有一种方法可以包含 wro4jhttp code google com p wro4j http code google com p wro4j 在java play框架2 1中 我需要编译 hogan js 模板并执行更多操作 无需重新发
  • Storm 如何知道消息何时“完全处理”?

    还有一些关于超时和 maxSpoutPending 的问题 我在 Storm 文档中看到很多关于消息被完全处理的参考资料 但是我的 KafkaSpout 如何知道消息何时被完全处理 希望它能够识别我的 Bolt 的连接方式 以便当我的 St
  • 热衷于仅在 datagridview 中更改特定的列标题颜色?

    使用 VS 2005 C DataGridView WinForms 我需要为特定列的标题部分的字体 背景着色 我发现它只能对整个列列表的标题而不是单个列进行 非常感谢任何帮助 首先 在 DataGridView 中 您需要将 Enable
  • Coq 中的 Modus Ponens 和 Modus Tollens

    我想要针对这些简单的推理规则使用 Ltac 策略 在 Modus Ponens 中 如果我有H P gt Qand H1 P Ltac mp H H1将添加Q到上下文为H2 Q 在 Modus Tollens 中 如果我有H P gt Qa