Search code examples
idrisdependent-type

Idris: reconstruct equality after pattern-matching


I'm deconstructing a list into head and tail but later I need a proof that they give me the original list back when combined:

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 ""

I'm using Idris 1.3.1.


Solution

  • You can do it with dependent pattern matching:

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

    Here prf will hold your equality.

    However, I think it's better to simply match on lst in the LHS, then your proofs will auto-simplify where needed.