175.89/153.02 MAYBE 178.22/153.66 proof of /export/starexec/sandbox/benchmark/theBenchmark.hs 178.22/153.66 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 178.22/153.66 178.22/153.66 178.22/153.66 H-Termination with start terms of the given HASKELL could not be shown: 178.22/153.66 178.22/153.66 (0) HASKELL 178.22/153.66 (1) IFR [EQUIVALENT, 0 ms] 178.22/153.66 (2) HASKELL 178.22/153.66 (3) BR [EQUIVALENT, 0 ms] 178.22/153.66 (4) HASKELL 178.22/153.66 (5) COR [EQUIVALENT, 30 ms] 178.22/153.66 (6) HASKELL 178.22/153.66 (7) LetRed [EQUIVALENT, 0 ms] 178.22/153.66 (8) HASKELL 178.22/153.66 (9) NumRed [SOUND, 0 ms] 178.22/153.66 (10) HASKELL 178.22/153.66 178.22/153.66 178.22/153.66 ---------------------------------------- 178.22/153.66 178.22/153.66 (0) 178.22/153.66 Obligation: 178.22/153.66 mainModule Main 178.22/153.66 module Main where { 178.22/153.66 import qualified Prelude; 178.22/153.66 } 178.22/153.66 178.22/153.66 ---------------------------------------- 178.22/153.66 178.22/153.66 (1) IFR (EQUIVALENT) 178.22/153.66 If Reductions: 178.22/153.66 The following If expression 178.22/153.66 "if primGEqNatS x y then Succ (primDivNatS (primMinusNatS x y) (Succ y)) else Zero" 178.22/153.66 is transformed to 178.22/153.66 "primDivNatS0 x y True = Succ (primDivNatS (primMinusNatS x y) (Succ y)); 178.22/153.66 primDivNatS0 x y False = Zero; 178.22/153.66 " 178.22/153.66 The following If expression 178.22/153.66 "if primGEqNatS x y then primModNatS (primMinusNatS x y) (Succ y) else Succ x" 178.22/153.66 is transformed to 178.22/153.66 "primModNatS0 x y True = primModNatS (primMinusNatS x y) (Succ y); 178.22/153.66 primModNatS0 x y False = Succ x; 178.22/153.66 " 178.22/153.66 178.22/153.66 ---------------------------------------- 178.22/153.66 178.22/153.66 (2) 178.22/153.66 Obligation: 178.22/153.66 mainModule Main 178.22/153.66 module Main where { 178.22/153.66 import qualified Prelude; 178.22/153.66 } 178.22/153.66 178.22/153.66 ---------------------------------------- 178.22/153.66 178.22/153.66 (3) BR (EQUIVALENT) 178.22/153.66 Replaced joker patterns by fresh variables and removed binding patterns. 178.22/153.66 ---------------------------------------- 178.22/153.66 178.22/153.66 (4) 178.22/153.66 Obligation: 178.22/153.66 mainModule Main 178.22/153.66 module Main where { 178.22/153.66 import qualified Prelude; 178.22/153.66 } 178.22/153.66 178.22/153.66 ---------------------------------------- 178.22/153.66 178.22/153.66 (5) COR (EQUIVALENT) 178.22/153.66 Cond Reductions: 178.22/153.66 The following Function with conditions 178.22/153.66 "absReal x|x >= 0x|otherwise`negate` x; 178.22/153.66 " 178.22/153.66 is transformed to 178.22/153.66 "absReal x = absReal2 x; 178.22/153.66 " 178.22/153.66 "absReal0 x True = `negate` x; 178.22/153.66 " 178.22/153.66 "absReal1 x True = x; 178.22/153.66 absReal1 x False = absReal0 x otherwise; 178.22/153.66 " 178.22/153.66 "absReal2 x = absReal1 x (x >= 0); 178.22/153.66 " 178.22/153.66 The following Function with conditions 178.22/153.66 "gcd' x 0 = x; 178.22/153.66 gcd' x y = gcd' y (x `rem` y); 178.22/153.66 " 178.22/153.66 is transformed to 178.22/153.66 "gcd' x xz = gcd'2 x xz; 178.22/153.66 gcd' x y = gcd'0 x y; 178.22/153.66 " 178.22/153.66 "gcd'0 x y = gcd' y (x `rem` y); 178.22/153.66 " 178.22/153.66 "gcd'1 True x xz = x; 178.22/153.66 gcd'1 yu yv yw = gcd'0 yv yw; 178.22/153.66 " 178.22/153.66 "gcd'2 x xz = gcd'1 (xz == 0) x xz; 178.22/153.66 gcd'2 yx yy = gcd'0 yx yy; 178.22/153.66 " 178.22/153.66 The following Function with conditions 178.22/153.66 "gcd 0 0 = error []; 178.22/153.66 gcd x y = gcd' (abs x) (abs y) where { 178.22/153.66 gcd' x 0 = x; 178.22/153.66 gcd' x y = gcd' y (x `rem` y); 178.22/153.66 } 178.22/153.66 ; 178.22/153.66 " 178.22/153.66 is transformed to 178.22/153.66 "gcd yz zu = gcd3 yz zu; 178.22/153.66 gcd x y = gcd0 x y; 178.22/153.66 " 178.22/153.66 "gcd0 x y = gcd' (abs x) (abs y) where { 178.22/153.66 gcd' x xz = gcd'2 x xz; 178.22/153.66 gcd' x y = gcd'0 x y; 178.22/153.66 ; 178.22/153.66 gcd'0 x y = gcd' y (x `rem` y); 178.22/153.66 ; 178.22/153.66 gcd'1 True x xz = x; 178.22/153.66 gcd'1 yu yv yw = gcd'0 yv yw; 178.22/153.66 ; 178.22/153.66 gcd'2 x xz = gcd'1 (xz == 0) x xz; 178.22/153.66 gcd'2 yx yy = gcd'0 yx yy; 178.22/153.66 } 178.22/153.66 ; 178.22/153.66 " 178.22/153.66 "gcd1 True yz zu = error []; 178.22/153.66 gcd1 zv zw zx = gcd0 zw zx; 178.22/153.66 " 178.22/153.66 "gcd2 True yz zu = gcd1 (zu == 0) yz zu; 178.22/153.66 gcd2 zy zz vuu = gcd0 zz vuu; 178.22/153.66 " 178.22/153.66 "gcd3 yz zu = gcd2 (yz == 0) yz zu; 178.22/153.66 gcd3 vuv vuw = gcd0 vuv vuw; 178.22/153.66 " 178.22/153.66 The following Function with conditions 178.22/153.66 "undefined |Falseundefined; 178.22/153.66 " 178.22/153.66 is transformed to 178.22/153.66 "undefined = undefined1; 178.22/153.66 " 178.22/153.66 "undefined0 True = undefined; 178.22/153.66 " 178.22/153.66 "undefined1 = undefined0 False; 178.22/153.66 " 178.22/153.66 The following Function with conditions 178.22/153.66 "reduce x y|y == 0error []|otherwisex `quot` d :% (y `quot` d) where { 178.22/153.66 d = gcd x y; 178.22/153.66 } 178.22/153.66 ; 178.22/153.66 " 178.22/153.66 is transformed to 178.22/153.66 "reduce x y = reduce2 x y; 178.22/153.66 " 178.22/153.66 "reduce2 x y = reduce1 x y (y == 0) where { 178.22/153.66 d = gcd x y; 178.22/153.66 ; 178.22/153.66 reduce0 x y True = x `quot` d :% (y `quot` d); 178.22/153.66 ; 178.22/153.66 reduce1 x y True = error []; 178.22/153.66 reduce1 x y False = reduce0 x y otherwise; 178.22/153.66 } 178.22/153.66 ; 178.22/153.66 " 178.22/153.66 178.22/153.66 ---------------------------------------- 178.22/153.66 178.22/153.66 (6) 178.22/153.66 Obligation: 178.22/153.66 mainModule Main 178.22/153.66 module Main where { 178.22/153.66 import qualified Prelude; 178.22/153.66 } 178.22/153.66 178.22/153.66 ---------------------------------------- 178.22/153.66 178.22/153.66 (7) LetRed (EQUIVALENT) 178.22/153.66 Let/Where Reductions: 178.22/153.66 The bindings of the following Let/Where expression 178.22/153.66 "gcd' (abs x) (abs y) where { 178.22/153.66 gcd' x xz = gcd'2 x xz; 178.22/153.66 gcd' x y = gcd'0 x y; 178.22/153.66 ; 178.22/153.66 gcd'0 x y = gcd' y (x `rem` y); 178.22/153.66 ; 178.22/153.66 gcd'1 True x xz = x; 178.22/153.66 gcd'1 yu yv yw = gcd'0 yv yw; 178.22/153.66 ; 178.22/153.66 gcd'2 x xz = gcd'1 (xz == 0) x xz; 178.22/153.66 gcd'2 yx yy = gcd'0 yx yy; 178.22/153.66 } 178.22/153.66 " 178.22/153.66 are unpacked to the following functions on top level 178.22/153.66 "gcd0Gcd'2 x xz = gcd0Gcd'1 (xz == 0) x xz; 178.22/153.66 gcd0Gcd'2 yx yy = gcd0Gcd'0 yx yy; 178.22/153.66 " 178.22/153.66 "gcd0Gcd'0 x y = gcd0Gcd' y (x `rem` y); 178.22/153.66 " 178.22/153.66 "gcd0Gcd'1 True x xz = x; 178.22/153.66 gcd0Gcd'1 yu yv yw = gcd0Gcd'0 yv yw; 178.22/153.66 " 178.22/153.66 "gcd0Gcd' x xz = gcd0Gcd'2 x xz; 178.22/153.66 gcd0Gcd' x y = gcd0Gcd'0 x y; 178.22/153.66 " 178.22/153.66 The bindings of the following Let/Where expression 178.22/153.66 "reduce1 x y (y == 0) where { 178.22/153.66 d = gcd x y; 178.22/153.66 ; 178.22/153.66 reduce0 x y True = x `quot` d :% (y `quot` d); 178.22/153.66 ; 178.22/153.66 reduce1 x y True = error []; 178.22/153.66 reduce1 x y False = reduce0 x y otherwise; 178.22/153.66 } 178.22/153.66 " 178.22/153.66 are unpacked to the following functions on top level 178.22/153.66 "reduce2D vux vuy = gcd vux vuy; 178.22/153.66 " 178.22/153.66 "reduce2Reduce1 vux vuy x y True = error []; 178.22/153.66 reduce2Reduce1 vux vuy x y False = reduce2Reduce0 vux vuy x y otherwise; 178.22/153.66 " 178.22/153.66 "reduce2Reduce0 vux vuy x y True = x `quot` reduce2D vux vuy :% (y `quot` reduce2D vux vuy); 178.22/153.66 " 178.22/153.66 178.22/153.66 ---------------------------------------- 178.22/153.66 178.22/153.66 (8) 178.22/153.66 Obligation: 178.22/153.66 mainModule Main 178.22/153.66 module Main where { 178.22/153.66 import qualified Prelude; 178.22/153.66 } 178.22/153.66 178.22/153.66 ---------------------------------------- 178.22/153.66 178.22/153.66 (9) NumRed (SOUND) 178.22/153.66 Num Reduction:All numbers are transformed to their corresponding representation with Succ, Pred and Zero. 178.22/153.66 ---------------------------------------- 178.22/153.66 178.22/153.66 (10) 178.22/153.66 Obligation: 178.22/153.66 mainModule Main 178.22/153.66 module Main where { 178.22/153.66 import qualified Prelude; 178.22/153.66 } 178.26/153.70 EOF