@@ -27,7 +27,8 @@ public export
27data Split : List a -> Type where
27data Split : List a -> Type where
28 SplitNil : Split []
28 SplitNil : Split []
29 SplitOne : Split [x]
29 SplitOne : Split [x]
30+ SplitPair : {x, y : a} -> {xs, ys : List a} -> -- Explicit, don't erae
30− SplitPair : Split (x :: xs ++ y :: ys)
31+ Split (x :: xs ++ y :: ys)
32splitHelp : (head : a) ->
33splitHelp : (head : a) ->
33 (xs : List a) ->
34 (xs : List a) ->
@@ -53,8 +54,9 @@ split (x :: xs) = splitHelp x xs xs
53public export
54public export
54data SplitRec : List a -> Type where
55data SplitRec : List a -> Type where
55 SplitRecNil : SplitRec []
56 SplitRecNil : SplitRec []
56− SplitRecOne : SplitRec [x]
57+ SplitRecOne : {x : a} -> SplitRec [x]
58+ SplitRecPair : {xs, ys : List a} -> -- Explicit, don't erase
57− SplitRecPair : Lazy (SplitRec xs) -> Lazy (SplitRec ys) -> SplitRec (xs ++ ys)
59+ Lazy (SplitRec xs) -> Lazy (SplitRec ys) -> SplitRec (xs ++ ys)
60splitRecFix : (xs : List a) -> ((ys : List a) -> smaller ys xs -> SplitRec ys) ->
62splitRecFix : (xs : List a) -> ((ys : List a) -> smaller ys xs -> SplitRec ys) ->
@@ -76,7 +78,8 @@ splitRec xs = accInd splitRecFix xs (smallerAcc xs)
76public export
78public export
77data SnocList : List a -> Type where
79data SnocList : List a -> Type where
78 Empty : SnocList []
80 Empty : SnocList []
81+ Snoc : {x : a} -> {xs : List a} -> -- Explicit, so don't erase
79− Snoc : SnocList xs -> SnocList (xs ++ [x])
82+ SnocList xs -> SnocList (xs ++ [x])
81snocListHelp : SnocList xs -> (ys : List a) -> SnocList (xs ++ ys)
84snocListHelp : SnocList xs -> (ys : List a) -> SnocList (xs ++ ys)
82snocListHelp {xs} x [] = rewrite appendNilRightNeutral xs in x
85snocListHelp {xs} x [] = rewrite appendNilRightNeutral xs in x