2 | module Pipeline.Equality
4 | import public Data.Vect
5 | import Control.Category
6 | import public Data.Vect.Quantifiers
7 | import public Data.Vect.Utils
10 | ProofSpec : Nat -> Type -> Type
11 | ProofSpec n = Vect (2 + n)
14 | ProofSteps : ProofSpec n a -> Type
15 | ProofSteps = All (uncurry (Equal {a, b = a})) . pairUp
18 | Prove : (spec : ProofSpec n a) -> ProofSteps spec -> Vect.head spec === Vect.last spec
19 | Prove [x, y] [p] = p
20 | Prove (y :: (z :: (v :: xs))) (x :: (w :: s)) =
21 | trans x (Prove (z :: v :: xs) (w :: s))
25 | Category Equal where
27 | (.) Refl Refl = Refl