Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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,当我证明某个定理时,我的目标随着我运用越来越多的战术而发展。一般来说,目标倾向于分成子目标,子目标更简单。在最后一点上,Coq决定目标已被证明。这个“经验证”的目标可能是什么样的?这些目标似乎很好: a = a. (* Any object is identical to itself (?) *) myFunc x y = myFunc x y. (* Result of the same function with the same par

当我证明某个定理时,我的目标随着我运用越来越多的战术而发展。一般来说,目标倾向于分成子目标,子目标更简单。在最后一点上,Coq决定目标已被证明。这个“经验证”的目标可能是什么样的?这些目标似乎很好:

a = a.                       (* Any object is identical to itself (?) *)
myFunc x y = myFunc x y.     (* Result of the same function with the same params
                                is always the same (?) *)
这里还可能有什么,或者这些例子根本上是错误的


换句话说,当我最终应用
自反性时,Coq只是说
**明白了**
,没有任何解释。有没有办法获得更多关于它实际做了什么或者为什么它决定目标被证明的细节?

你实际上面临着一个非常普遍的概念,这个概念似乎并不那么普遍,因为Coq有一些用户友好的工具,特别是在平等的情况下进行推理

一般来说,Coq在收到一个类型为目标类型的术语后,会接受一个已解决的目标:它确信该命题是正确的,因为它确信该命题所描述的类型是有人居住的,而确信它的是你在证明过程中帮助构建的实际证人


对于归纳数据类型的特殊情况,证明命题的两种方法是:

  • 通过构造类型为
    pabc
    的术语,使用归纳类型的构造函数
    p
    ,并提供所有必要的参数

  • 或者在环境中重复使用现有的证明或公理,其类型可以与
    pabc
    匹配


对于等式证明的更为特殊的情况(等式只是Coq中的归纳数据类型),我上面列出的两种方法退化为:

  • 等式的唯一构造器是
    eq\u refl
    ,要应用它,你需要证明双方在判断上是相等的。在大多数情况下,这与看起来像
    tabc=tabc
    的目标相对应,但实际上这是一个稍微宽泛的平等概念(见下文)。对于这些,您所要做的就是应用
    eq\u refl
    构造函数。简而言之,
    自反性就是这样做的

  • 第二种情况是证明等式成立,因为在你的上下文中有其他等式,这里没有什么特别的


现在你的问题的一部分是:Coq什么时候接受平等的双方在反身性上是平等的

如果我没有弄错的话,答案是当等式的两边是αβΔιζ-可转换的。 这意味着有一种方法可以通过反复应用以下内容使它们在语法上相等:

  • α:非自由变量的合理重命名
  • β:计算可约表达式
  • δ:展开定义
  • ι:简化匹配
  • ζ:扩展let界表达式
[如果有更多规则适用或我有一条错误,请有人纠正我]

例如,这些规则未捕获的某些内容包括:

  • 以不同的方式做相同事情的函数相等:

    (fun x => 0 + x) = (fun x => x + 0)
    quicksort = mergesort
    
  • 被卡住但将相等的条款相等:

    forall n, 0 + n = n + 0
    

实际上,您面临的是一个非常普遍的概念,它似乎并不那么普遍,因为Coq有一些用户友好的工具,特别是用于平等推理

一般来说,Coq在收到一个类型为目标类型的术语后,会接受一个已解决的目标:它确信该命题是正确的,因为它确信该命题所描述的类型是有人居住的,而确信它的是你在证明过程中帮助构建的实际证人


对于归纳数据类型的特殊情况,证明命题的两种方法是:

  • 通过构造类型为
    pabc
    的术语,使用归纳类型的构造函数
    p
    ,并提供所有必要的参数

  • 或者在环境中重复使用现有的证明或公理,其类型可以与
    pabc
    匹配


对于等式证明的更为特殊的情况(等式只是Coq中的归纳数据类型),我上面列出的两种方法退化为:

  • 等式的唯一构造器是
    eq\u refl
    ,要应用它,你需要证明双方在判断上是相等的。在大多数情况下,这与看起来像
    tabc=tabc
    的目标相对应,但实际上这是一个稍微宽泛的平等概念(见下文)。对于这些,您所要做的就是应用
    eq\u refl
    构造函数。简而言之,
    自反性就是这样做的

  • 第二种情况是证明等式成立,因为在你的上下文中有其他等式,这里没有什么特别的


现在你的问题的一部分是:Coq什么时候接受平等的双方在反身性上是平等的

如果我没有弄错的话,答案是当等式的两边是αβΔιζ-可转换的。 这意味着有一种方法可以通过反复应用以下内容使它们在语法上相等:

  • α:非自由变量的合理重命名
  • β:计算可约表达式
  • δ:展开定义
  • ι:简化匹配
  • ζ:扩展let界表达式
[如果有更多规则适用或我有一条错误,请有人纠正我]

例如,这些规则未捕获的某些内容包括:

  • 以不同的方式做相同事情的函数相等:

    (fun x => 0 + x) = (fun x => x + 0)
    quicksort = mergesort
    
  • 被卡住的相等项,但是