@@ -22,21 +22,21 @@ import Syntax.WithProof
22
22
import Data.List
23
23
import Data.List1
24
24
25
- total
25
+ %default total
26
+
26
27
lengthAcc : List a -> Nat -> Nat
27
28
lengthAcc [] acc = acc
28
29
lengthAcc (_ :: xs) acc = lengthAcc xs $ S acc
29
30
30
- export total
31
+ export
31
32
length : List a -> Nat
32
33
length xs = lengthAcc xs Z
33
34
34
- total
35
35
lengthAccSucc : (xs : List a) -> (n : Nat ) -> lengthAcc xs (S n) = S (lengthAcc xs n)
36
36
lengthAccSucc [] _ = Refl
37
37
lengthAccSucc (_ :: xs) n = rewrite lengthAccSucc xs (S n) in cong S Refl
38
38
39
- export total
39
+ export
40
40
length_ext : (xs : List a) -> List .length xs = Data.List .TailRec.length xs
41
41
length_ext [] = Refl
42
42
length_ext (_ :: xs) = rewrite length_ext xs in sym $ lengthAccSucc xs Z
@@ -121,7 +121,7 @@ splitOnto : List (List a) -> (a -> Bool) -> List a -> List1 (List a)
121
121
splitOnto acc p xs =
122
122
case Data . List . break p xs of
123
123
(chunk, [] ) => reverseOnto (chunk ::: []) acc
124
- (chunk, (c:: rest)) => splitOnto (chunk:: acc) p rest
124
+ (chunk, (c:: rest)) => splitOnto (chunk:: acc) p $ assert_smaller xs rest
125
125
126
126
export
127
127
split : (a -> Bool ) -> List a -> List1 (List a)
@@ -136,7 +136,7 @@ splitOnto_ext acc p xs with (@@(Data.List.break p xs))
136
136
Refl
137
137
splitOnto_ext acc p xs | ((chunk, c:: rest)** pf) =
138
138
rewrite pf in
139
- rewrite splitOnto_ext (chunk:: acc) p rest in
139
+ rewrite splitOnto_ext (chunk:: acc) p $ assert_smaller xs rest in
140
140
Refl
141
141
142
142
export
@@ -272,6 +272,7 @@ sorted (x :: xs@(y :: ys)) = case (x <= y) of
272
272
True => Data . List . TailRec . sorted xs
273
273
274
274
export
275
+ covering
275
276
sorted_ext : Ord a => (xs : List a) ->
276
277
Data.List .sorted xs = Data.List .TailRec.sorted xs
277
278
sorted_ext [] = Refl
@@ -289,6 +290,7 @@ mergeByOnto acc order left@(x::xs) right@(y::ys) =
289
290
LT => mergeByOnto (x :: acc) order (assert_smaller left xs) right
290
291
_ => mergeByOnto (y :: acc) order left (assert_smaller right ys)
291
292
293
+ covering
292
294
mergeByOnto_ext : (acc : List a)
293
295
-> (order : a -> a -> Ordering )
294
296
-> (left, right : List a)
@@ -313,6 +315,7 @@ mergeBy : (a -> a -> Ordering) -> List a -> List a -> List a
313
315
mergeBy order left right = mergeByOnto [] order left right
314
316
315
317
export
318
+ covering
316
319
mergeBy_ext : (order : a -> a -> Ordering ) -> (left, right : List a) ->
317
320
Data.List .mergeBy order left right =
318
321
Data . List . TailRec . mergeBy order left right
@@ -323,6 +326,7 @@ merge : Ord a => List a -> List a -> List a
323
326
merge = Data . List . TailRec . mergeBy compare
324
327
325
328
export
329
+ covering
326
330
merge_ext : Ord a => (left, right : List a) ->
327
331
Data.List .merge left right = Data.List .TailRec.merge left right
328
332
merge_ext left right = mergeBy_ext compare left right
0 commit comments