【问题标题】:Idris: reconstruct equality after pattern-matchingIdris:模式匹配后重建相等性
【发布时间】:2019-05-23 11:55:12
【问题描述】:

我正在将一个列表解构为头部和尾部,但后来我需要证明他们在合并后将原始列表返回给我:

test: Bool -> String
test b = let lst = the (List Nat) ?getListFromOtherFunction in
        case lst of
          Nil => ""
          x :: xs =>
            let eq = the ((x::xs) = lst) ?howToDoIt in ""

我使用的是 Idris 1.3.1。

【问题讨论】:

    标签: idris dependent-type


    【解决方案1】:

    你可以通过依赖模式匹配来做到这一点:

    test: List Nat -> String
    test lst with (lst) proof prf
      | Nil = ""
      | (x :: xs) = ?something
    

    这里prf 将保持你的平等。

    但是,我认为最好在 LHS 中简单地匹配 lst,然后您的证明将在需要时自动简化。

    【讨论】:

    • 谢谢!我必须学习依赖下午。但似乎with 只能用于顶级函数参数。我稍微修改了我的问题。现在可以吗?
    • 是的,这是一个有点不幸的限制。可以通过为证明的其余部分创建一个辅助函数并在其中的顶层使用 with 来绕过它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 2015-03-21
    相关资源
    最近更新 更多