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