{-@ LIQUID "--no-termination" @-}
{-@ LIQUID "--short-names"    @-}

module Test0 () where

{-@ decr :: x:Int -> {v:Int | v < x} @-}
decr :: Int -> Int
decr xo = xo - 100

{-@ plus :: x:Int -> y:Int -> {v:Int | v = x + y} @-}
plus :: Int -> Int -> Int
plus x yo = x + yo

{-@ goo :: Int -> Nat @-}
goo :: Int -> Int
goo x = x +  1

{-@ incr :: x:Int -> {v:Int | v > x} @-}
incr :: Int -> Int
incr xoo = xoo  `plus` zaa
  where
     zaa = a00 - b00
     a00 = 300
     b00 = 2

{-@ jog :: x:Int -> {v:Int | v = x} @-}
jog  :: Int -> Int
jog x = x `plus` z
  where 
    z = a - b
    a = 2
    b = 2

{-@ ping, pong :: n:Int -> {v:Int | v > n} @-}
ping, pong :: Int -> Int
ping 0 = 1
ping n = 1 `plus` pong (n-1)

pong 0 = 1 
pong n = 1 `plus` ping (n-1)