[英]What forms of goal in Coq are considered to be “true”?
当我证明一些定理时,我的目标会随着我运用越来越多的策略而发展。 一般来说,目标往往会分解为子目标,而子目标则更为简单。 在最后一点,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 (?) *)
还有什么可能是例子根本上是错误的?
换句话说,当我最终应用reflexivity
,Coq会说** Got it **
没有任何解释。 是否有任何方法可以获取有关其实际操作或为何确定该目标已得到证明的更多详细信息?
实际上,您面对的是一个不太通用的概念,因为Coq拥有一些用户友好的工具来进行特别的平等推理。
通常,Coq会在收到其类型为目标类型的术语后立即接受已解决的目标:已经确信该命题是正确的,因为它已经确信该命题描述的类型已经有人居住,并且确信了什么它是您帮助您建立证据的实际见证人。
对于归纳数据类型的特殊情况,您将能够证明命题P abc
的两种方法是:
通过使用归纳类型P
的构造函数构造类型P abc
的术语,并提供所有必要的参数。
或通过在类型可以与P abc
匹配的环境中重用现有证明或公理。
对于更特殊的等式证明(等式只是 Coq中的归纳数据类型),我上面列出的两种相同的方式退化为:
相等的唯一构造函数是eq_refl
,要应用它,您需要证明双方在判断上是相等的。 对于大多数目的,这对应于看起来像T abc = T abc
,但实际上它是一个稍宽泛的平等概念(请参见下文)。 对于这些,您所要做的就是应用eq_refl
构造函数。 简而言之,这就是reflexivity
!
第二种情况是证明平等成立,因为您在上下文中还有其他平等,这里没有什么特别的。
现在,您的问题的一部分是:Coq何时通过反射性接受平等的两个方面相等?
如果我没记错的话,答案是等式的两个边都是αβδιζ可转换的。 总的来说 ,这意味着可以通过重复应用以下方法使它们在句法上相等:
[如果适用更多规则或我弄错了,请有人纠正我]
例如,这些规则未捕获的一些内容是:
功能相同,以不同的方式或多或少地做相同的事情:
(fun x => 0 + x) = (fun x => x + 0) quicksort = mergesort
减少但相等的术语的相等性:
forall n, 0 + n = n + 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.