module ListProp where
import List
assert ElemProp = {-#cert:Alfa_ElemProp#-}
All y . All xs . All ys . True {y `elem` ys} ==> True {y `elem` (xs++ys)}
property Reflexive = {| op | All x . True {op x x} |}
assert NubByProp = {-#cert:Alfa_NubByProp#-}
All eq . Reflexive {eq} ==> All x . {nubBy eq [x,x]} === {[x]}
sameEq x y = (==) (y `asTypeOf` x)
assert NubProp = {-#cert:Alfa_NubProp#-}
All x . Reflexive {sameEq x} ==> {nub [x,x]} === {[x]}
assert NubPropDoesn'tWork =
All x . Reflexive {(==)} ==> {nub [x,x]} === {[x]}