13.50/5.59 YES 16.11/6.23 proof of /export/starexec/sandbox/benchmark/theBenchmark.hs 16.11/6.23 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 16.11/6.23 16.11/6.23 16.11/6.23 H-Termination with start terms of the given HASKELL could be proven: 16.11/6.23 16.11/6.23 (0) HASKELL 16.11/6.23 (1) IFR [EQUIVALENT, 0 ms] 16.11/6.23 (2) HASKELL 16.11/6.23 (3) BR [EQUIVALENT, 0 ms] 16.11/6.23 (4) HASKELL 16.11/6.23 (5) COR [EQUIVALENT, 19 ms] 16.11/6.23 (6) HASKELL 16.11/6.23 (7) LetRed [EQUIVALENT, 0 ms] 16.11/6.23 (8) HASKELL 16.11/6.23 (9) Narrow [SOUND, 0 ms] 16.11/6.23 (10) AND 16.11/6.23 (11) QDP 16.11/6.23 (12) QDPSizeChangeProof [EQUIVALENT, 0 ms] 16.11/6.23 (13) YES 16.11/6.23 (14) QDP 16.11/6.23 (15) QDPSizeChangeProof [EQUIVALENT, 0 ms] 16.11/6.23 (16) YES 16.11/6.23 (17) QDP 16.11/6.23 (18) DependencyGraphProof [EQUIVALENT, 0 ms] 16.11/6.23 (19) QDP 16.11/6.23 (20) TransformationProof [EQUIVALENT, 0 ms] 16.11/6.23 (21) QDP 16.11/6.23 (22) QDPSizeChangeProof [EQUIVALENT, 0 ms] 16.11/6.23 (23) YES 16.11/6.23 (24) QDP 16.11/6.23 (25) TransformationProof [EQUIVALENT, 0 ms] 16.11/6.23 (26) QDP 16.11/6.23 (27) UsableRulesProof [EQUIVALENT, 0 ms] 16.11/6.23 (28) QDP 16.11/6.23 (29) QReductionProof [EQUIVALENT, 0 ms] 16.11/6.23 (30) QDP 16.11/6.23 (31) QDPSizeChangeProof [EQUIVALENT, 0 ms] 16.11/6.23 (32) YES 16.11/6.23 (33) QDP 16.11/6.23 (34) QDPSizeChangeProof [EQUIVALENT, 0 ms] 16.11/6.23 (35) YES 16.11/6.23 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (0) 16.11/6.23 Obligation: 16.11/6.23 mainModule Main 16.11/6.23 module Maybe where { 16.11/6.23 import qualified List; 16.11/6.23 import qualified Main; 16.11/6.23 import qualified Prelude; 16.11/6.23 } 16.11/6.23 module List where { 16.11/6.23 import qualified Main; 16.11/6.23 import qualified Maybe; 16.11/6.23 import qualified Prelude; 16.11/6.23 deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]; 16.11/6.23 deleteBy _ _ [] = []; 16.11/6.23 deleteBy eq x (y : ys) = if x `eq` y then ys else y : deleteBy eq x ys; 16.11/6.23 16.11/6.23 elem_by :: (a -> a -> Bool) -> a -> [a] -> Bool; 16.11/6.23 elem_by _ _ [] = False; 16.11/6.23 elem_by eq y (x : xs) = x `eq` y || elem_by eq y xs; 16.11/6.23 16.11/6.23 nubBy :: (a -> a -> Bool) -> [a] -> [a]; 16.11/6.23 nubBy eq l = nubBy' l [] where { 16.11/6.23 nubBy' [] _ = []; 16.11/6.23 nubBy' (y : ys) xs | elem_by eq y xs = nubBy' ys xs 16.11/6.23 | otherwise = y : nubBy' ys (y : xs); 16.11/6.23 }; 16.11/6.23 16.11/6.23 union :: Eq a => [a] -> [a] -> [a]; 16.11/6.23 union = unionBy (==); 16.11/6.23 16.11/6.23 unionBy :: (a -> a -> Bool) -> [a] -> [a] -> [a]; 16.11/6.23 unionBy eq xs ys = xs ++ foldl (flip (deleteBy eq)) (nubBy eq ys) xs; 16.11/6.23 16.11/6.23 } 16.11/6.23 module Main where { 16.11/6.23 import qualified List; 16.11/6.23 import qualified Maybe; 16.11/6.23 import qualified Prelude; 16.11/6.23 } 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (1) IFR (EQUIVALENT) 16.11/6.23 If Reductions: 16.11/6.23 The following If expression 16.11/6.23 "if eq x y then ys else y : deleteBy eq x ys" 16.11/6.23 is transformed to 16.11/6.23 "deleteBy0 ys y eq x True = ys; 16.11/6.23 deleteBy0 ys y eq x False = y : deleteBy eq x ys; 16.11/6.23 " 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (2) 16.11/6.23 Obligation: 16.11/6.23 mainModule Main 16.11/6.23 module Maybe where { 16.11/6.23 import qualified List; 16.11/6.23 import qualified Main; 16.11/6.23 import qualified Prelude; 16.11/6.23 } 16.11/6.23 module List where { 16.11/6.23 import qualified Main; 16.11/6.23 import qualified Maybe; 16.11/6.23 import qualified Prelude; 16.11/6.23 deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]; 16.11/6.23 deleteBy _ _ [] = []; 16.11/6.23 deleteBy eq x (y : ys) = deleteBy0 ys y eq x (x `eq` y); 16.11/6.23 16.11/6.23 deleteBy0 ys y eq x True = ys; 16.11/6.23 deleteBy0 ys y eq x False = y : deleteBy eq x ys; 16.11/6.23 16.11/6.23 elem_by :: (a -> a -> Bool) -> a -> [a] -> Bool; 16.11/6.23 elem_by _ _ [] = False; 16.11/6.23 elem_by eq y (x : xs) = x `eq` y || elem_by eq y xs; 16.11/6.23 16.11/6.23 nubBy :: (a -> a -> Bool) -> [a] -> [a]; 16.11/6.23 nubBy eq l = nubBy' l [] where { 16.11/6.23 nubBy' [] _ = []; 16.11/6.23 nubBy' (y : ys) xs | elem_by eq y xs = nubBy' ys xs 16.11/6.23 | otherwise = y : nubBy' ys (y : xs); 16.11/6.23 }; 16.11/6.23 16.11/6.23 union :: Eq a => [a] -> [a] -> [a]; 16.11/6.23 union = unionBy (==); 16.11/6.23 16.11/6.23 unionBy :: (a -> a -> Bool) -> [a] -> [a] -> [a]; 16.11/6.23 unionBy eq xs ys = xs ++ foldl (flip (deleteBy eq)) (nubBy eq ys) xs; 16.11/6.23 16.11/6.23 } 16.11/6.23 module Main where { 16.11/6.23 import qualified List; 16.11/6.23 import qualified Maybe; 16.11/6.23 import qualified Prelude; 16.11/6.23 } 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (3) BR (EQUIVALENT) 16.11/6.23 Replaced joker patterns by fresh variables and removed binding patterns. 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (4) 16.11/6.23 Obligation: 16.11/6.23 mainModule Main 16.11/6.23 module Maybe where { 16.11/6.23 import qualified List; 16.11/6.23 import qualified Main; 16.11/6.23 import qualified Prelude; 16.11/6.23 } 16.11/6.23 module List where { 16.11/6.23 import qualified Main; 16.11/6.23 import qualified Maybe; 16.11/6.23 import qualified Prelude; 16.11/6.23 deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]; 16.11/6.23 deleteBy wv ww [] = []; 16.11/6.23 deleteBy eq x (y : ys) = deleteBy0 ys y eq x (x `eq` y); 16.11/6.23 16.11/6.23 deleteBy0 ys y eq x True = ys; 16.11/6.23 deleteBy0 ys y eq x False = y : deleteBy eq x ys; 16.11/6.23 16.11/6.23 elem_by :: (a -> a -> Bool) -> a -> [a] -> Bool; 16.11/6.23 elem_by vy vz [] = False; 16.11/6.23 elem_by eq y (x : xs) = x `eq` y || elem_by eq y xs; 16.11/6.23 16.11/6.23 nubBy :: (a -> a -> Bool) -> [a] -> [a]; 16.11/6.23 nubBy eq l = nubBy' l [] where { 16.11/6.23 nubBy' [] wu = []; 16.11/6.23 nubBy' (y : ys) xs | elem_by eq y xs = nubBy' ys xs 16.11/6.23 | otherwise = y : nubBy' ys (y : xs); 16.11/6.23 }; 16.11/6.23 16.11/6.23 union :: Eq a => [a] -> [a] -> [a]; 16.11/6.23 union = unionBy (==); 16.11/6.23 16.11/6.23 unionBy :: (a -> a -> Bool) -> [a] -> [a] -> [a]; 16.11/6.23 unionBy eq xs ys = xs ++ foldl (flip (deleteBy eq)) (nubBy eq ys) xs; 16.11/6.23 16.11/6.23 } 16.11/6.23 module Main where { 16.11/6.23 import qualified List; 16.11/6.23 import qualified Maybe; 16.11/6.23 import qualified Prelude; 16.11/6.23 } 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (5) COR (EQUIVALENT) 16.11/6.23 Cond Reductions: 16.11/6.23 The following Function with conditions 16.11/6.23 "undefined |Falseundefined; 16.11/6.23 " 16.11/6.23 is transformed to 16.11/6.23 "undefined = undefined1; 16.11/6.23 " 16.11/6.23 "undefined0 True = undefined; 16.11/6.23 " 16.11/6.23 "undefined1 = undefined0 False; 16.11/6.23 " 16.11/6.23 The following Function with conditions 16.11/6.23 "nubBy' [] wu = []; 16.11/6.23 nubBy' (y : ys) xs|elem_by eq y xsnubBy' ys xs|otherwisey : nubBy' ys (y : xs); 16.11/6.23 " 16.11/6.23 is transformed to 16.11/6.23 "nubBy' [] wu = nubBy'3 [] wu; 16.11/6.23 nubBy' (y : ys) xs = nubBy'2 (y : ys) xs; 16.11/6.23 " 16.11/6.23 "nubBy'0 y ys xs True = y : nubBy' ys (y : xs); 16.11/6.23 " 16.11/6.23 "nubBy'1 y ys xs True = nubBy' ys xs; 16.11/6.23 nubBy'1 y ys xs False = nubBy'0 y ys xs otherwise; 16.11/6.23 " 16.11/6.23 "nubBy'2 (y : ys) xs = nubBy'1 y ys xs (elem_by eq y xs); 16.11/6.23 " 16.11/6.23 "nubBy'3 [] wu = []; 16.11/6.23 nubBy'3 wz xu = nubBy'2 wz xu; 16.11/6.23 " 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (6) 16.11/6.23 Obligation: 16.11/6.23 mainModule Main 16.11/6.23 module Maybe where { 16.11/6.23 import qualified List; 16.11/6.23 import qualified Main; 16.11/6.23 import qualified Prelude; 16.11/6.23 } 16.11/6.23 module List where { 16.11/6.23 import qualified Main; 16.11/6.23 import qualified Maybe; 16.11/6.23 import qualified Prelude; 16.11/6.23 deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]; 16.11/6.23 deleteBy wv ww [] = []; 16.11/6.23 deleteBy eq x (y : ys) = deleteBy0 ys y eq x (x `eq` y); 16.11/6.23 16.11/6.23 deleteBy0 ys y eq x True = ys; 16.11/6.23 deleteBy0 ys y eq x False = y : deleteBy eq x ys; 16.11/6.23 16.11/6.23 elem_by :: (a -> a -> Bool) -> a -> [a] -> Bool; 16.11/6.23 elem_by vy vz [] = False; 16.11/6.23 elem_by eq y (x : xs) = x `eq` y || elem_by eq y xs; 16.11/6.23 16.11/6.23 nubBy :: (a -> a -> Bool) -> [a] -> [a]; 16.11/6.23 nubBy eq l = nubBy' l [] where { 16.11/6.23 nubBy' [] wu = nubBy'3 [] wu; 16.11/6.23 nubBy' (y : ys) xs = nubBy'2 (y : ys) xs; 16.11/6.23 nubBy'0 y ys xs True = y : nubBy' ys (y : xs); 16.11/6.23 nubBy'1 y ys xs True = nubBy' ys xs; 16.11/6.23 nubBy'1 y ys xs False = nubBy'0 y ys xs otherwise; 16.11/6.23 nubBy'2 (y : ys) xs = nubBy'1 y ys xs (elem_by eq y xs); 16.11/6.23 nubBy'3 [] wu = []; 16.11/6.23 nubBy'3 wz xu = nubBy'2 wz xu; 16.11/6.23 }; 16.11/6.23 16.11/6.23 union :: Eq a => [a] -> [a] -> [a]; 16.11/6.23 union = unionBy (==); 16.11/6.23 16.11/6.23 unionBy :: (a -> a -> Bool) -> [a] -> [a] -> [a]; 16.11/6.23 unionBy eq xs ys = xs ++ foldl (flip (deleteBy eq)) (nubBy eq ys) xs; 16.11/6.23 16.11/6.23 } 16.11/6.23 module Main where { 16.11/6.23 import qualified List; 16.11/6.23 import qualified Maybe; 16.11/6.23 import qualified Prelude; 16.11/6.23 } 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (7) LetRed (EQUIVALENT) 16.11/6.23 Let/Where Reductions: 16.11/6.23 The bindings of the following Let/Where expression 16.11/6.23 "nubBy' l [] where { 16.11/6.23 nubBy' [] wu = nubBy'3 [] wu; 16.11/6.23 nubBy' (y : ys) xs = nubBy'2 (y : ys) xs; 16.11/6.23 ; 16.11/6.23 nubBy'0 y ys xs True = y : nubBy' ys (y : xs); 16.11/6.23 ; 16.11/6.23 nubBy'1 y ys xs True = nubBy' ys xs; 16.11/6.23 nubBy'1 y ys xs False = nubBy'0 y ys xs otherwise; 16.11/6.23 ; 16.11/6.23 nubBy'2 (y : ys) xs = nubBy'1 y ys xs (elem_by eq y xs); 16.11/6.23 ; 16.11/6.23 nubBy'3 [] wu = []; 16.11/6.23 nubBy'3 wz xu = nubBy'2 wz xu; 16.11/6.23 } 16.11/6.23 " 16.11/6.23 are unpacked to the following functions on top level 16.11/6.23 "nubByNubBy'3 xv [] wu = []; 16.11/6.23 nubByNubBy'3 xv wz xu = nubByNubBy'2 xv wz xu; 16.11/6.23 " 16.11/6.23 "nubByNubBy'0 xv y ys xs True = y : nubByNubBy' xv ys (y : xs); 16.11/6.23 " 16.11/6.23 "nubByNubBy'2 xv (y : ys) xs = nubByNubBy'1 xv y ys xs (elem_by xv y xs); 16.11/6.23 " 16.11/6.23 "nubByNubBy' xv [] wu = nubByNubBy'3 xv [] wu; 16.11/6.23 nubByNubBy' xv (y : ys) xs = nubByNubBy'2 xv (y : ys) xs; 16.11/6.23 " 16.11/6.23 "nubByNubBy'1 xv y ys xs True = nubByNubBy' xv ys xs; 16.11/6.23 nubByNubBy'1 xv y ys xs False = nubByNubBy'0 xv y ys xs otherwise; 16.11/6.23 " 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (8) 16.11/6.23 Obligation: 16.11/6.23 mainModule Main 16.11/6.23 module Maybe where { 16.11/6.23 import qualified List; 16.11/6.23 import qualified Main; 16.11/6.23 import qualified Prelude; 16.11/6.23 } 16.11/6.23 module List where { 16.11/6.23 import qualified Main; 16.11/6.23 import qualified Maybe; 16.11/6.23 import qualified Prelude; 16.11/6.23 deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]; 16.11/6.23 deleteBy wv ww [] = []; 16.11/6.23 deleteBy eq x (y : ys) = deleteBy0 ys y eq x (x `eq` y); 16.11/6.23 16.11/6.23 deleteBy0 ys y eq x True = ys; 16.11/6.23 deleteBy0 ys y eq x False = y : deleteBy eq x ys; 16.11/6.23 16.11/6.23 elem_by :: (a -> a -> Bool) -> a -> [a] -> Bool; 16.11/6.23 elem_by vy vz [] = False; 16.11/6.23 elem_by eq y (x : xs) = x `eq` y || elem_by eq y xs; 16.11/6.23 16.11/6.23 nubBy :: (a -> a -> Bool) -> [a] -> [a]; 16.11/6.23 nubBy eq l = nubByNubBy' eq l []; 16.11/6.23 16.11/6.23 nubByNubBy' xv [] wu = nubByNubBy'3 xv [] wu; 16.11/6.23 nubByNubBy' xv (y : ys) xs = nubByNubBy'2 xv (y : ys) xs; 16.11/6.23 16.11/6.23 nubByNubBy'0 xv y ys xs True = y : nubByNubBy' xv ys (y : xs); 16.11/6.23 16.11/6.23 nubByNubBy'1 xv y ys xs True = nubByNubBy' xv ys xs; 16.11/6.23 nubByNubBy'1 xv y ys xs False = nubByNubBy'0 xv y ys xs otherwise; 16.11/6.23 16.11/6.23 nubByNubBy'2 xv (y : ys) xs = nubByNubBy'1 xv y ys xs (elem_by xv y xs); 16.11/6.23 16.11/6.23 nubByNubBy'3 xv [] wu = []; 16.11/6.23 nubByNubBy'3 xv wz xu = nubByNubBy'2 xv wz xu; 16.11/6.23 16.11/6.23 union :: Eq a => [a] -> [a] -> [a]; 16.11/6.23 union = unionBy (==); 16.11/6.23 16.11/6.23 unionBy :: (a -> a -> Bool) -> [a] -> [a] -> [a]; 16.11/6.23 unionBy eq xs ys = xs ++ foldl (flip (deleteBy eq)) (nubBy eq ys) xs; 16.11/6.23 16.11/6.23 } 16.11/6.23 module Main where { 16.11/6.23 import qualified List; 16.11/6.23 import qualified Maybe; 16.11/6.23 import qualified Prelude; 16.11/6.23 } 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (9) Narrow (SOUND) 16.11/6.23 Haskell To QDPs 16.11/6.23 16.11/6.23 digraph dp_graph { 16.11/6.23 node [outthreshold=100, inthreshold=100];1[label="List.union",fontsize=16,color="grey",shape="box"];1 -> 3[label="",style="dashed", color="grey", weight=3]; 16.11/6.23 3[label="List.union xw3",fontsize=16,color="grey",shape="box"];3 -> 4[label="",style="dashed", color="grey", weight=3]; 16.11/6.23 4[label="List.union xw3 xw4",fontsize=16,color="black",shape="triangle"];4 -> 5[label="",style="solid", color="black", weight=3]; 16.11/6.23 5[label="List.unionBy (==) xw3 xw4",fontsize=16,color="black",shape="box"];5 -> 6[label="",style="solid", color="black", weight=3]; 16.11/6.23 6[label="xw3 ++ foldl (flip (List.deleteBy (==))) (List.nubBy (==) xw4) xw3",fontsize=16,color="burlywood",shape="box"];2440[label="xw3/xw30 : xw31",fontsize=10,color="white",style="solid",shape="box"];6 -> 2440[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2440 -> 7[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 2441[label="xw3/[]",fontsize=10,color="white",style="solid",shape="box"];6 -> 2441[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2441 -> 8[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 7[label="(xw30 : xw31) ++ foldl (flip (List.deleteBy (==))) (List.nubBy (==) xw4) (xw30 : xw31)",fontsize=16,color="black",shape="box"];7 -> 9[label="",style="solid", color="black", weight=3]; 16.11/6.23 8[label="[] ++ foldl (flip (List.deleteBy (==))) (List.nubBy (==) xw4) []",fontsize=16,color="black",shape="box"];8 -> 10[label="",style="solid", color="black", weight=3]; 16.11/6.23 9[label="xw30 : xw31 ++ foldl (flip (List.deleteBy (==))) (List.nubBy (==) xw4) (xw30 : xw31)",fontsize=16,color="green",shape="box"];9 -> 11[label="",style="dashed", color="green", weight=3]; 16.11/6.23 10[label="foldl (flip (List.deleteBy (==))) (List.nubBy (==) xw4) []",fontsize=16,color="black",shape="box"];10 -> 12[label="",style="solid", color="black", weight=3]; 16.11/6.23 11 -> 106[label="",style="dashed", color="red", weight=0]; 16.11/6.23 11[label="xw31 ++ foldl (flip (List.deleteBy (==))) (List.nubBy (==) xw4) (xw30 : xw31)",fontsize=16,color="magenta"];11 -> 107[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 11 -> 108[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 11 -> 109[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 11 -> 110[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 12[label="List.nubBy (==) xw4",fontsize=16,color="black",shape="triangle"];12 -> 15[label="",style="solid", color="black", weight=3]; 16.11/6.23 107 -> 12[label="",style="dashed", color="red", weight=0]; 16.11/6.23 107[label="List.nubBy (==) xw4",fontsize=16,color="magenta"];108[label="xw31",fontsize=16,color="green",shape="box"];109[label="xw31",fontsize=16,color="green",shape="box"];110[label="xw30",fontsize=16,color="green",shape="box"];106[label="xw8 ++ foldl (flip (List.deleteBy (==))) xw9 (xw10 : xw11)",fontsize=16,color="burlywood",shape="triangle"];2442[label="xw8/xw80 : xw81",fontsize=10,color="white",style="solid",shape="box"];106 -> 2442[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2442 -> 135[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 2443[label="xw8/[]",fontsize=10,color="white",style="solid",shape="box"];106 -> 2443[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2443 -> 136[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 15[label="List.nubByNubBy' (==) xw4 []",fontsize=16,color="burlywood",shape="box"];2444[label="xw4/xw40 : xw41",fontsize=10,color="white",style="solid",shape="box"];15 -> 2444[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2444 -> 18[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 2445[label="xw4/[]",fontsize=10,color="white",style="solid",shape="box"];15 -> 2445[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2445 -> 19[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 135[label="(xw80 : xw81) ++ foldl (flip (List.deleteBy (==))) xw9 (xw10 : xw11)",fontsize=16,color="black",shape="box"];135 -> 138[label="",style="solid", color="black", weight=3]; 16.11/6.23 136[label="[] ++ foldl (flip (List.deleteBy (==))) xw9 (xw10 : xw11)",fontsize=16,color="black",shape="box"];136 -> 139[label="",style="solid", color="black", weight=3]; 16.11/6.23 18[label="List.nubByNubBy' (==) (xw40 : xw41) []",fontsize=16,color="black",shape="box"];18 -> 23[label="",style="solid", color="black", weight=3]; 16.11/6.23 19[label="List.nubByNubBy' (==) [] []",fontsize=16,color="black",shape="box"];19 -> 24[label="",style="solid", color="black", weight=3]; 16.11/6.23 138[label="xw80 : xw81 ++ foldl (flip (List.deleteBy (==))) xw9 (xw10 : xw11)",fontsize=16,color="green",shape="box"];138 -> 142[label="",style="dashed", color="green", weight=3]; 16.11/6.23 139[label="foldl (flip (List.deleteBy (==))) xw9 (xw10 : xw11)",fontsize=16,color="black",shape="box"];139 -> 143[label="",style="solid", color="black", weight=3]; 16.11/6.23 23[label="List.nubByNubBy'2 (==) (xw40 : xw41) []",fontsize=16,color="black",shape="box"];23 -> 28[label="",style="solid", color="black", weight=3]; 16.11/6.23 24[label="List.nubByNubBy'3 (==) [] []",fontsize=16,color="black",shape="box"];24 -> 29[label="",style="solid", color="black", weight=3]; 16.11/6.23 142 -> 106[label="",style="dashed", color="red", weight=0]; 16.11/6.23 142[label="xw81 ++ foldl (flip (List.deleteBy (==))) xw9 (xw10 : xw11)",fontsize=16,color="magenta"];142 -> 148[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 143[label="foldl (flip (List.deleteBy (==))) (flip (List.deleteBy (==)) xw9 xw10) xw11",fontsize=16,color="burlywood",shape="triangle"];2446[label="xw11/xw110 : xw111",fontsize=10,color="white",style="solid",shape="box"];143 -> 2446[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2446 -> 149[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 2447[label="xw11/[]",fontsize=10,color="white",style="solid",shape="box"];143 -> 2447[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2447 -> 150[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 28[label="List.nubByNubBy'1 (==) xw40 xw41 [] (List.elem_by (==) xw40 [])",fontsize=16,color="black",shape="box"];28 -> 33[label="",style="solid", color="black", weight=3]; 16.11/6.23 29[label="[]",fontsize=16,color="green",shape="box"];148[label="xw81",fontsize=16,color="green",shape="box"];149[label="foldl (flip (List.deleteBy (==))) (flip (List.deleteBy (==)) xw9 xw10) (xw110 : xw111)",fontsize=16,color="black",shape="box"];149 -> 155[label="",style="solid", color="black", weight=3]; 16.11/6.23 150[label="foldl (flip (List.deleteBy (==))) (flip (List.deleteBy (==)) xw9 xw10) []",fontsize=16,color="black",shape="box"];150 -> 156[label="",style="solid", color="black", weight=3]; 16.11/6.23 33[label="List.nubByNubBy'1 (==) xw40 xw41 [] False",fontsize=16,color="black",shape="box"];33 -> 37[label="",style="solid", color="black", weight=3]; 16.11/6.23 155 -> 143[label="",style="dashed", color="red", weight=0]; 16.11/6.23 155[label="foldl (flip (List.deleteBy (==))) (flip (List.deleteBy (==)) (flip (List.deleteBy (==)) xw9 xw10) xw110) xw111",fontsize=16,color="magenta"];155 -> 162[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 155 -> 163[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 155 -> 164[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 156[label="flip (List.deleteBy (==)) xw9 xw10",fontsize=16,color="black",shape="triangle"];156 -> 165[label="",style="solid", color="black", weight=3]; 16.11/6.23 37[label="List.nubByNubBy'0 (==) xw40 xw41 [] otherwise",fontsize=16,color="black",shape="box"];37 -> 42[label="",style="solid", color="black", weight=3]; 16.11/6.23 162 -> 156[label="",style="dashed", color="red", weight=0]; 16.11/6.23 162[label="flip (List.deleteBy (==)) xw9 xw10",fontsize=16,color="magenta"];163[label="xw111",fontsize=16,color="green",shape="box"];164[label="xw110",fontsize=16,color="green",shape="box"];165[label="List.deleteBy (==) xw10 xw9",fontsize=16,color="burlywood",shape="triangle"];2448[label="xw9/xw90 : xw91",fontsize=10,color="white",style="solid",shape="box"];165 -> 2448[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2448 -> 173[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 2449[label="xw9/[]",fontsize=10,color="white",style="solid",shape="box"];165 -> 2449[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2449 -> 174[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 42[label="List.nubByNubBy'0 (==) xw40 xw41 [] True",fontsize=16,color="black",shape="box"];42 -> 49[label="",style="solid", color="black", weight=3]; 16.11/6.23 173[label="List.deleteBy (==) xw10 (xw90 : xw91)",fontsize=16,color="black",shape="box"];173 -> 183[label="",style="solid", color="black", weight=3]; 16.11/6.23 174[label="List.deleteBy (==) xw10 []",fontsize=16,color="black",shape="box"];174 -> 184[label="",style="solid", color="black", weight=3]; 16.11/6.23 49[label="xw40 : List.nubByNubBy' (==) xw41 (xw40 : [])",fontsize=16,color="green",shape="box"];49 -> 54[label="",style="dashed", color="green", weight=3]; 16.11/6.23 183 -> 194[label="",style="dashed", color="red", weight=0]; 16.11/6.23 183[label="List.deleteBy0 xw91 xw90 (==) xw10 ((==) xw10 xw90)",fontsize=16,color="magenta"];183 -> 195[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 183 -> 196[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 183 -> 197[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 183 -> 198[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 184[label="[]",fontsize=16,color="green",shape="box"];54[label="List.nubByNubBy' (==) xw41 (xw40 : [])",fontsize=16,color="burlywood",shape="box"];2450[label="xw41/xw410 : xw411",fontsize=10,color="white",style="solid",shape="box"];54 -> 2450[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2450 -> 58[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 2451[label="xw41/[]",fontsize=10,color="white",style="solid",shape="box"];54 -> 2451[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2451 -> 59[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 195[label="xw91",fontsize=16,color="green",shape="box"];196[label="xw90",fontsize=16,color="green",shape="box"];197[label="xw10",fontsize=16,color="green",shape="box"];198[label="(==) xw10 xw90",fontsize=16,color="blue",shape="box"];2452[label="== :: Char -> Char -> Bool",fontsize=10,color="white",style="solid",shape="box"];198 -> 2452[label="",style="solid", color="blue", weight=9]; 16.11/6.23 2452 -> 199[label="",style="solid", color="blue", weight=3]; 16.11/6.23 2453[label="== :: () -> () -> Bool",fontsize=10,color="white",style="solid",shape="box"];198 -> 2453[label="",style="solid", color="blue", weight=9]; 16.11/6.23 2453 -> 200[label="",style="solid", color="blue", weight=3]; 16.11/6.23 2454[label="== :: ([] a) -> ([] a) -> Bool",fontsize=10,color="white",style="solid",shape="box"];198 -> 2454[label="",style="solid", color="blue", weight=9]; 16.11/6.23 2454 -> 201[label="",style="solid", color="blue", weight=3]; 16.11/6.23 2455[label="== :: Int -> Int -> Bool",fontsize=10,color="white",style="solid",shape="box"];198 -> 2455[label="",style="solid", color="blue", weight=9]; 16.11/6.23 2455 -> 202[label="",style="solid", color="blue", weight=3]; 16.11/6.23 2456[label="== :: Ordering -> Ordering -> Bool",fontsize=10,color="white",style="solid",shape="box"];198 -> 2456[label="",style="solid", color="blue", weight=9]; 16.11/6.23 2456 -> 203[label="",style="solid", color="blue", weight=3]; 16.11/6.23 2457[label="== :: ((@2) a b) -> ((@2) a b) -> Bool",fontsize=10,color="white",style="solid",shape="box"];198 -> 2457[label="",style="solid", color="blue", weight=9]; 16.11/6.23 2457 -> 204[label="",style="solid", color="blue", weight=3]; 16.11/6.23 2458[label="== :: Float -> Float -> Bool",fontsize=10,color="white",style="solid",shape="box"];198 -> 2458[label="",style="solid", color="blue", weight=9]; 16.11/6.23 2458 -> 205[label="",style="solid", color="blue", weight=3]; 16.11/6.23 2459[label="== :: Bool -> Bool -> Bool",fontsize=10,color="white",style="solid",shape="box"];198 -> 2459[label="",style="solid", color="blue", weight=9]; 16.11/6.23 2459 -> 206[label="",style="solid", color="blue", weight=3]; 16.11/6.23 2460[label="== :: Integer -> Integer -> Bool",fontsize=10,color="white",style="solid",shape="box"];198 -> 2460[label="",style="solid", color="blue", weight=9]; 16.11/6.23 2460 -> 207[label="",style="solid", color="blue", weight=3]; 16.11/6.23 2461[label="== :: (Ratio a) -> (Ratio a) -> Bool",fontsize=10,color="white",style="solid",shape="box"];198 -> 2461[label="",style="solid", color="blue", weight=9]; 16.11/6.23 2461 -> 208[label="",style="solid", color="blue", weight=3]; 16.11/6.23 2462[label="== :: Double -> Double -> Bool",fontsize=10,color="white",style="solid",shape="box"];198 -> 2462[label="",style="solid", color="blue", weight=9]; 16.11/6.23 2462 -> 209[label="",style="solid", color="blue", weight=3]; 16.11/6.23 2463[label="== :: (Either a b) -> (Either a b) -> Bool",fontsize=10,color="white",style="solid",shape="box"];198 -> 2463[label="",style="solid", color="blue", weight=9]; 16.11/6.23 2463 -> 210[label="",style="solid", color="blue", weight=3]; 16.11/6.23 2464[label="== :: (Maybe a) -> (Maybe a) -> Bool",fontsize=10,color="white",style="solid",shape="box"];198 -> 2464[label="",style="solid", color="blue", weight=9]; 16.11/6.23 2464 -> 211[label="",style="solid", color="blue", weight=3]; 16.11/6.23 2465[label="== :: ((@3) a b c) -> ((@3) a b c) -> Bool",fontsize=10,color="white",style="solid",shape="box"];198 -> 2465[label="",style="solid", color="blue", weight=9]; 16.11/6.23 2465 -> 212[label="",style="solid", color="blue", weight=3]; 16.11/6.23 194[label="List.deleteBy0 xw17 xw18 (==) xw19 xw20",fontsize=16,color="burlywood",shape="triangle"];2466[label="xw20/False",fontsize=10,color="white",style="solid",shape="box"];194 -> 2466[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2466 -> 213[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 2467[label="xw20/True",fontsize=10,color="white",style="solid",shape="box"];194 -> 2467[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2467 -> 214[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 58[label="List.nubByNubBy' (==) (xw410 : xw411) (xw40 : [])",fontsize=16,color="black",shape="box"];58 -> 66[label="",style="solid", color="black", weight=3]; 16.11/6.23 59[label="List.nubByNubBy' (==) [] (xw40 : [])",fontsize=16,color="black",shape="box"];59 -> 67[label="",style="solid", color="black", weight=3]; 16.11/6.23 199[label="(==) xw10 xw90",fontsize=16,color="black",shape="box"];199 -> 226[label="",style="solid", color="black", weight=3]; 16.11/6.23 200[label="(==) xw10 xw90",fontsize=16,color="black",shape="box"];200 -> 227[label="",style="solid", color="black", weight=3]; 16.11/6.23 201[label="(==) xw10 xw90",fontsize=16,color="black",shape="box"];201 -> 228[label="",style="solid", color="black", weight=3]; 16.11/6.23 202[label="(==) xw10 xw90",fontsize=16,color="black",shape="box"];202 -> 229[label="",style="solid", color="black", weight=3]; 16.11/6.23 203[label="(==) xw10 xw90",fontsize=16,color="black",shape="box"];203 -> 230[label="",style="solid", color="black", weight=3]; 16.11/6.23 204[label="(==) xw10 xw90",fontsize=16,color="black",shape="box"];204 -> 231[label="",style="solid", color="black", weight=3]; 16.11/6.23 205[label="(==) xw10 xw90",fontsize=16,color="black",shape="box"];205 -> 232[label="",style="solid", color="black", weight=3]; 16.11/6.23 206[label="(==) xw10 xw90",fontsize=16,color="black",shape="box"];206 -> 233[label="",style="solid", color="black", weight=3]; 16.11/6.23 207[label="(==) xw10 xw90",fontsize=16,color="black",shape="box"];207 -> 234[label="",style="solid", color="black", weight=3]; 16.11/6.23 208[label="(==) xw10 xw90",fontsize=16,color="black",shape="box"];208 -> 235[label="",style="solid", color="black", weight=3]; 16.11/6.23 209[label="(==) xw10 xw90",fontsize=16,color="black",shape="box"];209 -> 236[label="",style="solid", color="black", weight=3]; 16.11/6.23 210[label="(==) xw10 xw90",fontsize=16,color="black",shape="box"];210 -> 237[label="",style="solid", color="black", weight=3]; 16.11/6.23 211[label="(==) xw10 xw90",fontsize=16,color="black",shape="box"];211 -> 238[label="",style="solid", color="black", weight=3]; 16.11/6.23 212[label="(==) xw10 xw90",fontsize=16,color="black",shape="box"];212 -> 239[label="",style="solid", color="black", weight=3]; 16.11/6.23 213[label="List.deleteBy0 xw17 xw18 (==) xw19 False",fontsize=16,color="black",shape="box"];213 -> 240[label="",style="solid", color="black", weight=3]; 16.11/6.23 214[label="List.deleteBy0 xw17 xw18 (==) xw19 True",fontsize=16,color="black",shape="box"];214 -> 241[label="",style="solid", color="black", weight=3]; 16.11/6.23 66[label="List.nubByNubBy'2 (==) (xw410 : xw411) (xw40 : [])",fontsize=16,color="black",shape="box"];66 -> 72[label="",style="solid", color="black", weight=3]; 16.11/6.23 67[label="List.nubByNubBy'3 (==) [] (xw40 : [])",fontsize=16,color="black",shape="box"];67 -> 73[label="",style="solid", color="black", weight=3]; 16.11/6.23 226[label="primEqChar xw10 xw90",fontsize=16,color="burlywood",shape="triangle"];2468[label="xw10/Char xw100",fontsize=10,color="white",style="solid",shape="box"];226 -> 2468[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2468 -> 253[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 227[label="error []",fontsize=16,color="red",shape="box"];228[label="error []",fontsize=16,color="red",shape="box"];229[label="error []",fontsize=16,color="red",shape="box"];230[label="error []",fontsize=16,color="red",shape="box"];231[label="error []",fontsize=16,color="red",shape="box"];232[label="error []",fontsize=16,color="red",shape="box"];233[label="error []",fontsize=16,color="red",shape="box"];234[label="error []",fontsize=16,color="red",shape="box"];235[label="error []",fontsize=16,color="red",shape="box"];236[label="error []",fontsize=16,color="red",shape="box"];237[label="error []",fontsize=16,color="red",shape="box"];238[label="error []",fontsize=16,color="red",shape="box"];239[label="error []",fontsize=16,color="red",shape="box"];240[label="xw18 : List.deleteBy (==) xw19 xw17",fontsize=16,color="green",shape="box"];240 -> 254[label="",style="dashed", color="green", weight=3]; 16.11/6.23 241[label="xw17",fontsize=16,color="green",shape="box"];72[label="List.nubByNubBy'1 (==) xw410 xw411 (xw40 : []) (List.elem_by (==) xw410 (xw40 : []))",fontsize=16,color="black",shape="box"];72 -> 78[label="",style="solid", color="black", weight=3]; 16.11/6.23 73[label="[]",fontsize=16,color="green",shape="box"];253[label="primEqChar (Char xw100) xw90",fontsize=16,color="burlywood",shape="box"];2469[label="xw90/Char xw900",fontsize=10,color="white",style="solid",shape="box"];253 -> 2469[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2469 -> 271[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 254 -> 165[label="",style="dashed", color="red", weight=0]; 16.11/6.23 254[label="List.deleteBy (==) xw19 xw17",fontsize=16,color="magenta"];254 -> 272[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 254 -> 273[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 78[label="List.nubByNubBy'1 (==) xw410 xw411 (xw40 : []) ((==) xw40 xw410 || List.elem_by (==) xw410 [])",fontsize=16,color="black",shape="box"];78 -> 89[label="",style="solid", color="black", weight=3]; 16.11/6.23 271[label="primEqChar (Char xw100) (Char xw900)",fontsize=16,color="black",shape="box"];271 -> 289[label="",style="solid", color="black", weight=3]; 16.11/6.23 272[label="xw17",fontsize=16,color="green",shape="box"];273[label="xw19",fontsize=16,color="green",shape="box"];89 -> 2402[label="",style="dashed", color="red", weight=0]; 16.11/6.23 89[label="List.nubByNubBy'1 primEqChar xw410 xw411 (xw40 : []) (primEqChar xw40 xw410 || List.elem_by primEqChar xw410 [])",fontsize=16,color="magenta"];89 -> 2403[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 89 -> 2404[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 89 -> 2405[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 89 -> 2406[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 89 -> 2407[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 89 -> 2408[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 289[label="primEqNat xw100 xw900",fontsize=16,color="burlywood",shape="triangle"];2470[label="xw100/Succ xw1000",fontsize=10,color="white",style="solid",shape="box"];289 -> 2470[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2470 -> 305[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 2471[label="xw100/Zero",fontsize=10,color="white",style="solid",shape="box"];289 -> 2471[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2471 -> 306[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 2403[label="[]",fontsize=16,color="green",shape="box"];2404[label="xw40",fontsize=16,color="green",shape="box"];2405[label="[]",fontsize=16,color="green",shape="box"];2406[label="xw411",fontsize=16,color="green",shape="box"];2407 -> 226[label="",style="dashed", color="red", weight=0]; 16.11/6.23 2407[label="primEqChar xw40 xw410",fontsize=16,color="magenta"];2407 -> 2410[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 2407 -> 2411[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 2408[label="xw410",fontsize=16,color="green",shape="box"];2402[label="List.nubByNubBy'1 primEqChar xw155 xw156 (xw157 : xw158) (xw161 || List.elem_by primEqChar xw155 xw160)",fontsize=16,color="burlywood",shape="triangle"];2472[label="xw161/False",fontsize=10,color="white",style="solid",shape="box"];2402 -> 2472[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2472 -> 2412[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 2473[label="xw161/True",fontsize=10,color="white",style="solid",shape="box"];2402 -> 2473[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2473 -> 2413[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 305[label="primEqNat (Succ xw1000) xw900",fontsize=16,color="burlywood",shape="box"];2474[label="xw900/Succ xw9000",fontsize=10,color="white",style="solid",shape="box"];305 -> 2474[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2474 -> 309[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 2475[label="xw900/Zero",fontsize=10,color="white",style="solid",shape="box"];305 -> 2475[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2475 -> 310[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 306[label="primEqNat Zero xw900",fontsize=16,color="burlywood",shape="box"];2476[label="xw900/Succ xw9000",fontsize=10,color="white",style="solid",shape="box"];306 -> 2476[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2476 -> 311[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 2477[label="xw900/Zero",fontsize=10,color="white",style="solid",shape="box"];306 -> 2477[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2477 -> 312[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 2410[label="xw410",fontsize=16,color="green",shape="box"];2411[label="xw40",fontsize=16,color="green",shape="box"];2412[label="List.nubByNubBy'1 primEqChar xw155 xw156 (xw157 : xw158) (False || List.elem_by primEqChar xw155 xw160)",fontsize=16,color="black",shape="box"];2412 -> 2414[label="",style="solid", color="black", weight=3]; 16.11/6.23 2413[label="List.nubByNubBy'1 primEqChar xw155 xw156 (xw157 : xw158) (True || List.elem_by primEqChar xw155 xw160)",fontsize=16,color="black",shape="box"];2413 -> 2415[label="",style="solid", color="black", weight=3]; 16.11/6.23 309[label="primEqNat (Succ xw1000) (Succ xw9000)",fontsize=16,color="black",shape="box"];309 -> 333[label="",style="solid", color="black", weight=3]; 16.11/6.23 310[label="primEqNat (Succ xw1000) Zero",fontsize=16,color="black",shape="box"];310 -> 334[label="",style="solid", color="black", weight=3]; 16.11/6.23 311[label="primEqNat Zero (Succ xw9000)",fontsize=16,color="black",shape="box"];311 -> 335[label="",style="solid", color="black", weight=3]; 16.11/6.23 312[label="primEqNat Zero Zero",fontsize=16,color="black",shape="box"];312 -> 336[label="",style="solid", color="black", weight=3]; 16.11/6.23 2414[label="List.nubByNubBy'1 primEqChar xw155 xw156 (xw157 : xw158) (List.elem_by primEqChar xw155 xw160)",fontsize=16,color="burlywood",shape="triangle"];2478[label="xw160/xw1600 : xw1601",fontsize=10,color="white",style="solid",shape="box"];2414 -> 2478[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2478 -> 2416[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 2479[label="xw160/[]",fontsize=10,color="white",style="solid",shape="box"];2414 -> 2479[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2479 -> 2417[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 2415[label="List.nubByNubBy'1 primEqChar xw155 xw156 (xw157 : xw158) True",fontsize=16,color="black",shape="box"];2415 -> 2418[label="",style="solid", color="black", weight=3]; 16.11/6.23 333 -> 289[label="",style="dashed", color="red", weight=0]; 16.11/6.23 333[label="primEqNat xw1000 xw9000",fontsize=16,color="magenta"];333 -> 350[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 333 -> 351[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 334[label="False",fontsize=16,color="green",shape="box"];335[label="False",fontsize=16,color="green",shape="box"];336[label="True",fontsize=16,color="green",shape="box"];2416[label="List.nubByNubBy'1 primEqChar xw155 xw156 (xw157 : xw158) (List.elem_by primEqChar xw155 (xw1600 : xw1601))",fontsize=16,color="black",shape="box"];2416 -> 2419[label="",style="solid", color="black", weight=3]; 16.11/6.23 2417[label="List.nubByNubBy'1 primEqChar xw155 xw156 (xw157 : xw158) (List.elem_by primEqChar xw155 [])",fontsize=16,color="black",shape="box"];2417 -> 2420[label="",style="solid", color="black", weight=3]; 16.11/6.23 2418[label="List.nubByNubBy' primEqChar xw156 (xw157 : xw158)",fontsize=16,color="burlywood",shape="triangle"];2480[label="xw156/xw1560 : xw1561",fontsize=10,color="white",style="solid",shape="box"];2418 -> 2480[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2480 -> 2421[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 2481[label="xw156/[]",fontsize=10,color="white",style="solid",shape="box"];2418 -> 2481[label="",style="solid", color="burlywood", weight=9]; 16.11/6.23 2481 -> 2422[label="",style="solid", color="burlywood", weight=3]; 16.11/6.23 350[label="xw9000",fontsize=16,color="green",shape="box"];351[label="xw1000",fontsize=16,color="green",shape="box"];2419 -> 2402[label="",style="dashed", color="red", weight=0]; 16.11/6.23 2419[label="List.nubByNubBy'1 primEqChar xw155 xw156 (xw157 : xw158) (primEqChar xw1600 xw155 || List.elem_by primEqChar xw155 xw1601)",fontsize=16,color="magenta"];2419 -> 2423[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 2419 -> 2424[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 2420[label="List.nubByNubBy'1 primEqChar xw155 xw156 (xw157 : xw158) False",fontsize=16,color="black",shape="box"];2420 -> 2425[label="",style="solid", color="black", weight=3]; 16.11/6.23 2421[label="List.nubByNubBy' primEqChar (xw1560 : xw1561) (xw157 : xw158)",fontsize=16,color="black",shape="box"];2421 -> 2426[label="",style="solid", color="black", weight=3]; 16.11/6.23 2422[label="List.nubByNubBy' primEqChar [] (xw157 : xw158)",fontsize=16,color="black",shape="box"];2422 -> 2427[label="",style="solid", color="black", weight=3]; 16.11/6.23 2423[label="xw1601",fontsize=16,color="green",shape="box"];2424 -> 226[label="",style="dashed", color="red", weight=0]; 16.11/6.23 2424[label="primEqChar xw1600 xw155",fontsize=16,color="magenta"];2424 -> 2428[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 2424 -> 2429[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 2425[label="List.nubByNubBy'0 primEqChar xw155 xw156 (xw157 : xw158) otherwise",fontsize=16,color="black",shape="box"];2425 -> 2430[label="",style="solid", color="black", weight=3]; 16.11/6.23 2426[label="List.nubByNubBy'2 primEqChar (xw1560 : xw1561) (xw157 : xw158)",fontsize=16,color="black",shape="box"];2426 -> 2431[label="",style="solid", color="black", weight=3]; 16.11/6.23 2427[label="List.nubByNubBy'3 primEqChar [] (xw157 : xw158)",fontsize=16,color="black",shape="box"];2427 -> 2432[label="",style="solid", color="black", weight=3]; 16.11/6.23 2428[label="xw155",fontsize=16,color="green",shape="box"];2429[label="xw1600",fontsize=16,color="green",shape="box"];2430[label="List.nubByNubBy'0 primEqChar xw155 xw156 (xw157 : xw158) True",fontsize=16,color="black",shape="box"];2430 -> 2433[label="",style="solid", color="black", weight=3]; 16.11/6.23 2431 -> 2414[label="",style="dashed", color="red", weight=0]; 16.11/6.23 2431[label="List.nubByNubBy'1 primEqChar xw1560 xw1561 (xw157 : xw158) (List.elem_by primEqChar xw1560 (xw157 : xw158))",fontsize=16,color="magenta"];2431 -> 2434[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 2431 -> 2435[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 2431 -> 2436[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 2432[label="[]",fontsize=16,color="green",shape="box"];2433[label="xw155 : List.nubByNubBy' primEqChar xw156 (xw155 : xw157 : xw158)",fontsize=16,color="green",shape="box"];2433 -> 2437[label="",style="dashed", color="green", weight=3]; 16.11/6.23 2434[label="xw157 : xw158",fontsize=16,color="green",shape="box"];2435[label="xw1561",fontsize=16,color="green",shape="box"];2436[label="xw1560",fontsize=16,color="green",shape="box"];2437 -> 2418[label="",style="dashed", color="red", weight=0]; 16.11/6.23 2437[label="List.nubByNubBy' primEqChar xw156 (xw155 : xw157 : xw158)",fontsize=16,color="magenta"];2437 -> 2438[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 2437 -> 2439[label="",style="dashed", color="magenta", weight=3]; 16.11/6.23 2438[label="xw155",fontsize=16,color="green",shape="box"];2439[label="xw157 : xw158",fontsize=16,color="green",shape="box"];} 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (10) 16.11/6.23 Complex Obligation (AND) 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (11) 16.11/6.23 Obligation: 16.11/6.23 Q DP problem: 16.11/6.23 The TRS P consists of the following rules: 16.11/6.23 16.11/6.23 new_psPs(:(xw80, xw81), xw9, xw10, xw11, ba) -> new_psPs(xw81, xw9, xw10, xw11, ba) 16.11/6.23 16.11/6.23 R is empty. 16.11/6.23 Q is empty. 16.11/6.23 We have to consider all minimal (P,Q,R)-chains. 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (12) QDPSizeChangeProof (EQUIVALENT) 16.11/6.23 By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 16.11/6.23 16.11/6.23 From the DPs we obtained the following set of size-change graphs: 16.11/6.23 *new_psPs(:(xw80, xw81), xw9, xw10, xw11, ba) -> new_psPs(xw81, xw9, xw10, xw11, ba) 16.11/6.23 The graph contains the following edges 1 > 1, 2 >= 2, 3 >= 3, 4 >= 4, 5 >= 5 16.11/6.23 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (13) 16.11/6.23 YES 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (14) 16.11/6.23 Obligation: 16.11/6.23 Q DP problem: 16.11/6.23 The TRS P consists of the following rules: 16.11/6.23 16.11/6.23 new_deleteBy0(xw17, xw18, xw19, False, ba) -> new_deleteBy(xw19, xw17, ba) 16.11/6.23 new_deleteBy(xw10, :(xw90, xw91), bb) -> new_deleteBy0(xw91, xw90, xw10, new_esEs(xw10, xw90, bb), bb) 16.11/6.23 16.11/6.23 The TRS R consists of the following rules: 16.11/6.23 16.11/6.23 new_esEs(xw10, xw90, ty_Char) -> new_primEqChar(xw10, xw90) 16.11/6.23 new_esEs(xw10, xw90, app(ty_Ratio, bf)) -> error([]) 16.11/6.23 new_primEqNat0(Zero, Zero) -> True 16.11/6.23 new_esEs(xw10, xw90, app(app(app(ty_@3, cb), cc), cd)) -> error([]) 16.11/6.23 new_primEqNat0(Succ(xw1000), Zero) -> False 16.11/6.23 new_primEqNat0(Zero, Succ(xw9000)) -> False 16.11/6.23 new_esEs(xw10, xw90, ty_Integer) -> error([]) 16.11/6.23 new_primEqChar(Char(xw100), Char(xw900)) -> new_primEqNat0(xw100, xw900) 16.11/6.23 new_esEs(xw10, xw90, app(ty_[], bc)) -> error([]) 16.11/6.23 new_esEs(xw10, xw90, ty_Ordering) -> error([]) 16.11/6.23 new_primEqNat0(Succ(xw1000), Succ(xw9000)) -> new_primEqNat0(xw1000, xw9000) 16.11/6.23 new_esEs(xw10, xw90, app(app(ty_@2, bd), be)) -> error([]) 16.11/6.23 new_esEs(xw10, xw90, ty_Float) -> error([]) 16.11/6.23 new_esEs(xw10, xw90, ty_Bool) -> error([]) 16.11/6.23 new_esEs(xw10, xw90, ty_@0) -> error([]) 16.11/6.23 new_esEs(xw10, xw90, ty_Int) -> error([]) 16.11/6.23 new_esEs(xw10, xw90, app(app(ty_Either, bg), bh)) -> error([]) 16.11/6.23 new_esEs(xw10, xw90, app(ty_Maybe, ca)) -> error([]) 16.11/6.23 new_esEs(xw10, xw90, ty_Double) -> error([]) 16.11/6.23 16.11/6.23 The set Q consists of the following terms: 16.11/6.23 16.11/6.23 new_esEs(x0, x1, app(ty_[], x2)) 16.11/6.23 new_esEs(x0, x1, ty_Float) 16.11/6.23 new_primEqNat0(Zero, Zero) 16.11/6.23 new_primEqNat0(Succ(x0), Succ(x1)) 16.11/6.23 new_primEqNat0(Succ(x0), Zero) 16.11/6.23 new_primEqNat0(Zero, Succ(x0)) 16.11/6.23 new_esEs(x0, x1, app(app(ty_@2, x2), x3)) 16.11/6.23 new_esEs(x0, x1, app(app(app(ty_@3, x2), x3), x4)) 16.11/6.23 new_esEs(x0, x1, ty_Char) 16.11/6.23 new_esEs(x0, x1, ty_Int) 16.11/6.23 new_esEs(x0, x1, ty_Ordering) 16.11/6.23 new_esEs(x0, x1, ty_Integer) 16.11/6.23 new_primEqChar(Char(x0), Char(x1)) 16.11/6.23 new_esEs(x0, x1, ty_@0) 16.11/6.23 new_esEs(x0, x1, ty_Double) 16.11/6.23 new_esEs(x0, x1, app(ty_Ratio, x2)) 16.11/6.23 new_esEs(x0, x1, app(app(ty_Either, x2), x3)) 16.11/6.23 new_esEs(x0, x1, ty_Bool) 16.11/6.23 new_esEs(x0, x1, app(ty_Maybe, x2)) 16.11/6.23 16.11/6.23 We have to consider all minimal (P,Q,R)-chains. 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (15) QDPSizeChangeProof (EQUIVALENT) 16.11/6.23 By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 16.11/6.23 16.11/6.23 From the DPs we obtained the following set of size-change graphs: 16.11/6.23 *new_deleteBy(xw10, :(xw90, xw91), bb) -> new_deleteBy0(xw91, xw90, xw10, new_esEs(xw10, xw90, bb), bb) 16.11/6.23 The graph contains the following edges 2 > 1, 2 > 2, 1 >= 3, 3 >= 5 16.11/6.23 16.11/6.23 16.11/6.23 *new_deleteBy0(xw17, xw18, xw19, False, ba) -> new_deleteBy(xw19, xw17, ba) 16.11/6.23 The graph contains the following edges 3 >= 1, 1 >= 2, 5 >= 3 16.11/6.23 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (16) 16.11/6.23 YES 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (17) 16.11/6.23 Obligation: 16.11/6.23 Q DP problem: 16.11/6.23 The TRS P consists of the following rules: 16.11/6.23 16.11/6.23 new_nubByNubBy'1(xw155, xw156, xw157, xw158, False, :(xw1600, xw1601)) -> new_nubByNubBy'1(xw155, xw156, xw157, xw158, new_primEqChar(xw1600, xw155), xw1601) 16.11/6.23 new_nubByNubBy'1(xw155, xw156, xw157, xw158, False, []) -> new_nubByNubBy'(xw156, xw155, :(xw157, xw158)) 16.11/6.23 new_nubByNubBy'(:(xw1560, xw1561), xw157, xw158) -> new_nubByNubBy'10(xw1560, xw1561, xw157, xw158, :(xw157, xw158)) 16.11/6.23 new_nubByNubBy'10(xw155, xw156, xw157, xw158, :(xw1600, xw1601)) -> new_nubByNubBy'1(xw155, xw156, xw157, xw158, new_primEqChar(xw1600, xw155), xw1601) 16.11/6.23 new_nubByNubBy'10(xw155, xw156, xw157, xw158, []) -> new_nubByNubBy'(xw156, xw155, :(xw157, xw158)) 16.11/6.23 new_nubByNubBy'1(xw155, :(xw1560, xw1561), xw157, xw158, True, xw160) -> new_nubByNubBy'10(xw1560, xw1561, xw157, xw158, :(xw157, xw158)) 16.11/6.23 16.11/6.23 The TRS R consists of the following rules: 16.11/6.23 16.11/6.23 new_primEqNat0(Zero, Zero) -> True 16.11/6.23 new_primEqNat0(Succ(xw1000), Zero) -> False 16.11/6.23 new_primEqNat0(Zero, Succ(xw9000)) -> False 16.11/6.23 new_primEqChar(Char(xw100), Char(xw900)) -> new_primEqNat0(xw100, xw900) 16.11/6.23 new_primEqNat0(Succ(xw1000), Succ(xw9000)) -> new_primEqNat0(xw1000, xw9000) 16.11/6.23 16.11/6.23 The set Q consists of the following terms: 16.11/6.23 16.11/6.23 new_primEqNat0(Zero, Zero) 16.11/6.23 new_primEqChar(Char(x0), Char(x1)) 16.11/6.23 new_primEqNat0(Succ(x0), Succ(x1)) 16.11/6.23 new_primEqNat0(Succ(x0), Zero) 16.11/6.23 new_primEqNat0(Zero, Succ(x0)) 16.11/6.23 16.11/6.23 We have to consider all minimal (P,Q,R)-chains. 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (18) DependencyGraphProof (EQUIVALENT) 16.11/6.23 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (19) 16.11/6.23 Obligation: 16.11/6.23 Q DP problem: 16.11/6.23 The TRS P consists of the following rules: 16.11/6.23 16.11/6.23 new_nubByNubBy'1(xw155, xw156, xw157, xw158, False, []) -> new_nubByNubBy'(xw156, xw155, :(xw157, xw158)) 16.11/6.23 new_nubByNubBy'(:(xw1560, xw1561), xw157, xw158) -> new_nubByNubBy'10(xw1560, xw1561, xw157, xw158, :(xw157, xw158)) 16.11/6.23 new_nubByNubBy'10(xw155, xw156, xw157, xw158, :(xw1600, xw1601)) -> new_nubByNubBy'1(xw155, xw156, xw157, xw158, new_primEqChar(xw1600, xw155), xw1601) 16.11/6.23 new_nubByNubBy'1(xw155, xw156, xw157, xw158, False, :(xw1600, xw1601)) -> new_nubByNubBy'1(xw155, xw156, xw157, xw158, new_primEqChar(xw1600, xw155), xw1601) 16.11/6.23 new_nubByNubBy'1(xw155, :(xw1560, xw1561), xw157, xw158, True, xw160) -> new_nubByNubBy'10(xw1560, xw1561, xw157, xw158, :(xw157, xw158)) 16.11/6.23 16.11/6.23 The TRS R consists of the following rules: 16.11/6.23 16.11/6.23 new_primEqNat0(Zero, Zero) -> True 16.11/6.23 new_primEqNat0(Succ(xw1000), Zero) -> False 16.11/6.23 new_primEqNat0(Zero, Succ(xw9000)) -> False 16.11/6.23 new_primEqChar(Char(xw100), Char(xw900)) -> new_primEqNat0(xw100, xw900) 16.11/6.23 new_primEqNat0(Succ(xw1000), Succ(xw9000)) -> new_primEqNat0(xw1000, xw9000) 16.11/6.23 16.11/6.23 The set Q consists of the following terms: 16.11/6.23 16.11/6.23 new_primEqNat0(Zero, Zero) 16.11/6.23 new_primEqChar(Char(x0), Char(x1)) 16.11/6.23 new_primEqNat0(Succ(x0), Succ(x1)) 16.11/6.23 new_primEqNat0(Succ(x0), Zero) 16.11/6.23 new_primEqNat0(Zero, Succ(x0)) 16.11/6.23 16.11/6.23 We have to consider all minimal (P,Q,R)-chains. 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (20) TransformationProof (EQUIVALENT) 16.11/6.23 By instantiating [LPAR04] the rule new_nubByNubBy'10(xw155, xw156, xw157, xw158, :(xw1600, xw1601)) -> new_nubByNubBy'1(xw155, xw156, xw157, xw158, new_primEqChar(xw1600, xw155), xw1601) we obtained the following new rules [LPAR04]: 16.11/6.23 16.11/6.23 (new_nubByNubBy'10(z0, z1, z2, z3, :(z2, z3)) -> new_nubByNubBy'1(z0, z1, z2, z3, new_primEqChar(z2, z0), z3),new_nubByNubBy'10(z0, z1, z2, z3, :(z2, z3)) -> new_nubByNubBy'1(z0, z1, z2, z3, new_primEqChar(z2, z0), z3)) 16.11/6.23 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (21) 16.11/6.23 Obligation: 16.11/6.23 Q DP problem: 16.11/6.23 The TRS P consists of the following rules: 16.11/6.23 16.11/6.23 new_nubByNubBy'1(xw155, xw156, xw157, xw158, False, []) -> new_nubByNubBy'(xw156, xw155, :(xw157, xw158)) 16.11/6.23 new_nubByNubBy'(:(xw1560, xw1561), xw157, xw158) -> new_nubByNubBy'10(xw1560, xw1561, xw157, xw158, :(xw157, xw158)) 16.11/6.23 new_nubByNubBy'1(xw155, xw156, xw157, xw158, False, :(xw1600, xw1601)) -> new_nubByNubBy'1(xw155, xw156, xw157, xw158, new_primEqChar(xw1600, xw155), xw1601) 16.11/6.23 new_nubByNubBy'1(xw155, :(xw1560, xw1561), xw157, xw158, True, xw160) -> new_nubByNubBy'10(xw1560, xw1561, xw157, xw158, :(xw157, xw158)) 16.11/6.23 new_nubByNubBy'10(z0, z1, z2, z3, :(z2, z3)) -> new_nubByNubBy'1(z0, z1, z2, z3, new_primEqChar(z2, z0), z3) 16.11/6.23 16.11/6.23 The TRS R consists of the following rules: 16.11/6.23 16.11/6.23 new_primEqNat0(Zero, Zero) -> True 16.11/6.23 new_primEqNat0(Succ(xw1000), Zero) -> False 16.11/6.23 new_primEqNat0(Zero, Succ(xw9000)) -> False 16.11/6.23 new_primEqChar(Char(xw100), Char(xw900)) -> new_primEqNat0(xw100, xw900) 16.11/6.23 new_primEqNat0(Succ(xw1000), Succ(xw9000)) -> new_primEqNat0(xw1000, xw9000) 16.11/6.23 16.11/6.23 The set Q consists of the following terms: 16.11/6.23 16.11/6.23 new_primEqNat0(Zero, Zero) 16.11/6.23 new_primEqChar(Char(x0), Char(x1)) 16.11/6.23 new_primEqNat0(Succ(x0), Succ(x1)) 16.11/6.23 new_primEqNat0(Succ(x0), Zero) 16.11/6.23 new_primEqNat0(Zero, Succ(x0)) 16.11/6.23 16.11/6.23 We have to consider all minimal (P,Q,R)-chains. 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (22) QDPSizeChangeProof (EQUIVALENT) 16.11/6.23 By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 16.11/6.23 16.11/6.23 From the DPs we obtained the following set of size-change graphs: 16.11/6.23 *new_nubByNubBy'(:(xw1560, xw1561), xw157, xw158) -> new_nubByNubBy'10(xw1560, xw1561, xw157, xw158, :(xw157, xw158)) 16.11/6.23 The graph contains the following edges 1 > 1, 1 > 2, 2 >= 3, 3 >= 4 16.11/6.23 16.11/6.23 16.11/6.23 *new_nubByNubBy'10(z0, z1, z2, z3, :(z2, z3)) -> new_nubByNubBy'1(z0, z1, z2, z3, new_primEqChar(z2, z0), z3) 16.11/6.23 The graph contains the following edges 1 >= 1, 2 >= 2, 3 >= 3, 5 > 3, 4 >= 4, 5 > 4, 4 >= 6, 5 > 6 16.11/6.23 16.11/6.23 16.11/6.23 *new_nubByNubBy'1(xw155, xw156, xw157, xw158, False, :(xw1600, xw1601)) -> new_nubByNubBy'1(xw155, xw156, xw157, xw158, new_primEqChar(xw1600, xw155), xw1601) 16.11/6.23 The graph contains the following edges 1 >= 1, 2 >= 2, 3 >= 3, 4 >= 4, 6 > 6 16.11/6.23 16.11/6.23 16.11/6.23 *new_nubByNubBy'1(xw155, xw156, xw157, xw158, False, []) -> new_nubByNubBy'(xw156, xw155, :(xw157, xw158)) 16.11/6.23 The graph contains the following edges 2 >= 1, 1 >= 2 16.11/6.23 16.11/6.23 16.11/6.23 *new_nubByNubBy'1(xw155, :(xw1560, xw1561), xw157, xw158, True, xw160) -> new_nubByNubBy'10(xw1560, xw1561, xw157, xw158, :(xw157, xw158)) 16.11/6.23 The graph contains the following edges 2 > 1, 2 > 2, 3 >= 3, 4 >= 4 16.11/6.23 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (23) 16.11/6.23 YES 16.11/6.23 16.11/6.23 ---------------------------------------- 16.11/6.23 16.11/6.23 (24) 16.11/6.23 Obligation: 16.11/6.23 Q DP problem: 16.11/6.23 The TRS P consists of the following rules: 16.11/6.23 16.11/6.23 new_foldl(xw9, xw10, :(xw110, xw111), ba) -> new_foldl(new_flip(xw9, xw10, ba), xw110, xw111, ba) 16.11/6.23 16.11/6.23 The TRS R consists of the following rules: 16.11/6.23 16.11/6.23 new_primEqNat0(Zero, Zero) -> True 16.11/6.23 new_esEs(xw10, xw90, app(ty_Ratio, be)) -> error([]) 16.11/6.23 new_esEs(xw10, xw90, ty_Integer) -> error([]) 16.11/6.23 new_primEqChar(Char(xw100), Char(xw900)) -> new_primEqNat0(xw100, xw900) 16.11/6.23 new_esEs(xw10, xw90, app(app(ty_@2, bc), bd)) -> error([]) 16.11/6.23 new_esEs(xw10, xw90, ty_@0) -> error([]) 16.11/6.23 new_esEs(xw10, xw90, ty_Double) -> error([]) 16.11/6.23 new_deleteBy1(xw10, :(xw90, xw91), ba) -> new_deleteBy00(xw91, xw90, xw10, new_esEs(xw10, xw90, ba), ba) 16.11/6.23 new_deleteBy00(xw17, xw18, xw19, True, cd) -> xw17 16.11/6.23 new_esEs(xw10, xw90, ty_Char) -> new_primEqChar(xw10, xw90) 16.11/6.23 new_primEqNat0(Succ(xw1000), Zero) -> False 16.11/6.23 new_primEqNat0(Zero, Succ(xw9000)) -> False 16.11/6.23 new_esEs(xw10, xw90, app(app(app(ty_@3, ca), cb), cc)) -> error([]) 16.11/6.23 new_flip(xw9, xw10, ba) -> new_deleteBy1(xw10, xw9, ba) 16.11/6.24 new_esEs(xw10, xw90, app(ty_[], bb)) -> error([]) 16.11/6.24 new_primEqNat0(Succ(xw1000), Succ(xw9000)) -> new_primEqNat0(xw1000, xw9000) 16.11/6.24 new_esEs(xw10, xw90, ty_Ordering) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Float) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Bool) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Int) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, app(app(ty_Either, bf), bg)) -> error([]) 16.11/6.24 new_deleteBy1(xw10, [], ba) -> [] 16.11/6.24 new_esEs(xw10, xw90, app(ty_Maybe, bh)) -> error([]) 16.11/6.24 new_deleteBy00(xw17, xw18, xw19, False, cd) -> :(xw18, new_deleteBy1(xw19, xw17, cd)) 16.11/6.24 16.11/6.24 The set Q consists of the following terms: 16.11/6.24 16.11/6.24 new_esEs(x0, x1, ty_Float) 16.11/6.24 new_primEqNat0(Zero, Zero) 16.11/6.24 new_deleteBy00(x0, x1, x2, False, x3) 16.11/6.24 new_primEqNat0(Succ(x0), Succ(x1)) 16.11/6.24 new_esEs(x0, x1, app(app(ty_Either, x2), x3)) 16.11/6.24 new_primEqNat0(Succ(x0), Zero) 16.11/6.24 new_esEs(x0, x1, app(ty_Ratio, x2)) 16.11/6.24 new_primEqNat0(Zero, Succ(x0)) 16.11/6.24 new_esEs(x0, x1, ty_Char) 16.11/6.24 new_esEs(x0, x1, ty_Int) 16.11/6.24 new_deleteBy1(x0, :(x1, x2), x3) 16.11/6.24 new_esEs(x0, x1, app(app(app(ty_@3, x2), x3), x4)) 16.11/6.24 new_esEs(x0, x1, ty_Ordering) 16.11/6.24 new_esEs(x0, x1, app(ty_[], x2)) 16.11/6.24 new_deleteBy1(x0, [], x1) 16.11/6.24 new_esEs(x0, x1, ty_Integer) 16.11/6.24 new_primEqChar(Char(x0), Char(x1)) 16.11/6.24 new_flip(x0, x1, x2) 16.11/6.24 new_esEs(x0, x1, ty_@0) 16.11/6.24 new_esEs(x0, x1, ty_Double) 16.11/6.24 new_deleteBy00(x0, x1, x2, True, x3) 16.11/6.24 new_esEs(x0, x1, ty_Bool) 16.11/6.24 new_esEs(x0, x1, app(ty_Maybe, x2)) 16.11/6.24 new_esEs(x0, x1, app(app(ty_@2, x2), x3)) 16.11/6.24 16.11/6.24 We have to consider all minimal (P,Q,R)-chains. 16.11/6.24 ---------------------------------------- 16.11/6.24 16.11/6.24 (25) TransformationProof (EQUIVALENT) 16.11/6.24 By rewriting [LPAR04] the rule new_foldl(xw9, xw10, :(xw110, xw111), ba) -> new_foldl(new_flip(xw9, xw10, ba), xw110, xw111, ba) at position [0] we obtained the following new rules [LPAR04]: 16.11/6.24 16.11/6.24 (new_foldl(xw9, xw10, :(xw110, xw111), ba) -> new_foldl(new_deleteBy1(xw10, xw9, ba), xw110, xw111, ba),new_foldl(xw9, xw10, :(xw110, xw111), ba) -> new_foldl(new_deleteBy1(xw10, xw9, ba), xw110, xw111, ba)) 16.11/6.24 16.11/6.24 16.11/6.24 ---------------------------------------- 16.11/6.24 16.11/6.24 (26) 16.11/6.24 Obligation: 16.11/6.24 Q DP problem: 16.11/6.24 The TRS P consists of the following rules: 16.11/6.24 16.11/6.24 new_foldl(xw9, xw10, :(xw110, xw111), ba) -> new_foldl(new_deleteBy1(xw10, xw9, ba), xw110, xw111, ba) 16.11/6.24 16.11/6.24 The TRS R consists of the following rules: 16.11/6.24 16.11/6.24 new_primEqNat0(Zero, Zero) -> True 16.11/6.24 new_esEs(xw10, xw90, app(ty_Ratio, be)) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Integer) -> error([]) 16.11/6.24 new_primEqChar(Char(xw100), Char(xw900)) -> new_primEqNat0(xw100, xw900) 16.11/6.24 new_esEs(xw10, xw90, app(app(ty_@2, bc), bd)) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_@0) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Double) -> error([]) 16.11/6.24 new_deleteBy1(xw10, :(xw90, xw91), ba) -> new_deleteBy00(xw91, xw90, xw10, new_esEs(xw10, xw90, ba), ba) 16.11/6.24 new_deleteBy00(xw17, xw18, xw19, True, cd) -> xw17 16.11/6.24 new_esEs(xw10, xw90, ty_Char) -> new_primEqChar(xw10, xw90) 16.11/6.24 new_primEqNat0(Succ(xw1000), Zero) -> False 16.11/6.24 new_primEqNat0(Zero, Succ(xw9000)) -> False 16.11/6.24 new_esEs(xw10, xw90, app(app(app(ty_@3, ca), cb), cc)) -> error([]) 16.11/6.24 new_flip(xw9, xw10, ba) -> new_deleteBy1(xw10, xw9, ba) 16.11/6.24 new_esEs(xw10, xw90, app(ty_[], bb)) -> error([]) 16.11/6.24 new_primEqNat0(Succ(xw1000), Succ(xw9000)) -> new_primEqNat0(xw1000, xw9000) 16.11/6.24 new_esEs(xw10, xw90, ty_Ordering) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Float) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Bool) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Int) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, app(app(ty_Either, bf), bg)) -> error([]) 16.11/6.24 new_deleteBy1(xw10, [], ba) -> [] 16.11/6.24 new_esEs(xw10, xw90, app(ty_Maybe, bh)) -> error([]) 16.11/6.24 new_deleteBy00(xw17, xw18, xw19, False, cd) -> :(xw18, new_deleteBy1(xw19, xw17, cd)) 16.11/6.24 16.11/6.24 The set Q consists of the following terms: 16.11/6.24 16.11/6.24 new_esEs(x0, x1, ty_Float) 16.11/6.24 new_primEqNat0(Zero, Zero) 16.11/6.24 new_deleteBy00(x0, x1, x2, False, x3) 16.11/6.24 new_primEqNat0(Succ(x0), Succ(x1)) 16.11/6.24 new_esEs(x0, x1, app(app(ty_Either, x2), x3)) 16.11/6.24 new_primEqNat0(Succ(x0), Zero) 16.11/6.24 new_esEs(x0, x1, app(ty_Ratio, x2)) 16.11/6.24 new_primEqNat0(Zero, Succ(x0)) 16.11/6.24 new_esEs(x0, x1, ty_Char) 16.11/6.24 new_esEs(x0, x1, ty_Int) 16.11/6.24 new_deleteBy1(x0, :(x1, x2), x3) 16.11/6.24 new_esEs(x0, x1, app(app(app(ty_@3, x2), x3), x4)) 16.11/6.24 new_esEs(x0, x1, ty_Ordering) 16.11/6.24 new_esEs(x0, x1, app(ty_[], x2)) 16.11/6.24 new_deleteBy1(x0, [], x1) 16.11/6.24 new_esEs(x0, x1, ty_Integer) 16.11/6.24 new_primEqChar(Char(x0), Char(x1)) 16.11/6.24 new_flip(x0, x1, x2) 16.11/6.24 new_esEs(x0, x1, ty_@0) 16.11/6.24 new_esEs(x0, x1, ty_Double) 16.11/6.24 new_deleteBy00(x0, x1, x2, True, x3) 16.11/6.24 new_esEs(x0, x1, ty_Bool) 16.11/6.24 new_esEs(x0, x1, app(ty_Maybe, x2)) 16.11/6.24 new_esEs(x0, x1, app(app(ty_@2, x2), x3)) 16.11/6.24 16.11/6.24 We have to consider all minimal (P,Q,R)-chains. 16.11/6.24 ---------------------------------------- 16.11/6.24 16.11/6.24 (27) UsableRulesProof (EQUIVALENT) 16.11/6.24 As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R. 16.11/6.24 ---------------------------------------- 16.11/6.24 16.11/6.24 (28) 16.11/6.24 Obligation: 16.11/6.24 Q DP problem: 16.11/6.24 The TRS P consists of the following rules: 16.11/6.24 16.11/6.24 new_foldl(xw9, xw10, :(xw110, xw111), ba) -> new_foldl(new_deleteBy1(xw10, xw9, ba), xw110, xw111, ba) 16.11/6.24 16.11/6.24 The TRS R consists of the following rules: 16.11/6.24 16.11/6.24 new_deleteBy1(xw10, :(xw90, xw91), ba) -> new_deleteBy00(xw91, xw90, xw10, new_esEs(xw10, xw90, ba), ba) 16.11/6.24 new_deleteBy1(xw10, [], ba) -> [] 16.11/6.24 new_esEs(xw10, xw90, app(ty_Ratio, be)) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Integer) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, app(app(ty_@2, bc), bd)) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_@0) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Double) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Char) -> new_primEqChar(xw10, xw90) 16.11/6.24 new_esEs(xw10, xw90, app(app(app(ty_@3, ca), cb), cc)) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, app(ty_[], bb)) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Ordering) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Float) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Bool) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Int) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, app(app(ty_Either, bf), bg)) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, app(ty_Maybe, bh)) -> error([]) 16.11/6.24 new_deleteBy00(xw17, xw18, xw19, True, cd) -> xw17 16.11/6.24 new_deleteBy00(xw17, xw18, xw19, False, cd) -> :(xw18, new_deleteBy1(xw19, xw17, cd)) 16.11/6.24 new_primEqChar(Char(xw100), Char(xw900)) -> new_primEqNat0(xw100, xw900) 16.11/6.24 new_primEqNat0(Zero, Zero) -> True 16.11/6.24 new_primEqNat0(Succ(xw1000), Zero) -> False 16.11/6.24 new_primEqNat0(Zero, Succ(xw9000)) -> False 16.11/6.24 new_primEqNat0(Succ(xw1000), Succ(xw9000)) -> new_primEqNat0(xw1000, xw9000) 16.11/6.24 16.11/6.24 The set Q consists of the following terms: 16.11/6.24 16.11/6.24 new_esEs(x0, x1, ty_Float) 16.11/6.24 new_primEqNat0(Zero, Zero) 16.11/6.24 new_deleteBy00(x0, x1, x2, False, x3) 16.11/6.24 new_primEqNat0(Succ(x0), Succ(x1)) 16.11/6.24 new_esEs(x0, x1, app(app(ty_Either, x2), x3)) 16.11/6.24 new_primEqNat0(Succ(x0), Zero) 16.11/6.24 new_esEs(x0, x1, app(ty_Ratio, x2)) 16.11/6.24 new_primEqNat0(Zero, Succ(x0)) 16.11/6.24 new_esEs(x0, x1, ty_Char) 16.11/6.24 new_esEs(x0, x1, ty_Int) 16.11/6.24 new_deleteBy1(x0, :(x1, x2), x3) 16.11/6.24 new_esEs(x0, x1, app(app(app(ty_@3, x2), x3), x4)) 16.11/6.24 new_esEs(x0, x1, ty_Ordering) 16.11/6.24 new_esEs(x0, x1, app(ty_[], x2)) 16.11/6.24 new_deleteBy1(x0, [], x1) 16.11/6.24 new_esEs(x0, x1, ty_Integer) 16.11/6.24 new_primEqChar(Char(x0), Char(x1)) 16.11/6.24 new_flip(x0, x1, x2) 16.11/6.24 new_esEs(x0, x1, ty_@0) 16.11/6.24 new_esEs(x0, x1, ty_Double) 16.11/6.24 new_deleteBy00(x0, x1, x2, True, x3) 16.11/6.24 new_esEs(x0, x1, ty_Bool) 16.11/6.24 new_esEs(x0, x1, app(ty_Maybe, x2)) 16.11/6.24 new_esEs(x0, x1, app(app(ty_@2, x2), x3)) 16.11/6.24 16.11/6.24 We have to consider all minimal (P,Q,R)-chains. 16.11/6.24 ---------------------------------------- 16.11/6.24 16.11/6.24 (29) QReductionProof (EQUIVALENT) 16.11/6.24 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 16.11/6.24 16.11/6.24 new_flip(x0, x1, x2) 16.11/6.24 16.11/6.24 16.11/6.24 ---------------------------------------- 16.11/6.24 16.11/6.24 (30) 16.11/6.24 Obligation: 16.11/6.24 Q DP problem: 16.11/6.24 The TRS P consists of the following rules: 16.11/6.24 16.11/6.24 new_foldl(xw9, xw10, :(xw110, xw111), ba) -> new_foldl(new_deleteBy1(xw10, xw9, ba), xw110, xw111, ba) 16.11/6.24 16.11/6.24 The TRS R consists of the following rules: 16.11/6.24 16.11/6.24 new_deleteBy1(xw10, :(xw90, xw91), ba) -> new_deleteBy00(xw91, xw90, xw10, new_esEs(xw10, xw90, ba), ba) 16.11/6.24 new_deleteBy1(xw10, [], ba) -> [] 16.11/6.24 new_esEs(xw10, xw90, app(ty_Ratio, be)) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Integer) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, app(app(ty_@2, bc), bd)) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_@0) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Double) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Char) -> new_primEqChar(xw10, xw90) 16.11/6.24 new_esEs(xw10, xw90, app(app(app(ty_@3, ca), cb), cc)) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, app(ty_[], bb)) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Ordering) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Float) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Bool) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, ty_Int) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, app(app(ty_Either, bf), bg)) -> error([]) 16.11/6.24 new_esEs(xw10, xw90, app(ty_Maybe, bh)) -> error([]) 16.11/6.24 new_deleteBy00(xw17, xw18, xw19, True, cd) -> xw17 16.11/6.24 new_deleteBy00(xw17, xw18, xw19, False, cd) -> :(xw18, new_deleteBy1(xw19, xw17, cd)) 16.11/6.24 new_primEqChar(Char(xw100), Char(xw900)) -> new_primEqNat0(xw100, xw900) 16.11/6.24 new_primEqNat0(Zero, Zero) -> True 16.11/6.24 new_primEqNat0(Succ(xw1000), Zero) -> False 16.11/6.24 new_primEqNat0(Zero, Succ(xw9000)) -> False 16.11/6.24 new_primEqNat0(Succ(xw1000), Succ(xw9000)) -> new_primEqNat0(xw1000, xw9000) 16.11/6.24 16.11/6.24 The set Q consists of the following terms: 16.11/6.24 16.11/6.24 new_esEs(x0, x1, ty_Float) 16.11/6.24 new_primEqNat0(Zero, Zero) 16.11/6.24 new_deleteBy00(x0, x1, x2, False, x3) 16.11/6.24 new_primEqNat0(Succ(x0), Succ(x1)) 16.11/6.24 new_esEs(x0, x1, app(app(ty_Either, x2), x3)) 16.11/6.24 new_primEqNat0(Succ(x0), Zero) 16.11/6.24 new_esEs(x0, x1, app(ty_Ratio, x2)) 16.11/6.24 new_primEqNat0(Zero, Succ(x0)) 16.11/6.24 new_esEs(x0, x1, ty_Char) 16.11/6.24 new_esEs(x0, x1, ty_Int) 16.11/6.24 new_deleteBy1(x0, :(x1, x2), x3) 16.11/6.24 new_esEs(x0, x1, app(app(app(ty_@3, x2), x3), x4)) 16.11/6.24 new_esEs(x0, x1, ty_Ordering) 16.11/6.24 new_esEs(x0, x1, app(ty_[], x2)) 16.11/6.24 new_deleteBy1(x0, [], x1) 16.11/6.24 new_esEs(x0, x1, ty_Integer) 16.11/6.24 new_primEqChar(Char(x0), Char(x1)) 16.11/6.24 new_esEs(x0, x1, ty_@0) 16.11/6.24 new_esEs(x0, x1, ty_Double) 16.11/6.24 new_deleteBy00(x0, x1, x2, True, x3) 16.11/6.24 new_esEs(x0, x1, ty_Bool) 16.11/6.24 new_esEs(x0, x1, app(ty_Maybe, x2)) 16.11/6.24 new_esEs(x0, x1, app(app(ty_@2, x2), x3)) 16.11/6.24 16.11/6.24 We have to consider all minimal (P,Q,R)-chains. 16.11/6.24 ---------------------------------------- 16.11/6.24 16.11/6.24 (31) QDPSizeChangeProof (EQUIVALENT) 16.11/6.24 By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 16.11/6.24 16.11/6.24 From the DPs we obtained the following set of size-change graphs: 16.11/6.24 *new_foldl(xw9, xw10, :(xw110, xw111), ba) -> new_foldl(new_deleteBy1(xw10, xw9, ba), xw110, xw111, ba) 16.11/6.24 The graph contains the following edges 3 > 2, 3 > 3, 4 >= 4 16.11/6.24 16.11/6.24 16.11/6.24 ---------------------------------------- 16.11/6.24 16.11/6.24 (32) 16.11/6.24 YES 16.11/6.24 16.11/6.24 ---------------------------------------- 16.11/6.24 16.11/6.24 (33) 16.11/6.24 Obligation: 16.11/6.24 Q DP problem: 16.11/6.24 The TRS P consists of the following rules: 16.11/6.24 16.11/6.24 new_primEqNat(Succ(xw1000), Succ(xw9000)) -> new_primEqNat(xw1000, xw9000) 16.11/6.24 16.11/6.24 R is empty. 16.11/6.24 Q is empty. 16.11/6.24 We have to consider all minimal (P,Q,R)-chains. 16.11/6.24 ---------------------------------------- 16.11/6.24 16.11/6.24 (34) QDPSizeChangeProof (EQUIVALENT) 16.11/6.24 By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 16.11/6.24 16.11/6.24 From the DPs we obtained the following set of size-change graphs: 16.11/6.24 *new_primEqNat(Succ(xw1000), Succ(xw9000)) -> new_primEqNat(xw1000, xw9000) 16.11/6.24 The graph contains the following edges 1 > 1, 2 > 2 16.11/6.24 16.11/6.24 16.11/6.24 ---------------------------------------- 16.11/6.24 16.11/6.24 (35) 16.11/6.24 YES 16.11/6.28 EOF