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