module Invariant where

data F a = F {fx :: a, fy :: a, fzz :: a} | G {fx :: a}

{-@ data F a = F {fxx :: a, fy :: a, fz :: a}
             | G {fxx :: a} 
  @-}

{-@ fooG :: x:a -> {v : F a | (fxx v) > x} @-}
fooG :: a -> F a
fooG x = G x 

{-@ foo :: x:a -> {v : F a | (fxx v) > x} @-}
foo :: a -> F a
foo x = F x x x
