159.76/134.91 MAYBE 161.58/135.43 proof of /export/starexec/sandbox/benchmark/theBenchmark.hs 161.58/135.43 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 161.58/135.43 161.58/135.43 161.58/135.43 H-Termination with start terms of the given HASKELL could not be shown: 161.58/135.43 161.58/135.43 (0) HASKELL 161.58/135.43 (1) BR [EQUIVALENT, 0 ms] 161.58/135.43 (2) HASKELL 161.58/135.43 (3) COR [EQUIVALENT, 20 ms] 161.58/135.43 (4) HASKELL 161.58/135.43 (5) LetRed [EQUIVALENT, 0 ms] 161.58/135.43 (6) HASKELL 161.58/135.43 161.58/135.43 161.58/135.43 ---------------------------------------- 161.58/135.43 161.58/135.43 (0) 161.58/135.43 Obligation: 161.58/135.43 mainModule Main 161.58/135.43 module Maybe where { 161.58/135.43 import qualified List; 161.58/135.43 import qualified Main; 161.58/135.43 import qualified Prelude; 161.58/135.43 } 161.58/135.43 module List where { 161.58/135.43 import qualified Main; 161.58/135.43 import qualified Maybe; 161.58/135.43 import qualified Prelude; 161.58/135.43 nub :: Eq a => [a] -> [a]; 161.58/135.43 nub l = nub' l [] where { 161.58/135.43 nub' [] _ = []; 161.58/135.43 nub' (x : xs) ls | x `elem` ls = nub' xs ls 161.58/135.43 | otherwise = x : nub' xs (x : ls); 161.58/135.43 }; 161.58/135.43 161.58/135.43 } 161.58/135.43 module Main where { 161.58/135.43 import qualified List; 161.58/135.43 import qualified Maybe; 161.58/135.43 import qualified Prelude; 161.58/135.43 } 161.58/135.43 161.58/135.43 ---------------------------------------- 161.58/135.43 161.58/135.43 (1) BR (EQUIVALENT) 161.58/135.43 Replaced joker patterns by fresh variables and removed binding patterns. 161.58/135.43 ---------------------------------------- 161.58/135.43 161.58/135.43 (2) 161.58/135.43 Obligation: 161.58/135.43 mainModule Main 161.58/135.43 module Maybe where { 161.58/135.43 import qualified List; 161.58/135.43 import qualified Main; 161.58/135.43 import qualified Prelude; 161.58/135.43 } 161.58/135.43 module List where { 161.58/135.43 import qualified Main; 161.58/135.43 import qualified Maybe; 161.58/135.43 import qualified Prelude; 161.58/135.43 nub :: Eq a => [a] -> [a]; 161.58/135.43 nub l = nub' l [] where { 161.58/135.43 nub' [] wu = []; 161.58/135.43 nub' (x : xs) ls | x `elem` ls = nub' xs ls 161.58/135.43 | otherwise = x : nub' xs (x : ls); 161.58/135.43 }; 161.58/135.43 161.58/135.43 } 161.58/135.43 module Main where { 161.58/135.43 import qualified List; 161.58/135.43 import qualified Maybe; 161.58/135.43 import qualified Prelude; 161.58/135.43 } 161.58/135.43 161.58/135.43 ---------------------------------------- 161.58/135.43 161.58/135.43 (3) COR (EQUIVALENT) 161.58/135.43 Cond Reductions: 161.58/135.43 The following Function with conditions 161.58/135.43 "undefined |Falseundefined; 161.58/135.43 " 161.58/135.43 is transformed to 161.58/135.43 "undefined = undefined1; 161.58/135.43 " 161.58/135.43 "undefined0 True = undefined; 161.58/135.43 " 161.58/135.43 "undefined1 = undefined0 False; 161.58/135.43 " 161.58/135.43 The following Function with conditions 161.58/135.43 "nub' [] wu = []; 161.58/135.43 nub' (x : xs) ls|x `elem` lsnub' xs ls|otherwisex : nub' xs (x : ls); 161.58/135.43 " 161.58/135.43 is transformed to 161.58/135.43 "nub' [] wu = nub'3 [] wu; 161.58/135.43 nub' (x : xs) ls = nub'2 (x : xs) ls; 161.58/135.43 " 161.58/135.43 "nub'1 x xs ls True = nub' xs ls; 161.58/135.43 nub'1 x xs ls False = nub'0 x xs ls otherwise; 161.58/135.43 " 161.58/135.43 "nub'0 x xs ls True = x : nub' xs (x : ls); 161.58/135.43 " 161.58/135.43 "nub'2 (x : xs) ls = nub'1 x xs ls (x `elem` ls); 161.58/135.43 " 161.58/135.43 "nub'3 [] wu = []; 161.58/135.43 nub'3 wx wy = nub'2 wx wy; 161.58/135.43 " 161.58/135.43 161.58/135.43 ---------------------------------------- 161.58/135.43 161.58/135.43 (4) 161.58/135.43 Obligation: 161.58/135.43 mainModule Main 161.58/135.43 module Maybe where { 161.58/135.43 import qualified List; 161.58/135.43 import qualified Main; 161.58/135.43 import qualified Prelude; 161.58/135.43 } 161.58/135.43 module List where { 161.58/135.43 import qualified Main; 161.58/135.43 import qualified Maybe; 161.58/135.43 import qualified Prelude; 161.58/135.43 nub :: Eq a => [a] -> [a]; 161.58/135.43 nub l = nub' l [] where { 161.58/135.43 nub' [] wu = nub'3 [] wu; 161.58/135.43 nub' (x : xs) ls = nub'2 (x : xs) ls; 161.58/135.43 nub'0 x xs ls True = x : nub' xs (x : ls); 161.58/135.43 nub'1 x xs ls True = nub' xs ls; 161.58/135.43 nub'1 x xs ls False = nub'0 x xs ls otherwise; 161.58/135.43 nub'2 (x : xs) ls = nub'1 x xs ls (x `elem` ls); 161.58/135.43 nub'3 [] wu = []; 161.58/135.43 nub'3 wx wy = nub'2 wx wy; 161.58/135.43 }; 161.58/135.43 161.58/135.43 } 161.58/135.43 module Main where { 161.58/135.43 import qualified List; 161.58/135.43 import qualified Maybe; 161.58/135.43 import qualified Prelude; 161.58/135.43 } 161.58/135.43 161.58/135.43 ---------------------------------------- 161.58/135.43 161.58/135.43 (5) LetRed (EQUIVALENT) 161.58/135.43 Let/Where Reductions: 161.58/135.43 The bindings of the following Let/Where expression 161.58/135.43 "nub' l [] where { 161.58/135.43 nub' [] wu = nub'3 [] wu; 161.58/135.43 nub' (x : xs) ls = nub'2 (x : xs) ls; 161.58/135.43 ; 161.58/135.43 nub'0 x xs ls True = x : nub' xs (x : ls); 161.58/135.43 ; 161.58/135.43 nub'1 x xs ls True = nub' xs ls; 161.58/135.43 nub'1 x xs ls False = nub'0 x xs ls otherwise; 161.58/135.43 ; 161.58/135.43 nub'2 (x : xs) ls = nub'1 x xs ls (x `elem` ls); 161.58/135.43 ; 161.58/135.43 nub'3 [] wu = []; 161.58/135.43 nub'3 wx wy = nub'2 wx wy; 161.58/135.43 } 161.58/135.43 " 161.58/135.43 are unpacked to the following functions on top level 161.58/135.43 "nubNub'0 x xs ls True = x : nubNub' xs (x : ls); 161.58/135.43 " 161.58/135.43 "nubNub'2 (x : xs) ls = nubNub'1 x xs ls (x `elem` ls); 161.58/135.43 " 161.58/135.43 "nubNub' [] wu = nubNub'3 [] wu; 161.58/135.43 nubNub' (x : xs) ls = nubNub'2 (x : xs) ls; 161.58/135.43 " 161.58/135.43 "nubNub'3 [] wu = []; 161.58/135.43 nubNub'3 wx wy = nubNub'2 wx wy; 161.58/135.43 " 161.58/135.43 "nubNub'1 x xs ls True = nubNub' xs ls; 161.58/135.43 nubNub'1 x xs ls False = nubNub'0 x xs ls otherwise; 161.58/135.43 " 161.58/135.43 161.58/135.43 ---------------------------------------- 161.58/135.43 161.58/135.43 (6) 161.58/135.43 Obligation: 161.58/135.43 mainModule Main 161.58/135.43 module Maybe where { 161.58/135.43 import qualified List; 161.58/135.43 import qualified Main; 161.58/135.43 import qualified Prelude; 161.58/135.43 } 161.58/135.43 module List where { 161.58/135.43 import qualified Main; 161.58/135.43 import qualified Maybe; 161.58/135.43 import qualified Prelude; 161.58/135.43 nub :: Eq a => [a] -> [a]; 161.58/135.43 nub l = nubNub' l []; 161.58/135.43 161.58/135.43 nubNub' [] wu = nubNub'3 [] wu; 161.58/135.43 nubNub' (x : xs) ls = nubNub'2 (x : xs) ls; 161.58/135.43 161.58/135.43 nubNub'0 x xs ls True = x : nubNub' xs (x : ls); 161.58/135.43 161.58/135.43 nubNub'1 x xs ls True = nubNub' xs ls; 161.58/135.43 nubNub'1 x xs ls False = nubNub'0 x xs ls otherwise; 161.58/135.43 161.58/135.43 nubNub'2 (x : xs) ls = nubNub'1 x xs ls (x `elem` ls); 161.58/135.43 161.58/135.43 nubNub'3 [] wu = []; 161.58/135.43 nubNub'3 wx wy = nubNub'2 wx wy; 161.58/135.43 161.58/135.43 } 161.58/135.43 module Main where { 161.58/135.43 import qualified List; 161.58/135.43 import qualified Maybe; 161.58/135.43 import qualified Prelude; 161.58/135.43 } 161.68/135.48 EOF