- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究 Coq 并试图证明 Martin-Lof 的等式和路径归纳的等式之间的同构。
我将这两个等式定义如下。
Module MartinLof.
Axiom eq : forall A, A -> A -> Prop.
Axiom refl : forall A, forall x : A, eq A x x.
Axiom el : forall (A : Type) (C : forall x y : A, eq A x y -> Prop),
(forall x : A, C x x (refl A x)) ->
forall a b : A, forall p : eq A a b, C a b p.
End MartinLof.
Module PathInduction.
Axiom eq : forall A, A -> A -> Prop.
Axiom refl : forall A, forall x : A, eq A x x.
Axiom el : forall (A : Type) (x : A) (P : forall a : A, eq A x a -> Prop),
P x (refl A x) -> forall y : A, forall p : eq A x y, P y p.
End PathInduction.
Definition f {A} : forall x y: A, forall m: MartinLof.eq A x y, PathInduction.eq A x y.
Proof.
apply: (MartinLof.el A (fun a b p => PathInduction.eq A a b) _ x y m).
move=> x0.
exact: PathInduction.refl A x0.
Defined.
Definition g {A} : forall x y: A, forall p: PathInduction.eq A x y, MartinLof.eq A x y.
Proof.
apply: (PathInduction.el A x (fun a p => MartinLof.eq A x a) _ y p).
exact: MartinLof.refl A x.
Defined.
Definition pf1 {A}: forall x y: A, forall m: MartinLof.eq A x y,
eq m (g x y (f x y m)).
Definition pf2 {A} : forall x y: A, forall p: PathInduction.eq A x y,
eq p (f x y (g x y p)).
(g x y (f x y m))
最佳答案
问题是你对身份类型的定义不完整,因为它没有指定如何el
与 refl
互动.这是一个完整的解决方案。
From mathcomp Require Import ssreflect.
Module MartinLof.
Axiom eq : forall A, A -> A -> Prop.
Axiom refl : forall A, forall x : A, eq A x x.
Axiom el : forall (A : Type) (C : forall x y : A, eq A x y -> Prop),
(forall x : A, C x x (refl A x)) ->
forall a b : A, forall p : eq A a b, C a b p.
Axiom el_refl : forall (A : Type) (C : forall x y : A, eq A x y -> Prop)
(CR : forall x : A, C x x (refl A x)),
forall x : A, el A C CR x x (refl A x) = CR x.
End MartinLof.
Module PathInduction.
Axiom eq : forall A, A -> A -> Prop.
Axiom refl : forall A, forall x : A, eq A x x.
Axiom el : forall (A : Type) (x : A) (P : forall a : A, eq A x a -> Prop),
P x (refl A x) -> forall y : A, forall p : eq A x y, P y p.
Axiom el_refl : forall (A : Type) (x : A) (P : forall y : A, eq A x y -> Prop)
(PR : P x (refl A x)),
el A x P PR x (refl A x) = PR.
End PathInduction.
Definition f {A} (x y: A) (m: MartinLof.eq A x y) : PathInduction.eq A x y.
Proof.
apply: (MartinLof.el A (fun a b p => PathInduction.eq A a b) _ x y m).
move=> x0.
exact: PathInduction.refl A x0.
Defined.
Definition g {A} (x y: A) (p: PathInduction.eq A x y) : MartinLof.eq A x y.
Proof.
apply: (PathInduction.el A x (fun a p => MartinLof.eq A x a) _ y p).
exact: MartinLof.refl A x.
Defined.
Definition pf1 {A} (x y: A) (m: MartinLof.eq A x y) : eq m (g x y (f x y m)).
Proof.
apply: (MartinLof.el A (fun x y p => p = g x y (f x y p))) => x0.
by rewrite /f MartinLof.el_refl /g PathInduction.el_refl.
Qed.
Definition pf2 {A} (x y: A) (m: PathInduction.eq A x y) : eq m (f x y (g x y m)).
Proof.
apply: (PathInduction.el A x (fun y p => p = f x y (g x y p))).
by rewrite /f /g PathInduction.el_refl MartinLof.el_refl.
Qed.
eq1_rect
也可以实现类似的定义。和
eq2_rect
.
Inductive eq1 (A : Type) (x : A) : A -> Type :=
| eq1_refl : eq1 A x x.
Inductive eq2 (A : Type) : A -> A -> Type :=
| eq2_refl x : eq2 A x x.
Definition f {A} {x y : A} (p : eq1 A x y) : eq2 A x y :=
match p with eq1_refl _ _ => eq2_refl A x end.
Definition g {A} {x y : A} (p : eq2 A x y) : eq1 A x y :=
match p with eq2_refl _ z => eq1_refl A z end.
Definition fg {A} (x y : A) (p : eq2 A x y) : f (g p) = p :=
match p with eq2_refl _ _ => eq_refl end.
Definition gf {A} (x y : A) (p : eq1 A x y) : g (f p) = p :=
match p with eq1_refl _ _ => eq_refl end.
eq1
对应于您的
PathInduction.eq
, 和
eq2
对应于您的
MartinLof.eq
.您可以通过让 Coq 打印其递归原则的类型来检查这一点:
Check eq1_rect.
Check eq2_rect.
Type
中定义了这两个而不是
Prop
.我这样做只是为了让 Coq 生成的递归原则更接近你所拥有的;默认情况下,Coq 对
Prop
中定义的事物使用更简单的递归原则。 (尽管可以通过一些命令更改该行为)。
关于equality - 证明 Coq 中 Martin-Lof 等式和路径归纳之间的同构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45488325/
我试图理解这个草图,但无法理解。如果我错了,请纠正我,但基本上,假设我有一个文本数据..单词..我有一个散列函数..它接受一个单词并创建一个整数散列,然后我将该散列转换为二进制位向量?正确的..然后我
我正在考虑实现 Robert Martin 的 Clean Architecture在一个项目中,我试图找出如何处理非平凡用例。 我发现很难将架构扩展到复杂/组合的用例,尤其是参与者是系统而不是用户的
我正在尝试实现 Clean Architecture由罗伯特·马丁描述。更具体地说,我正在使用 VIPER这是 Clean Architecture 的 iOS 版本。 我遇到的问题如下: 用户开始查
好吧,Martin Fowler 从 POEAA 一书中介绍了这种工作单元的概念。如果您想拥有自动提交系统,它会非常有效,在该系统中,您的域模型使用工作单元将自己标记为新的、脏的、已删除的或干净的。然
我正在研究 Coq 并试图证明 Martin-Lof 的等式和路径归纳的等式之间的同构。 我将这两个等式定义如下。 Module MartinLof. Axiom eq : forall A, A -
在 Martin Odersky 的演讲中:http://youtu.be/9PkxE_L_LMo ,在第 49 分钟,他谈到了一个问题,即由于静态数据,“编译器不可重入”。 我对“可重入”一词在 J
我阅读了 Robert Martin 关于接口(interface)隔离原则的文章 here .在文章的最后,在解决 ATM UI 架构的问题时,他说: Consider also that each
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
以下是我为实现 Flajolet and Martin’s Algorithm 而编写的代码.我使用 Jenkins 哈希函数 生成数据的 32 位哈希值。该程序似乎遵循了该算法,但偏离了大约 20%
这是一个关于函数只做一件事的概念的问题。如果没有一些相关的上下文上下文就没有意义,所以我会在这里引用它们。它们出现在第 37-38 页: To say this differently, we wan
在Domain Logic and SQL , Martin Fowler 谈到了 3 种与数据库接口(interface)的方式: 交易脚本 领域模型,以及 SQL 中的逻辑 我想知道的是: 在使用
我正在处理Odersky's ScalaDays 2011 keynote talk ,当我到达这一特定行时(分配 charCode),他用极少的代码行构建了一个电话号码同义词生成器: val mne
const mostLikes = (blogs) => { if (!blogs.length) { return 0 } const distinctAuthors = [..
我正在使用 Martin Peris 代码使用 OpenCV 和 PCL 进行 3D 重建(链接如下): http://blog.martinperis.com/2012/01/3d-reconstr
我正在实现前向后向/Baum-Welch 算法,如 Jurafsky + Martin 的语音和语言处理(第 2 版)中所述,作为词性标注器。我的代码大致结构如下: #Initialize trans
我想调整简单容器的高度,以匹配使用 $.ajax 从服务器返回的数据传递的不断变化的深度要求。 似乎一旦触发模态,所有 CSS 都会即时更改,例如$('#someid').css('高度','500p
目前正在学习在线类(class)《响应式编程原理》由 Martin Odersky、Erik Meijer、Roland Kuhn 编写,一年前就已经结束了,我想这门类(class)的讨论论坛中没有人
马丁·福勒 (Martin Fowler) 说 avoid automatic deserialization在 API 中: I prefer to avoid automatic deserial
我决定尝试学习 Electron ,所以我克隆了 electron quick start并使用 npm i 安装依赖项然后跑 npm start但由于此错误,我需要帮助: dyld: Symbol
我是一名优秀的程序员,十分优秀!