Coq 将不存在的语句转换为 forall 语句

2023-12-15

我是 Coq 的新手。这是我的问题。 我有一个声明说:

H : forall x : term, ~ (exists y : term, P x y /\ ~ P y x)

我猜它相当于:

forall x y : term, (P x y /\ ~ P y x) -> false

但我可以使用哪种策略来转换假设呢?


我不知道有什么策略可以将“不存在”变成“forall-not”,但你总是可以assert并证明这一点。 (如果您反复需要,可以将其打包到an Ltac战术定义或一个简单的定理[1]。)

以下是证明这一点的三种方法。 (您应该能够将此脚本复制/粘贴到 CoqIDE 或 Emacs/ProofGeneral 中并单步执行代码。)

[1] 存在引理not_ex_all_not在图书馆Coq.Logic.Classical_Pred_Type,但是加载它会引入经典逻辑的公理(这里甚至不需要)。


(* dummy context to set up H of the correct type, for testing it out *)
Lemma SomeName (term : Type) (P : term -> term -> Prop) :
  (forall x : term, ~ (exists (y : term), P x y /\ ~ P y x)) ->
  True. (* dummy goal *)
Proof.
  intro H.
  (* end dummy context *)

(*这是长版本,带有一些解释:*)

  (* this states the goal, result will be put into the context as H' *)
  assert (forall (x y : term), (P x y /\ ~ P y x) -> False) as H'.
    (* get rid of unneeded variables in context, get new args *)
    clear - H; intros x y Pxy.
    (* unfolding the not shows the computational structure of this *)
    unfold not at 1 in H.
    (* yay... (x, y, Pxy) will produce False via H *)
    (* specialize to x and apply... *)
    apply (H x).
    (* ...and provide the witness. *)
    exists y.  exact Pxy.
    (* done. *)

  (* let's do it again... *)
  clear H'.

(*您也可以在一条语句中完成此操作:*)

  assert (forall x y, (P x y /\ ~ P y x) -> False) as H'
    by (clear -H; intros x y Pxy; apply (H x (ex_intro _ y Pxy))).

  (* and again... *)
  clear H'.

(*像这样简单的东西也可以用手写:*)

  pose proof (fun x y Pxy => H x (ex_intro _ y Pxy)) as H'; simpl in H'.

(*现在你有了正确类型的 H';可选择删除旧的 H:*)

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

Coq 将不存在的语句转换为 forall 语句 的相关文章

  • 如何证明 Coq 中的两个 Fibonacci 实现相等?

    我有两个斐波那契实现 如下所示 我想证明它们在功能上是等效的 我已经证明了自然数的性质 但是这个练习需要另一种我无法弄清楚的方法 我使用的教科书介绍了 Coq 的以下语法 因此应该可以使用这种表示法来证明相等性
  • 证明唯一的零长度向量为零

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

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

    我正在构建一个递归函数match在清单上l 在里面cons分支我需要使用以下信息l cons a l 为了证明递归函数终止 但是 当我使用match l信息丢失 我该如何使用match保留信息 这是函数 drop and drop lemm
  • 匹配中的冗余子句

    当我运行以下脚本时 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中证明了某个定理 稍后我想将其作为假设引入到另一个定理的证明中 有没有一种简洁的方法来做到这一点 当我想做一些诸如案例证明之类的事情时 我通常会出现这种需要 我发现做到这一点的一种方法是assert陈述定理 然后立即证明它
  • 如何将假设中的具体变量更改为存在量化变量?

    假设我有一个这样的假设 FooProp a b 我想将假设改为这种形式 exists a FooProp a b 我怎样才能做到这一点 我知道我能做到assert exists a FooProp a b by eauto但我试图找到一个不
  • coq 中的依赖模式匹配

    以下代码 当然不是完整的证明 尝试对依赖产品进行模式匹配 Record fail Set mkFail i nat f forall x x lt i gt nat Definition failomat forall m nat f fo
  • 如何在 Coq 简化过程中应用一次函数?

    据我了解 Coq 中的函数调用是不透明的 有时 我需要使用unfold应用它然后fold将函数定义 主体恢复为其名称 这通常很乏味 我的问题是 是否有更简单的方法来应用函数调用的特定实例 作为一个最小的例子 对于一个列表l 证明右附加 没有
  • Coqide 错误:编译的库 Basics.vo 对库做出了不一致的假设

    我在 mac os X 上使用 CoqIDE 8 4pl5 当 CoqIDE 转发到此命令时 会弹出此错误消息 需要导入基础知识 错误 编译的库 Basics vo 对库做出了不一致的假设 Coq Init Notifications 当我
  • 在 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 QArith 除以零就是零,为什么?

    我注意到在 Coq 的有理数定义中 零的倒数被定义为零 通常 除以零是没有明确定义 合法 允许的 Require Import QArith Lemma inv zero is zero 0 0 Proof unfold Qeq refle
  • Coq:添加“强归纳”策略

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

    destruct可以用来分割and or在柯克 不过好像也可以用暗示 例如我想证明 P gt P Lemma test P P gt P Proof unfold not intro pffpf apply pffpf intro pff
  • Coq 中的案例分析证明

    我试图证明关于以下函数的命题 Program Fixpoint division m nat n nat measure m nat match lt nat 0 n with false gt 0 true gt match leq na
  • Coq 中 MSet 的使用示例

    MSets https coq inria fr library Coq MSets MSets html似乎是 OCaml 式有限集的最佳选择 可悲的是 我找不到示例用途 如何定义一个空的MSet或单身人士MSet 我怎样才能结合两个MS
  • 在 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 中是分开的?

    我有 JavaScript Ruby 编程背景 并且习惯了 true false 的工作方式 在 JS 中 true false false true 然后你可以使用这些真 假值 like var a true b false a b So

随机推荐

  • 当我从 sagemaker 端点获得预测时,端点会做什么?

    在 sagemaker 中 文档讨论了需要具有 4 个特定函数的推理脚本 当我们得到预测时 Python SDK 会向端点发送请求 然后推理脚本运行 但我找不到 SDK 中运行推理脚本的位置 当我浏览 sdk 代码时Predictor pr
  • PHP echo before sleep功能,不起作用

    我希望在睡眠函数执行之前在浏览器中输出回显 每次 以下代码不起作用 set time limit 0 ob implicit flush 1 ob start echo Start br ob flush for i 0 i lt 10 i
  • Redux VS Context API [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我非常熟悉 Context API 我完成了 Redux 速成课程 它们对我来说 原则上 很相似 问题是 我应该关注哪一个 Context API 和 Redux 之间的主要优缺点是什么
  • 在 Spark Scala 中合并两个 RDD

    我有两个 RDD rdd1 字符串 字符串 key1 value11 key2 value12 key3 value13 rdd2 字符串 字符串 key2 value22 key3 value23 key4 value24 我需要使用 r
  • 使用标签时如何使用Onclick事件

    我有两个java类 and 两种布局对于两个班级来说 每个layout正在拥有一个button在里面 两个班级都在延长Activity 现在在我使用的第一个布局中include像这样标记
  • 使用 Web API 在 jqGrid 中添加/编辑/删除

    我是 jqGrid 的新手 需要一些关于表单添加 编辑 删除功能的帮助 目前还没有找到相关资源 我的网格在添加 编辑时显示弹出窗口 还在单击编辑时填充数据 但是我不确定应该使用什么 javascript 代码来调用 Web api 来发布
  • scanf("%c", &c) 和 scanf(" %c", &c) 之间的区别[重复]

    这个问题在这里已经有答案了 考虑以下 C 代码片段 include
  • 如何在 PyTorch 中打印模型摘要?

    如何在 PyTorch 中打印模型的摘要 如下所示model summary 在 Keras 中执行的操作 Model Summary Layer type Output Shape Param Connected to
  • BackgroundWorker 从循环中执行 UI 更新

    我正在 BackgroundWorker 的 DoWork 内循环创建 ViewModel 对象 我报告每次迭代的进度 将新对象作为参数传递以由 ProgressChanged 处理程序 它是 UI 线程的朋友 检索 在该处理程序中 对象被
  • Windows Phone 7 列表框加载数据的进度条

    当列表框完成加载其数据时 是否有一个我可以监听的事件 我有一个文本框和一个列表框 当用户按 Enter 键时 列表框将填充来自 Web 服务的结果 我想在列表框加载时运行进度栏 并在完成后折叠它 UPDATE
  • javascript 字符串比较

    我有以下脚本 document write 12 lt 2 返回 true 有什么理由吗 文档说 javascript 以数字方式比较字符串 但是 我不明白 12 如何小于 2 JavaScript 逐个字符地比较字符串 直到其中一个字符不
  • 将日期从 Excel 转换为 R

    我很难将日期从 excel 从 csv 读取 转换为 R 非常感谢帮助 这是我正在做的事情 df date as Date df excel date format d m Y 但是 有些日期会被转换 但有些则不会 这是以下的输出 head
  • ggpairs 绘图,其中包含具有重要性星级和自定义主题的相关值热图

    我想用 ggPairs 创建一个相关图 其中应该包含 相关值的热图 就像在这个SO问题中一样 相关性的显着性星号 就像在这个SO问题中一样 根据自定义主题的字体类型和字体大小 基于 user20650对上述SO问题提供的优秀解决方案 我成功
  • Angular2:将表单上下文绑定到 ngTemplateOutlet

    我试图定义一个包含动态表单 使用 ReactiveForms 的组件 用户应该能够在其中添加 删除控件 控件可以采用多种形式 并且必须在组件外部定义 因此我认为 TemplateRef 最适合这种情况 我正在努力寻找一种通过使用 formC
  • XSL 与区域化/国际化数字格式

    在格式化数字时 XSL 中是否内置了任何区域化支持 目前 我的底层 XML 包含英国 美国格式的数字 例如 54321 12345 我可以对此进行选择总和 以相同的格式给出总计 我可以使用 format number 54321 12345
  • Lattice中的facet_wrap相当于什么

    假设我们有一些这样的数据 dta lt data frame group rep letters 1 8 each 1000 x runif 8000 y runif 8000 我想为每个组生成一个包含 y x 的格子图 但是 第一行有 a
  • 左外连接等效

    我有一个包含空值的表 在 ORDER 表中 PART ID 部分有 2 个空值 CUSTOMER ID 部分有 2 个空值 我有这样的疑问 SELECT O ORDER ID O ORDER DATE O CUST ID O QUANTIT
  • 将图形直接放入 Knit 文档中(不将其文件保存在文件夹中)

    我正在 RStudio 中创建一个名为 test Rnw 的文档 其 MWE 如下 documentclass 12pt english nohyper tufte handout usepackage tabularx usepackag
  • 逗号运算符的正确用法是什么?

    我看到了这段代码 if cond perror an error occurred exit 1 为什么要这么做 为什么不只是 if cond perror an error occurred exit 1 在你的例子中 它根本没有任何理由
  • 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 但我可以使用哪种