Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Coq 使用';护航模式';获得模式匹配相等的内码证明_Coq - Fatal编程技术网

Coq 使用';护航模式';获得模式匹配相等的内码证明

Coq 使用';护航模式';获得模式匹配相等的内码证明,coq,Coq,这是一个关于范畴理论的初学者教科书的标准例子,认为一个前序产生了一个范畴(其中hom集合hom(x,y)是一个单态还是空态取决于x是否不是组合在本例中只是p的传递性?@JohnWiegley是的。但是,我试图编写一个函数,给定两个箭头(x,y)和(y',z)返回一些组合箭头或无(取决于y=y'与否)。因此,在我的函数体中,我需要检查y=y',我需要建立x@SvenWilliamson的证明。我有点困惑……这里的问题是什么?如果你想了解护航模式如何工作,你可以使用So的搜索:[coq]护航。您会发

这是一个关于范畴理论的初学者教科书的标准例子,认为一个前序产生了一个范畴(其中hom集合
hom(x,y)
是一个单态还是空态取决于
x是否不是组合在本例中只是p的传递性?@JohnWiegley是的。但是,我试图编写一个函数,给定两个箭头
(x,y)
(y',z)
返回
一些组合箭头或
(取决于
y=y'
与否)。因此,在我的函数体中,我需要检查
y=y'
,我需要建立
x@SvenWilliamson的证明。我有点困惑……这里的问题是什么?如果你想了解护航模式如何工作,你可以使用So的搜索:
[coq]护航
。您会发现一些示例和解释,以及大量关于Adam Chlipala的CPDT的参考(到MoreDep章节)。这是如何实现
测试
@AntonTrunov的几个示例非常感谢,是的,我的问题似乎是关于护航模式(或者至少是它的一个应用程序),虽然我问它的时候不知道。这是关于在你的代码中有一个你正在进行模式匹配的平等性证明。你发布的链接实际上是从一个SO答案中提取的:。在这种情况下,合成不是p的传递性吗?@JohnWiegley是的。但是,我正在尝试编写一个给定tw的函数o箭头
(x,y)
(y',z)
返回
一些合成箭头或
无(取决于
y=y'
).因此,在我的函数体中,我需要检查
y=y'
,我需要建立
x@SvenWilliamson的证明我有点困惑…这里的问题是什么?如果你想了解护航模式是如何工作的,你可以使用So的搜索:
[coq]护航
。您会发现一些示例和解释,以及大量关于Adam Chlipala的CPDT的参考(到MoreDep章节)。这是如何实现
测试
@AntonTrunov的几个示例非常感谢,是的,我的问题似乎是关于护航模式(或者至少是它的一个应用程序),虽然我问的时候不知道。这是关于在你的代码中有一个你正在进行模式匹配的平等性证明。你发布的链接实际上是从一个SO答案中提取的:。
Parameter eq_dec : forall {A:Type}, A -> A -> bool.
Axiom eq_dec_correct : forall (A:Type) (x y:A),
    eq_dec x y = true -> x = y.  (* don't care about equivalence here *)
Definition test {A:Type} (x y : A) : option (x = y) :=
    match eq_dec x y with
    | true     => Some (eq_dec_correct A x y _)
    | false    => None
    end.
Definition test (A:Type) (x y:A) : option (x = y) :=
    match eq_dec x y as b return eq_dec x y = b -> option (x = y) with
    | true  => fun p => Some (eq_dec_correct A x y p)
    | false => fun _ => None
    end (eq_refl (eq_dec x y)).