107.13/95.15 MAYBE 109.42/95.84 proof of /export/starexec/sandbox2/benchmark/theBenchmark.hs 109.42/95.84 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 109.42/95.84 109.42/95.84 109.42/95.84 H-Termination with start terms of the given HASKELL could not be shown: 109.42/95.84 109.42/95.84 (0) HASKELL 109.42/95.84 (1) LR [EQUIVALENT, 0 ms] 109.42/95.84 (2) HASKELL 109.42/95.84 (3) IFR [EQUIVALENT, 0 ms] 109.42/95.84 (4) HASKELL 109.42/95.84 (5) BR [EQUIVALENT, 0 ms] 109.42/95.84 (6) HASKELL 109.42/95.84 (7) COR [EQUIVALENT, 10 ms] 109.42/95.84 (8) HASKELL 109.42/95.84 (9) LetRed [EQUIVALENT, 0 ms] 109.42/95.84 (10) HASKELL 109.42/95.84 (11) NumRed [SOUND, 4 ms] 109.42/95.84 (12) HASKELL 109.42/95.84 109.42/95.84 109.42/95.84 ---------------------------------------- 109.42/95.84 109.42/95.84 (0) 109.42/95.84 Obligation: 109.42/95.84 mainModule Main 109.42/95.84 module Main where { 109.42/95.84 import qualified Prelude; 109.42/95.84 } 109.42/95.84 109.42/95.84 ---------------------------------------- 109.42/95.84 109.42/95.84 (1) LR (EQUIVALENT) 109.42/95.84 Lambda Reductions: 109.42/95.84 The following Lambda expression 109.42/95.84 "\ab->(a,b)" 109.42/95.84 is transformed to 109.42/95.84 "zip0 a b = (a,b); 109.42/95.84 " 109.42/95.84 109.42/95.84 ---------------------------------------- 109.42/95.84 109.42/95.84 (2) 109.42/95.84 Obligation: 109.42/95.84 mainModule Main 109.42/95.84 module Main where { 109.42/95.84 import qualified Prelude; 109.42/95.84 } 109.42/95.84 109.42/95.84 ---------------------------------------- 109.42/95.84 109.42/95.84 (3) IFR (EQUIVALENT) 109.42/95.84 If Reductions: 109.42/95.84 The following If expression 109.42/95.84 "if primGEqNatS x y then Succ (primDivNatS (primMinusNatS x y) (Succ y)) else Zero" 109.42/95.84 is transformed to 109.42/95.84 "primDivNatS0 x y True = Succ (primDivNatS (primMinusNatS x y) (Succ y)); 109.42/95.84 primDivNatS0 x y False = Zero; 109.42/95.84 " 109.42/95.84 The following If expression 109.42/95.84 "if primGEqNatS x y then primModNatS (primMinusNatS x y) (Succ y) else Succ x" 109.42/95.84 is transformed to 109.42/95.84 "primModNatS0 x y True = primModNatS (primMinusNatS x y) (Succ y); 109.42/95.84 primModNatS0 x y False = Succ x; 109.42/95.84 " 109.42/95.84 The following If expression 109.42/95.84 "if primGEqNatS x y then primModNatP (primMinusNatS x y) (Succ y) else primMinusNatS y x" 109.42/95.84 is transformed to 109.42/95.84 "primModNatP0 x y True = primModNatP (primMinusNatS x y) (Succ y); 109.42/95.84 primModNatP0 x y False = primMinusNatS y x; 109.42/95.84 " 109.42/95.84 109.42/95.84 ---------------------------------------- 109.42/95.84 109.42/95.84 (4) 109.42/95.84 Obligation: 109.42/95.84 mainModule Main 109.42/95.84 module Main where { 109.42/95.84 import qualified Prelude; 109.42/95.84 } 109.42/95.84 109.42/95.84 ---------------------------------------- 109.42/95.84 109.42/95.84 (5) BR (EQUIVALENT) 109.42/95.84 Replaced joker patterns by fresh variables and removed binding patterns. 109.42/95.84 109.42/95.84 Binding Reductions: 109.42/95.84 The bind variable of the following binding Pattern 109.42/95.84 "s@(wy : wz)" 109.42/95.84 is replaced by the following term 109.42/95.84 "wy : wz" 109.42/95.84 109.42/95.84 ---------------------------------------- 109.42/95.84 109.42/95.84 (6) 109.42/95.84 Obligation: 109.42/95.84 mainModule Main 109.42/95.84 module Main where { 109.42/95.84 import qualified Prelude; 109.42/95.84 } 109.42/95.84 109.42/95.84 ---------------------------------------- 109.42/95.84 109.42/95.84 (7) COR (EQUIVALENT) 109.42/95.84 Cond Reductions: 109.42/95.84 The following Function with conditions 109.42/95.84 "showl [] = showChar '"'; 109.42/95.84 showl ('"' : cs) = (showString ('\' : '"' : [])) . showl cs; 109.42/95.84 showl (c : cs) = (showLitChar c) . showl cs; 109.42/95.84 " 109.42/95.84 is transformed to 109.42/95.84 "showl [] = showl3 []; 109.42/95.84 showl (zv : cs) = showl2 (zv : cs); 109.42/95.84 showl (c : cs) = showl0 (c : cs); 109.42/95.84 " 109.42/95.84 "showl0 (c : cs) = (showLitChar c) . showl cs; 109.42/95.84 " 109.42/95.84 "showl1 True (zv : cs) = (showString ('\' : '"' : [])) . showl cs; 109.42/95.84 showl1 zw zx = showl0 zx; 109.42/95.84 " 109.42/95.84 "showl2 (zv : cs) = showl1 (zv == '"') (zv : cs); 109.42/95.84 showl2 zy = showl0 zy; 109.42/95.84 " 109.42/95.84 "showl3 [] = showChar '"'; 109.42/95.84 showl3 vuu = showl2 vuu; 109.42/95.84 " 109.42/95.84 The following Function with conditions 109.42/95.84 "takeWhile p [] = []; 109.42/95.84 takeWhile p (x : xs)|p xx : takeWhile p xs|otherwise[]; 109.42/95.84 " 109.42/95.84 is transformed to 109.42/95.84 "takeWhile p [] = takeWhile3 p []; 109.42/95.84 takeWhile p (x : xs) = takeWhile2 p (x : xs); 109.42/95.84 " 109.42/95.84 "takeWhile0 p x xs True = []; 109.42/95.84 " 109.42/95.84 "takeWhile1 p x xs True = x : takeWhile p xs; 109.42/95.84 takeWhile1 p x xs False = takeWhile0 p x xs otherwise; 109.42/95.84 " 109.42/95.84 "takeWhile2 p (x : xs) = takeWhile1 p x xs (p x); 109.42/95.84 " 109.42/95.84 "takeWhile3 p [] = []; 109.42/95.84 takeWhile3 vux vuy = takeWhile2 vux vuy; 109.42/95.84 " 109.42/95.84 The following Function with conditions 109.42/95.84 "!! (x : vx) 0 = x; 109.42/95.84 !! (vy : xs) n|n > 0xs !! (n - 1); 109.42/95.84 !! (vz : wu) wv = error []; 109.42/95.84 !! [] ww = error []; 109.42/95.84 " 109.42/95.84 is transformed to 109.42/95.84 "!! (x : vx) vwv = emEm5 (x : vx) vwv; 109.42/95.84 !! (vy : xs) n = emEm3 (vy : xs) n; 109.42/95.84 !! (vz : wu) wv = emEm1 (vz : wu) wv; 109.42/95.84 !! [] ww = emEm0 [] ww; 109.42/95.84 " 109.42/95.84 "emEm0 [] ww = error []; 109.42/95.84 " 109.42/95.84 "emEm1 (vz : wu) wv = error []; 109.42/95.84 emEm1 vvv vvw = emEm0 vvv vvw; 109.42/95.84 " 109.42/95.84 "emEm2 vy xs n True = xs !! (n - 1); 109.42/95.84 emEm2 vy xs n False = emEm1 (vy : xs) n; 109.42/95.84 " 109.42/95.84 "emEm3 (vy : xs) n = emEm2 vy xs n (n > 0); 109.42/95.84 emEm3 vvy vvz = emEm1 vvy vvz; 109.42/95.84 " 109.42/95.84 "emEm4 True (x : vx) vwv = x; 109.42/95.84 emEm4 vww vwx vwy = emEm3 vwx vwy; 109.42/95.84 " 109.42/95.84 "emEm5 (x : vx) vwv = emEm4 (vwv == 0) (x : vx) vwv; 109.42/95.84 emEm5 vwz vxu = emEm3 vwz vxu; 109.42/95.84 " 109.42/95.84 The following Function with conditions 109.42/95.84 "showLitChar c|c > '\127'(showChar '\') . protectEsc isDigit (shows (fromEnum c)); 109.42/95.84 showLitChar '\127' = showString ('\' : 'D' : 'E' : 'L' : []); 109.42/95.84 showLitChar '\' = showString ('\' : '\' : []); 109.42/95.84 showLitChar c|c >= '\32'showChar c; 109.42/95.84 showLitChar '\7' = showString ('\' : 'a' : []); 109.42/95.84 showLitChar '\8' = showString ('\' : 'b' : []); 109.42/95.84 showLitChar '\12' = showString ('\' : 'f' : []); 109.42/95.84 showLitChar '\10' = showString ('\' : 'n' : []); 109.42/95.84 showLitChar '\13' = showString ('\' : 'r' : []); 109.42/95.84 showLitChar '\9' = showString ('\' : 't' : []); 109.42/95.84 showLitChar '\11' = showString ('\' : 'v' : []); 109.42/95.84 showLitChar '\14' = protectEsc ('H' ==) (showString ('\' : 'S' : 'O' : [])); 109.42/95.84 showLitChar c = showString ('\' : snd (asciiTab !! (fromEnum c))); 109.42/95.84 " 109.42/95.84 is transformed to 109.42/95.84 "showLitChar c = showLitChar24 c; 109.42/95.84 showLitChar wxw = showLitChar22 wxw; 109.42/95.84 showLitChar wwy = showLitChar20 wwy; 109.42/95.84 showLitChar c = showLitChar18 c; 109.42/95.84 showLitChar wvz = showLitChar16 wvz; 109.42/95.84 showLitChar wvv = showLitChar14 wvv; 109.42/95.84 showLitChar wux = showLitChar12 wux; 109.42/95.84 showLitChar vzz = showLitChar10 vzz; 109.42/95.84 showLitChar vzv = showLitChar8 vzv; 109.42/95.84 showLitChar vyx = showLitChar6 vyx; 109.42/95.84 showLitChar vxz = showLitChar4 vxz; 109.42/95.84 showLitChar vxv = showLitChar2 vxv; 109.42/95.84 showLitChar c = showLitChar0 c; 109.42/95.84 " 109.42/95.84 "showLitChar0 c = showString ('\' : snd (asciiTab !! (fromEnum c))); 109.42/95.84 " 109.42/95.84 "showLitChar1 True vxv = protectEsc ('H' ==) (showString ('\' : 'S' : 'O' : [])); 109.42/95.84 showLitChar1 vxw vxx = showLitChar0 vxx; 109.42/95.84 " 109.42/95.84 "showLitChar2 vxv = showLitChar1 (vxv == '\14') vxv; 109.42/95.84 showLitChar2 vxy = showLitChar0 vxy; 109.42/95.84 " 109.42/95.84 "showLitChar3 True vxz = showString ('\' : 'v' : []); 109.42/95.84 showLitChar3 vyu vyv = showLitChar2 vyv; 109.42/95.84 " 109.42/95.84 "showLitChar4 vxz = showLitChar3 (vxz == '\11') vxz; 109.42/95.84 showLitChar4 vyw = showLitChar2 vyw; 109.42/95.84 " 109.42/95.84 "showLitChar5 True vyx = showString ('\' : 't' : []); 109.42/95.84 showLitChar5 vyy vyz = showLitChar4 vyz; 109.42/95.84 " 109.42/95.84 "showLitChar6 vyx = showLitChar5 (vyx == '\9') vyx; 109.42/95.84 showLitChar6 vzu = showLitChar4 vzu; 109.42/95.84 " 109.42/95.84 "showLitChar7 True vzv = showString ('\' : 'r' : []); 109.42/95.84 showLitChar7 vzw vzx = showLitChar6 vzx; 109.42/95.84 " 109.42/95.84 "showLitChar8 vzv = showLitChar7 (vzv == '\13') vzv; 109.42/95.84 showLitChar8 vzy = showLitChar6 vzy; 109.42/95.84 " 109.42/95.84 "showLitChar9 True vzz = showString ('\' : 'n' : []); 109.42/95.84 showLitChar9 wuu wuv = showLitChar8 wuv; 109.42/95.84 " 109.42/95.84 "showLitChar10 vzz = showLitChar9 (vzz == '\10') vzz; 109.42/95.84 showLitChar10 wuw = showLitChar8 wuw; 109.42/95.84 " 109.42/95.84 "showLitChar11 True wux = showString ('\' : 'f' : []); 109.42/95.84 showLitChar11 wuy wuz = showLitChar10 wuz; 109.42/95.84 " 109.42/95.84 "showLitChar12 wux = showLitChar11 (wux == '\12') wux; 109.42/95.84 showLitChar12 wvu = showLitChar10 wvu; 109.42/95.84 " 109.42/95.84 "showLitChar13 True wvv = showString ('\' : 'b' : []); 109.42/95.84 showLitChar13 wvw wvx = showLitChar12 wvx; 109.42/95.84 " 109.42/95.84 "showLitChar14 wvv = showLitChar13 (wvv == '\8') wvv; 109.42/95.84 showLitChar14 wvy = showLitChar12 wvy; 109.42/95.84 " 109.42/95.84 "showLitChar15 True wvz = showString ('\' : 'a' : []); 109.42/95.84 showLitChar15 wwu wwv = showLitChar14 wwv; 109.42/95.84 " 109.42/95.84 "showLitChar16 wvz = showLitChar15 (wvz == '\7') wvz; 109.42/95.84 showLitChar16 www = showLitChar14 www; 109.42/95.84 " 109.42/95.84 "showLitChar17 c True = showChar c; 109.42/95.84 showLitChar17 c False = showLitChar16 c; 109.42/95.84 " 109.42/95.84 "showLitChar18 c = showLitChar17 c (c >= '\32'); 109.42/95.84 showLitChar18 wwx = showLitChar16 wwx; 109.42/95.84 " 109.42/95.84 "showLitChar19 True wwy = showString ('\' : '\' : []); 109.42/95.84 showLitChar19 wwz wxu = showLitChar18 wxu; 109.42/95.84 " 109.42/95.84 "showLitChar20 wwy = showLitChar19 (wwy == '\') wwy; 109.42/95.84 showLitChar20 wxv = showLitChar18 wxv; 109.42/95.84 " 109.42/95.84 "showLitChar21 True wxw = showString ('\' : 'D' : 'E' : 'L' : []); 109.42/95.84 showLitChar21 wxx wxy = showLitChar20 wxy; 109.42/95.84 " 109.42/95.84 "showLitChar22 wxw = showLitChar21 (wxw == '\127') wxw; 109.42/95.84 showLitChar22 wxz = showLitChar20 wxz; 109.42/95.84 " 109.42/95.84 "showLitChar23 c True = (showChar '\') . protectEsc isDigit (shows (fromEnum c)); 109.42/95.84 showLitChar23 c False = showLitChar22 c; 109.42/95.84 " 109.42/95.84 "showLitChar24 c = showLitChar23 c (c > '\127'); 109.42/95.84 showLitChar24 wyu = showLitChar22 wyu; 109.42/95.84 " 109.42/95.84 The following Function with conditions 109.42/95.84 "cont (wy : wz)|p wy('\' : '&' : []) ++ wy : wz; 109.42/95.84 cont s = s; 109.42/95.84 " 109.42/95.84 is transformed to 109.42/95.84 "cont (wy : wz) = cont2 (wy : wz); 109.42/95.84 cont s = cont0 s; 109.42/95.84 " 109.42/95.84 "cont0 s = s; 109.42/95.84 " 109.42/95.84 "cont1 wy wz True = ('\' : '&' : []) ++ wy : wz; 109.42/95.84 cont1 wy wz False = cont0 (wy : wz); 109.42/95.84 " 109.42/95.84 "cont2 (wy : wz) = cont1 wy wz (p wy); 109.42/95.84 cont2 wyw = cont0 wyw; 109.42/95.84 " 109.42/95.84 The following Function with conditions 109.42/95.84 "undefined |Falseundefined; 109.42/95.84 " 109.42/95.84 is transformed to 109.42/95.84 "undefined = undefined1; 109.42/95.84 " 109.42/95.84 "undefined0 True = undefined; 109.42/95.84 " 109.42/95.84 "undefined1 = undefined0 False; 109.42/95.84 " 109.42/95.84 109.42/95.84 ---------------------------------------- 109.42/95.84 109.42/95.84 (8) 109.42/95.84 Obligation: 109.42/95.84 mainModule Main 109.42/95.84 module Main where { 109.42/95.84 import qualified Prelude; 109.42/95.84 } 109.42/95.84 109.42/95.84 ---------------------------------------- 109.42/95.84 109.42/95.84 (9) LetRed (EQUIVALENT) 109.42/95.84 Let/Where Reductions: 109.42/95.84 The bindings of the following Let/Where expression 109.42/95.84 "(showChar '"') . showl cs where { 109.42/95.84 showl [] = showl3 []; 109.42/95.84 showl (zv : cs) = showl2 (zv : cs); 109.42/95.84 showl (c : cs) = showl0 (c : cs); 109.42/95.84 ; 109.42/95.84 showl0 (c : cs) = (showLitChar c) . showl cs; 109.42/95.84 ; 109.42/95.84 showl1 True (zv : cs) = (showString ('\' : '"' : [])) . showl cs; 109.42/95.84 showl1 zw zx = showl0 zx; 109.42/95.84 ; 109.42/95.84 showl2 (zv : cs) = showl1 (zv == '"') (zv : cs); 109.42/95.84 showl2 zy = showl0 zy; 109.42/95.84 ; 109.42/95.84 showl3 [] = showChar '"'; 109.42/95.84 showl3 vuu = showl2 vuu; 109.42/95.84 } 109.42/95.84 " 109.42/95.84 are unpacked to the following functions on top level 109.42/95.84 "showListShowl1 True (zv : cs) = (showString ('\' : '"' : [])) . showListShowl cs; 109.42/95.84 showListShowl1 zw zx = showListShowl0 zx; 109.42/95.84 " 109.42/95.84 "showListShowl [] = showListShowl3 []; 109.42/95.84 showListShowl (zv : cs) = showListShowl2 (zv : cs); 109.42/95.84 showListShowl (c : cs) = showListShowl0 (c : cs); 109.42/95.84 " 109.42/95.84 "showListShowl3 [] = showChar '"'; 109.42/95.84 showListShowl3 vuu = showListShowl2 vuu; 109.42/95.84 " 109.42/95.84 "showListShowl2 (zv : cs) = showListShowl1 (zv == '"') (zv : cs); 109.42/95.84 showListShowl2 zy = showListShowl0 zy; 109.42/95.84 " 109.42/95.84 "showListShowl0 (c : cs) = (showLitChar c) . showListShowl cs; 109.42/95.84 " 109.42/95.84 The bindings of the following Let/Where expression 109.42/95.84 "f . cont where { 109.42/95.84 cont (wy : wz) = cont2 (wy : wz); 109.42/95.84 cont s = cont0 s; 109.42/95.84 ; 109.42/95.84 cont0 s = s; 109.42/95.84 ; 109.42/95.84 cont1 wy wz True = ('\' : '&' : []) ++ wy : wz; 109.42/95.84 cont1 wy wz False = cont0 (wy : wz); 109.42/95.84 ; 109.42/95.84 cont2 (wy : wz) = cont1 wy wz (p wy); 109.42/95.84 cont2 wyw = cont0 wyw; 109.42/95.84 } 109.42/95.84 " 109.42/95.84 are unpacked to the following functions on top level 109.42/95.84 "protectEscCont2 wyx (wy : wz) = protectEscCont1 wyx wy wz (wyx wy); 109.42/95.84 protectEscCont2 wyx wyw = protectEscCont0 wyx wyw; 109.42/95.84 " 109.42/95.84 "protectEscCont wyx (wy : wz) = protectEscCont2 wyx (wy : wz); 109.42/95.84 protectEscCont wyx s = protectEscCont0 wyx s; 109.42/95.84 " 109.42/95.84 "protectEscCont0 wyx s = s; 109.42/95.84 " 109.42/95.84 "protectEscCont1 wyx wy wz True = ('\' : '&' : []) ++ wy : wz; 109.42/95.84 protectEscCont1 wyx wy wz False = protectEscCont0 wyx (wy : wz); 109.42/95.84 " 109.42/95.84 109.42/95.84 ---------------------------------------- 109.42/95.84 109.42/95.84 (10) 109.42/95.84 Obligation: 109.42/95.84 mainModule Main 109.42/95.84 module Main where { 109.42/95.84 import qualified Prelude; 109.42/95.84 } 109.42/95.84 109.42/95.84 ---------------------------------------- 109.42/95.84 109.42/95.84 (11) NumRed (SOUND) 109.42/95.84 Num Reduction:All numbers are transformed to their corresponding representation with Succ, Pred and Zero. 109.42/95.84 ---------------------------------------- 109.42/95.84 109.42/95.84 (12) 109.42/95.84 Obligation: 109.42/95.84 mainModule Main 109.42/95.84 module Main where { 109.42/95.84 import qualified Prelude; 109.42/95.84 } 109.69/95.90 EOF