【问题标题】:Prove map id = id in idris?在 idris 中证明 map id = id?
【发布时间】:2015-09-27 12:50:17
【问题描述】:

我刚开始玩 idris 和一般的定理证明。我可以遵循互联网上大多数基本事实证明的示例,所以我想自己尝试一些任意的东西。所以,我想为map的以下基本属性写一个证明项:

map : (a -> b) -> List a -> List b
prf : map id = id

直观地说,我可以想象证明应该如何工作:获取任意列表 l 并分析映射 id l 的可能性。当 l 为空时,很明显;什么时候 l 是非空的,它基于函数应用保持相等的概念。 所以,我可以这样做:

prf' : (l : List a) -> map id l = id l

这就像一个 for all 声明。我怎样才能把它变成所涉及的函数相等的证明?

【问题讨论】:

  • Cubical Agda 可以做到。

标签: proof idris


【解决方案1】:

你不能。 Idris 的类型理论(如 Coq 和 Agda 的)不支持一般外延性。给定两个“行为相同”的函数 fg,您将永远无法证明 Not (f = g),但如果定义了 fg,您将只能证明 f = g相同,直到 alpha 和 eta 等价。不幸的是,当您考虑高阶函数时,情况只会变得更糟。 Coq 标准库中有一个关于此类的定理,但我现在似乎无法找到或记住它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多