coq - Coq中的析取消除规则?
问题描述
我很惊讶在 Coq 中没有找到用于析取消除的内置命题:
P \/ ~ P -> (P -> C) -> (~ P -> C) -> C
没有战术怎么证明?仅使用 Curry/Howard 同构。
解决方案
它确实存在。它被称为or_ind
。
Check or_ind.
(* : forall A B P : Prop,
(A -> P) -> (B -> P) -> A \/ B -> P *)
(* shuffling arguments to get your signature *)
Check (fun (P C : Prop) (p : P \/ ~P) (l : P -> C) (r : ~P -> C) => or_ind l r p).
更深层次的是,此功能实际上是其or
自身定义的一部分。or
是一个归纳类型,每个归纳类型都带有在原始match
构造中使用它的规则。or_ind
只是一个包装器,让您match
以函数形式使用它。您的函数/定理将根据 来match
实现
fun (P C : Prop) (p : P \/ ~P) (l : P -> C) (r : ~P -> C) =>
match p with
| or_introl p => l p
| or_intror p => r p
end
推荐阅读
- java - 搜索翻译的 id 时应该返回 null 还是 -1?
- java - 启动 jasperserver 失败:org.springframework.beans.factory.BeanCreationException
- swift - Firebase / Firestore - 完成块未按预期工作
- javascript - Python转javascript、js认证
- python - 动态数组python 3
- sql - 如何在 SQL 中特定列的重复行之后放置 0?
- java - 在火花集群环境上运行并行作业时火花数据集错误值
- .net - webapi使用Angular应用程序在跨域中丢失会话值
- mysql - 如何在参数之间组合多个
- python - APIView 类和 generics.GenericAPIView 有什么区别