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