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