packages feed

liquidhaskell-0.8.10.1: tests/pos/ReWrite9.hs

module ReWrite9 where

{-@ LIQUID "--reflection" @-}
{-@ LIQUID "--ple" @-}
{-@ infix ++ @-}

import Prelude hiding (length, (++))

{-@ reflect ++ @-}
(++)::[a] -> [a] -> [a]
[]     ++ ys = ys 
(x:xs) ++ ys = x:(xs ++ys)

{-@ reflect length @-}
length :: [a] -> Int
length []     = 0
length (_:xs) = 1 + length xs


{-@ rewrite lengthSym @-}
{-@ assume lengthSym :: xs : [a] -> ys : [a] -> { length (xs ++ ys) == length (ys ++ xs) }@-}
lengthSym :: [a] -> [a] -> ()
lengthSym _ _ = ()