伊德里斯:模式匹配后重建平等

时间:2018-12-24 09:13:52

标签: idris dependent-type

我正在将列表分解为头部和尾部,但后来我需要证明它们结合在一起后会给我原始列表:

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。

1 个答案:

答案 0 :(得分:2)

您可以通过相关的模式匹配来做到这一点:

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

prf将保持您的平等。

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