命题方程的可判定性

时间:2015-12-15 21:34:46

标签: equality agda dependent-type

当agda中的两个术语具有相同的正常形式时,我认为这两个术语在定义上是相等的 - 我认为---,命题相等只是定义相等的数据类型表示 - 再次,我猜测 - -;那么,命题上的平等不应该是可判定的吗?也就是说,我们可以编写一个函数类型

似乎是合理的

∀{A : Set} → (x y : A) → Dec(x ≡ y)

我觉得我们不能写这样的函数,因为我们不能在参数上进行模式匹配,但我感觉'它应该是可能的:再次,只需缩小到正常形式并检查语法身份。

任何见解都会有所帮助!

1 个答案:

答案 0 :(得分:3)

  

据说,agda中的两个术语在定义上是相同的   它们都具有相同的正常形式

高达αη-转换。

  

和命题相等只是定义相等的数据类型表示

命题相等说“在实例化一些自由变量后,这两个术语将在定义上相等”(“some”可以是0或全部)(“instantiate”也可以变化)。

E.g。

double-double : (n : ℕ) -> n + n ≡ 2 * n

显然,n + n在语法上与2 * n不等,但对于任何规范n0, 1, 2...),n + n的结果在语法上等于2 * n的结果 - 这就是double-double所说的内容。并且“对于任何规范n”部分强迫我们通过归纳来证明double-double(但是,在更复杂的系统中,定义相等性基于超级编译或者有内置证明器,{ {1}}在定义上等于n + n)。

但有时,诱导假设应如何表现并不明显,例如:当你需要推广一个方程时。正如您所料,“这个任意事物是否可以证明?”没有决策程序。因此命题平等是不可判定的。而且,你既不能证明也不能反驳像

这样的陈述
2 * n

没有额外的假设。

但是你真的可以检查语法上的平等:

(λ n -> 1 + n) ≡ (λ n -> n + 1)

它说“如果两个术语在语法上相等,则它们在命题上是相等的,否则我们不知道它们是否在命题上相等”。但是Agda没有这种内置功能。<​​/ p>