296.11/259.65 MAYBE 298.42/260.31 proof of /export/starexec/sandbox/benchmark/theBenchmark.hs 298.42/260.31 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 298.42/260.31 298.42/260.31 298.42/260.31 H-Termination with start terms of the given HASKELL could not be shown: 298.42/260.31 298.42/260.31 (0) HASKELL 298.42/260.31 (1) LR [EQUIVALENT, 0 ms] 298.42/260.31 (2) HASKELL 298.42/260.31 (3) IFR [EQUIVALENT, 0 ms] 298.42/260.31 (4) HASKELL 298.42/260.31 (5) BR [EQUIVALENT, 0 ms] 298.42/260.31 (6) HASKELL 298.42/260.31 (7) COR [EQUIVALENT, 5 ms] 298.42/260.31 (8) HASKELL 298.42/260.31 (9) LetRed [EQUIVALENT, 0 ms] 298.42/260.31 (10) HASKELL 298.42/260.31 (11) NumRed [SOUND, 6 ms] 298.42/260.31 (12) HASKELL 298.42/260.31 298.42/260.31 298.42/260.31 ---------------------------------------- 298.42/260.31 298.42/260.31 (0) 298.42/260.31 Obligation: 298.42/260.31 mainModule Main 298.42/260.31 module Main where { 298.42/260.31 import qualified Prelude; 298.42/260.31 } 298.42/260.31 298.42/260.31 ---------------------------------------- 298.42/260.31 298.42/260.31 (1) LR (EQUIVALENT) 298.42/260.31 Lambda Reductions: 298.42/260.31 The following Lambda expression 298.42/260.31 "\(m,_)->m" 298.42/260.31 is transformed to 298.42/260.31 "m0 (m,_) = m; 298.42/260.31 " 298.42/260.31 The following Lambda expression 298.42/260.31 "\(q,_)->q" 298.42/260.31 is transformed to 298.42/260.31 "q1 (q,_) = q; 298.42/260.31 " 298.42/260.31 The following Lambda expression 298.42/260.31 "\(_,r)->r" 298.42/260.31 is transformed to 298.42/260.31 "r0 (_,r) = r; 298.42/260.31 " 298.42/260.31 298.42/260.31 ---------------------------------------- 298.42/260.31 298.42/260.31 (2) 298.42/260.31 Obligation: 298.42/260.31 mainModule Main 298.42/260.31 module Main where { 298.42/260.31 import qualified Prelude; 298.42/260.32 } 298.42/260.32 298.42/260.32 ---------------------------------------- 298.42/260.32 298.42/260.32 (3) IFR (EQUIVALENT) 298.42/260.32 If Reductions: 298.42/260.32 The following If expression 298.42/260.32 "if primGEqNatS x y then Succ (primDivNatS (primMinusNatS x y) (Succ y)) else Zero" 298.42/260.32 is transformed to 298.42/260.32 "primDivNatS0 x y True = Succ (primDivNatS (primMinusNatS x y) (Succ y)); 298.42/260.32 primDivNatS0 x y False = Zero; 298.42/260.32 " 298.42/260.32 The following If expression 298.42/260.32 "if primGEqNatS x y then primModNatS (primMinusNatS x y) (Succ y) else Succ x" 298.42/260.32 is transformed to 298.42/260.32 "primModNatS0 x y True = primModNatS (primMinusNatS x y) (Succ y); 298.42/260.32 primModNatS0 x y False = Succ x; 298.42/260.32 " 298.42/260.32 298.42/260.32 ---------------------------------------- 298.42/260.32 298.42/260.32 (4) 298.42/260.32 Obligation: 298.42/260.32 mainModule Main 298.42/260.32 module Main where { 298.42/260.32 import qualified Prelude; 298.42/260.32 } 298.42/260.32 298.42/260.32 ---------------------------------------- 298.42/260.32 298.42/260.32 (5) BR (EQUIVALENT) 298.42/260.32 Replaced joker patterns by fresh variables and removed binding patterns. 298.42/260.32 298.42/260.32 Binding Reductions: 298.42/260.32 The bind variable of the following binding Pattern 298.42/260.32 "frac@(Float wz xu)" 298.42/260.32 is replaced by the following term 298.42/260.32 "Float wz xu" 298.42/260.32 The bind variable of the following binding Pattern 298.42/260.32 "frac@(Double xw xx)" 298.42/260.32 is replaced by the following term 298.42/260.32 "Double xw xx" 298.42/260.32 298.42/260.32 ---------------------------------------- 298.42/260.32 298.42/260.32 (6) 298.42/260.32 Obligation: 298.42/260.32 mainModule Main 298.42/260.32 module Main where { 298.42/260.32 import qualified Prelude; 298.42/260.32 } 298.42/260.32 298.42/260.32 ---------------------------------------- 298.42/260.32 298.42/260.32 (7) COR (EQUIVALENT) 298.42/260.32 Cond Reductions: 298.42/260.32 The following Function with conditions 298.42/260.32 "toEnum 0 = False; 298.42/260.32 toEnum 1 = True; 298.42/260.32 " 298.42/260.32 is transformed to 298.42/260.32 "toEnum xz = toEnum3 xz; 298.42/260.32 toEnum xy = toEnum1 xy; 298.42/260.32 " 298.42/260.32 "toEnum0 True xy = True; 298.42/260.32 " 298.42/260.32 "toEnum1 xy = toEnum0 (xy == 1) xy; 298.42/260.32 " 298.42/260.32 "toEnum2 True xz = False; 298.42/260.32 toEnum2 yu yv = toEnum1 yv; 298.42/260.32 " 298.42/260.32 "toEnum3 xz = toEnum2 (xz == 0) xz; 298.42/260.32 toEnum3 yw = toEnum1 yw; 298.42/260.32 " 298.42/260.32 The following Function with conditions 298.42/260.32 "toEnum 0 = (); 298.42/260.32 " 298.42/260.32 is transformed to 298.42/260.32 "toEnum yx = toEnum5 yx; 298.42/260.32 " 298.42/260.32 "toEnum4 True yx = (); 298.42/260.32 " 298.42/260.32 "toEnum5 yx = toEnum4 (yx == 0) yx; 298.42/260.32 " 298.42/260.32 The following Function with conditions 298.42/260.32 "toEnum 0 = LT; 298.42/260.32 toEnum 1 = EQ; 298.42/260.32 toEnum 2 = GT; 298.42/260.32 " 298.42/260.32 is transformed to 298.42/260.32 "toEnum zx = toEnum11 zx; 298.42/260.32 toEnum yz = toEnum9 yz; 298.42/260.32 toEnum yy = toEnum7 yy; 298.42/260.32 " 298.42/260.32 "toEnum6 True yy = GT; 298.42/260.32 " 298.42/260.32 "toEnum7 yy = toEnum6 (yy == 2) yy; 298.42/260.32 " 298.42/260.32 "toEnum8 True yz = EQ; 298.42/260.32 toEnum8 zu zv = toEnum7 zv; 298.42/260.32 " 298.42/260.32 "toEnum9 yz = toEnum8 (yz == 1) yz; 298.42/260.32 toEnum9 zw = toEnum7 zw; 298.42/260.32 " 298.42/260.32 "toEnum10 True zx = LT; 298.42/260.32 toEnum10 zy zz = toEnum9 zz; 298.42/260.32 " 298.42/260.32 "toEnum11 zx = toEnum10 (zx == 0) zx; 298.42/260.32 toEnum11 vuu = toEnum9 vuu; 298.42/260.32 " 298.42/260.32 The following Function with conditions 298.42/260.32 "takeWhile p [] = []; 298.42/260.32 takeWhile p (x : xs)|p xx : takeWhile p xs|otherwise[]; 298.42/260.32 " 298.42/260.32 is transformed to 298.42/260.32 "takeWhile p [] = takeWhile3 p []; 298.42/260.32 takeWhile p (x : xs) = takeWhile2 p (x : xs); 298.42/260.32 " 298.42/260.32 "takeWhile0 p x xs True = []; 298.42/260.32 " 298.42/260.32 "takeWhile1 p x xs True = x : takeWhile p xs; 298.42/260.32 takeWhile1 p x xs False = takeWhile0 p x xs otherwise; 298.42/260.32 " 298.42/260.32 "takeWhile2 p (x : xs) = takeWhile1 p x xs (p x); 298.42/260.32 " 298.42/260.32 "takeWhile3 p [] = []; 298.42/260.32 takeWhile3 vux vuy = takeWhile2 vux vuy; 298.42/260.32 " 298.42/260.32 The following Function with conditions 298.42/260.32 "p |n' >= nflip (<=) m|otherwiseflip (>=) m; 298.42/260.32 " 298.42/260.32 is transformed to 298.42/260.32 "p = p2; 298.42/260.32 " 298.42/260.32 "p1 True = flip (<=) m; 298.42/260.32 p1 False = p0 otherwise; 298.42/260.32 " 298.42/260.32 "p0 True = flip (>=) m; 298.42/260.32 " 298.42/260.32 "p2 = p1 (n' >= n); 298.42/260.32 " 298.42/260.32 The following Function with conditions 298.42/260.32 "undefined |Falseundefined; 298.42/260.32 " 298.42/260.32 is transformed to 298.42/260.32 "undefined = undefined1; 298.42/260.32 " 298.42/260.32 "undefined0 True = undefined; 298.42/260.32 " 298.42/260.32 "undefined1 = undefined0 False; 298.42/260.32 " 298.42/260.32 298.42/260.32 ---------------------------------------- 298.42/260.32 298.42/260.32 (8) 298.42/260.32 Obligation: 298.42/260.32 mainModule Main 298.42/260.32 module Main where { 298.42/260.32 import qualified Prelude; 298.42/260.32 } 298.42/260.32 298.42/260.32 ---------------------------------------- 298.42/260.32 298.42/260.32 (9) LetRed (EQUIVALENT) 298.42/260.32 Let/Where Reductions: 298.42/260.32 The bindings of the following Let/Where expression 298.42/260.32 "m where { 298.42/260.32 m = m0 vu6; 298.42/260.32 ; 298.42/260.32 m0 (m,vv) = m; 298.42/260.32 ; 298.42/260.32 vu6 = properFraction x; 298.42/260.32 } 298.42/260.32 " 298.42/260.32 are unpacked to the following functions on top level 298.42/260.32 "truncateVu6 vuz = properFraction vuz; 298.42/260.32 " 298.42/260.32 "truncateM0 vuz (m,vv) = m; 298.42/260.32 " 298.42/260.32 "truncateM vuz = truncateM0 vuz (truncateVu6 vuz); 298.42/260.32 " 298.42/260.32 The bindings of the following Let/Where expression 298.42/260.32 "(fromIntegral q,r :% y) where { 298.42/260.32 q = q1 vu30; 298.42/260.32 ; 298.42/260.32 q1 (q,vw) = q; 298.42/260.32 ; 298.42/260.32 r = r0 vu30; 298.42/260.32 ; 298.42/260.32 r0 (vx,r) = r; 298.42/260.32 ; 298.42/260.32 vu30 = quotRem x y; 298.42/260.32 } 298.42/260.32 " 298.42/260.32 are unpacked to the following functions on top level 298.42/260.32 "properFractionR vvu vvv = properFractionR0 vvu vvv (properFractionVu30 vvu vvv); 298.42/260.32 " 298.42/260.32 "properFractionR0 vvu vvv (vx,r) = r; 298.42/260.32 " 298.42/260.32 "properFractionQ1 vvu vvv (q,vw) = q; 298.42/260.32 " 298.42/260.32 "properFractionVu30 vvu vvv = quotRem vvu vvv; 298.42/260.32 " 298.42/260.32 "properFractionQ vvu vvv = properFractionQ1 vvu vvv (properFractionVu30 vvu vvv); 298.42/260.32 " 298.42/260.32 The bindings of the following Let/Where expression 298.42/260.32 "takeWhile p (numericEnumFromThen n n') where { 298.42/260.32 p = p2; 298.42/260.32 ; 298.42/260.32 p0 True = flip (>=) m; 298.42/260.32 ; 298.42/260.32 p1 True = flip (<=) m; 298.42/260.32 p1 False = p0 otherwise; 298.42/260.32 ; 298.42/260.32 p2 = p1 (n' >= n); 298.42/260.32 } 298.42/260.32 " 298.42/260.32 are unpacked to the following functions on top level 298.42/260.32 "numericEnumFromThenToP vvw vvx vvy = numericEnumFromThenToP2 vvw vvx vvy; 298.42/260.32 " 298.42/260.32 "numericEnumFromThenToP0 vvw vvx vvy True = flip (>=) vvw; 298.42/260.32 " 298.42/260.32 "numericEnumFromThenToP2 vvw vvx vvy = numericEnumFromThenToP1 vvw vvx vvy (vvx >= vvy); 298.42/260.32 " 298.42/260.32 "numericEnumFromThenToP1 vvw vvx vvy True = flip (<=) vvw; 298.42/260.32 numericEnumFromThenToP1 vvw vvx vvy False = numericEnumFromThenToP0 vvw vvx vvy otherwise; 298.42/260.32 " 298.42/260.32 298.42/260.32 ---------------------------------------- 298.42/260.32 298.42/260.32 (10) 298.42/260.32 Obligation: 298.42/260.32 mainModule Main 298.42/260.32 module Main where { 298.42/260.32 import qualified Prelude; 298.42/260.32 } 298.42/260.32 298.42/260.32 ---------------------------------------- 298.42/260.32 298.42/260.32 (11) NumRed (SOUND) 298.42/260.32 Num Reduction:All numbers are transformed to their corresponding representation with Succ, Pred and Zero. 298.42/260.32 ---------------------------------------- 298.42/260.32 298.42/260.32 (12) 298.42/260.32 Obligation: 298.42/260.32 mainModule Main 298.42/260.32 module Main where { 298.42/260.32 import qualified Prelude; 298.42/260.32 } 298.52/260.37 EOF