Properties of the reverse function.
- data Palindrome : (xs : List a) ->
Type
- Do geese see God? - Empty : Palindrome []
- Single : Palindrome [x]
- Multi : Palindrome xs ->
Palindrome ([x] ++
xs ++
[x])
 
- palindromeReverse : (xs : List a) ->
Palindrome xs ->
reverse xs =
xs
- A Palindrome reversed is itself. 
- reverseAppend : (xs : List a) ->
(ys : List a) ->
reverse (xs ++
ys) =
reverse ys ++
reverse xs
- Reversing an append is appending reversals backwards. 
- reverseCons : (x : a) ->
(xs : List a) ->
reverse (x ::
xs) =
reverse xs ++
[x]
- The reverse of a cons is the reverse of the tail followed by the head.
 Together with reverseNil serves as a specification for reverse.
 
- reverseEqual : (xs : List a) ->
(ys : List a) ->
(reverse xs =
reverse ys) ->
xs =
ys
- Equal reversed lists are equal. 
- reverseEquiv : (xs : List a) ->
reverseRec xs =
reverse xs
- The iterative and recursive defintions of reverse are the same. 
- reverseLength : (xs : List a) ->
length (reverse xs) =
length xs
- Reversing preserves list length. 
- reverseNil : reverse [] =
[]
- The reverse of an empty list is an empty list. Together with reverseCons,
 serves as a specification for reverse.
 
- reverseOntoAcc : (xs : List a) ->
(ys : List a) ->
(zs : List a) ->
reverseOnto (ys ++
zs)
xs =
reverseOnto ys
xs ++
zs
- The final segment of the accumulator is the final segment of the result. 
- reverseOntoLength : (xs : List a) ->
(acc : List a) ->
length (reverseOnto acc
xs) =
length acc +
length xs
- Reversing onto preserves list length. 
- reverseOntoSpec : (xs : List a) ->
(ys : List a) ->
reverseOnto xs
ys =
reverse ys ++
xs
- Serves as a specification for reverseOnto. 
- reversePalindrome : (xs : List a) ->
(reverse xs =
xs) ->
Palindrome xs
- Only Palindromes are equal to their own reverse. 
- reverseRec : List a ->
List a
- A recursive definition of reverse. 
- reverseReverseId : (xs : List a) ->
reverse (reverse xs) =
xs
- Reversing a reverse gives the original. 
- reverseSingletonId : (x : a) ->
reverse [x] =
[x]
- Reversing a singleton list is a no-op.