4 | import Theory.General
9 | concat_assoc : (l, l', l'' : List a) -> l ++ (l' ++ l'') = (l ++ l') ++ l''
10 | concat_assoc Nil l' l'' = Refl
11 | concat_assoc (x :: xs) l' l'' = rewrite revEq $
concat_assoc {l = xs, l', l''} in Refl
16 | concat_nil : (l : List a) -> l ++ Nil = l
17 | concat_nil Nil = Refl
18 | concat_nil (x :: xs) = rewrite concat_nil xs in Refl
28 | -> map f (l ++ l') = map f l ++ map f l'
29 | map_concat {f} Nil l = Refl
30 | map_concat {f} (x :: xs) l = rewrite revEq $
map_concat {f} xs l in Refl
40 | -> map f (l ++ [x]) = map f l ++ [f x]
41 | map_append l x = map_concat l [x]
46 | nonempty_concat_left' : (xs, ys : List a) -> NonEmpty xs -> NonEmpty (xs ++ ys)
47 | nonempty_concat_left' Nil ys IsNonEmpty
impossible
48 | nonempty_concat_left' (x :: xs) Nil IsNonEmpty = IsNonEmpty
49 | nonempty_concat_left' (x :: xs) (y :: ys) IsNonEmpty = IsNonEmpty
54 | nonempty_concat_left : {xs, ys : List a} -> NonEmpty xs -> NonEmpty (xs ++ ys)
55 | nonempty_concat_left {xs, ys} = nonempty_concat_left' xs ys
60 | nonempty_concat_right' : (xs, ys : List a) -> NonEmpty ys -> NonEmpty (xs ++ ys)
61 | nonempty_concat_right' xs Nil IsNonEmpty
impossible
62 | nonempty_concat_right' Nil (y :: ys) IsNonEmpty = IsNonEmpty
63 | nonempty_concat_right' (x :: xs) (y :: ys) IsNonEmpty = IsNonEmpty
68 | nonempty_concat_right : {xs, ys : List a} -> NonEmpty ys -> NonEmpty (xs ++ ys)
69 | nonempty_concat_right {xs, ys} = nonempty_concat_right' xs ys
75 | nonempty_flip_concat' : (xs, ys : List a) -> NonEmpty (xs ++ ys) -> NonEmpty (ys ++ xs)
76 | nonempty_flip_concat' Nil Nil IsNonEmpty impossible
77 | nonempty_flip_concat' Nil (y :: ys) IsNonEmpty = IsNonEmpty
78 | nonempty_flip_concat' (x :: xs) Nil IsNonEmpty = IsNonEmpty
79 | nonempty_flip_concat' (x :: xs) (y :: ys) IsNonEmpty = IsNonEmpty
85 | nonempty_flip_concat : {xs, ys : List a} -> NonEmpty (xs ++ ys) -> NonEmpty (ys ++ xs)
86 | nonempty_flip_concat {xs, ys} = nonempty_flip_concat' xs ys
91 | nonempty_map' : (xs : List a) -> (f : a -> b) -> NonEmpty xs -> NonEmpty (map f xs)
92 | nonempty_map' Nil f IsNonEmpty
impossible
93 | nonempty_map' (x :: xs) f IsNonEmpty = IsNonEmpty
98 | nonempty_map : {xs : List a} -> {f : a -> b} -> NonEmpty xs -> NonEmpty (map f xs)
99 | nonempty_map {xs} {f} = nonempty_map' xs f
104 | nonempty_sublist' : (xs, ys : List a) -> NonEmpty (xs ++ ys) -> Either (NonEmpty xs) (NonEmpty ys)
105 | nonempty_sublist' Nil Nil IsNonEmpty impossible
106 | nonempty_sublist' Nil (y :: ys) IsNonEmpty = Right IsNonEmpty
107 | nonempty_sublist' (x :: xs) ys IsNonEmpty = Left IsNonEmpty
113 | nonempty_sublist : {xs, ys : List a} -> NonEmpty (xs ++ ys) -> Either (NonEmpty xs) (NonEmpty ys)
114 | nonempty_sublist {xs, ys} = nonempty_sublist' xs ys
120 | nonempty_concat_map'
121 | : (xs, ys : List a)
123 | -> NonEmpty (xs ++ ys)
124 | -> NonEmpty (map f xs ++ map g ys)
125 | nonempty_concat_map' Nil Nil f g IsNonEmpty impossible
126 | nonempty_concat_map' Nil (y :: ys) f g IsNonEmpty = IsNonEmpty
127 | nonempty_concat_map' (x :: xs) ys f g IsNonEmpty = IsNonEmpty
133 | nonempty_concat_map
134 | : {xs, ys : List a}
136 | -> NonEmpty (xs ++ ys)
137 | -> NonEmpty (map f xs ++ map g ys)
138 | nonempty_concat_map {xs, ys, f, g} = nonempty_concat_map' xs ys f g