-- To detect the non-failure of the following operation,
-- reasoning over integers is required:
sig :: Int -> Int
sig x | x>0 = 1
| x==0 = 0
| x<0 = -1
-- It must be proved that the guards are complete since the definition
-- above is translated into the following definition:
sigif :: Int -> Int
sigif x = if x>0
then 1
else if x==0 then 0
else if x<0 then -1
else failed