10.80/4.55 YES 13.09/5.15 proof of /export/starexec/sandbox2/benchmark/theBenchmark.hs 13.09/5.15 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 13.09/5.15 13.09/5.15 13.09/5.15 H-Termination with start terms of the given HASKELL could be proven: 13.09/5.15 13.09/5.15 (0) HASKELL 13.09/5.15 (1) LR [EQUIVALENT, 0 ms] 13.09/5.15 (2) HASKELL 13.09/5.15 (3) BR [EQUIVALENT, 0 ms] 13.09/5.15 (4) HASKELL 13.09/5.15 (5) COR [EQUIVALENT, 0 ms] 13.09/5.15 (6) HASKELL 13.09/5.15 (7) LetRed [EQUIVALENT, 0 ms] 13.09/5.15 (8) HASKELL 13.09/5.15 (9) Narrow [SOUND, 0 ms] 13.09/5.15 (10) AND 13.09/5.15 (11) QDP 13.09/5.15 (12) QDPSizeChangeProof [EQUIVALENT, 0 ms] 13.09/5.15 (13) YES 13.09/5.15 (14) QDP 13.09/5.15 (15) QDPSizeChangeProof [EQUIVALENT, 0 ms] 13.09/5.15 (16) YES 13.09/5.15 13.09/5.15 13.09/5.15 ---------------------------------------- 13.09/5.15 13.09/5.15 (0) 13.09/5.15 Obligation: 13.09/5.15 mainModule Main 13.09/5.15 module Maybe where { 13.09/5.15 import qualified List; 13.09/5.15 import qualified Main; 13.09/5.15 import qualified Prelude; 13.09/5.15 } 13.09/5.15 module List where { 13.09/5.15 import qualified Main; 13.09/5.15 import qualified Maybe; 13.09/5.15 import qualified Prelude; 13.09/5.15 group :: Eq a => [a] -> [[a]]; 13.09/5.15 group = groupBy (==); 13.09/5.15 13.09/5.15 groupBy :: (a -> a -> Bool) -> [a] -> [[a]]; 13.09/5.15 groupBy _ [] = []; 13.09/5.15 groupBy eq (x : xs) = (x : ys) : groupBy eq zs where { 13.09/5.15 vv10 = span (eq x) xs; 13.09/5.15 ys = (\(ys,_) ->ys) vv10; 13.09/5.15 zs = (\(_,zs) ->zs) vv10; 13.09/5.15 }; 13.09/5.15 13.09/5.15 } 13.09/5.15 module Main where { 13.09/5.15 import qualified List; 13.09/5.15 import qualified Maybe; 13.09/5.15 import qualified Prelude; 13.09/5.15 } 13.09/5.15 13.09/5.15 ---------------------------------------- 13.09/5.15 13.09/5.15 (1) LR (EQUIVALENT) 13.09/5.15 Lambda Reductions: 13.09/5.15 The following Lambda expression 13.09/5.15 "\(_,zs)->zs" 13.09/5.15 is transformed to 13.09/5.15 "zs0 (_,zs) = zs; 13.09/5.15 " 13.09/5.15 The following Lambda expression 13.09/5.15 "\(ys,_)->ys" 13.09/5.15 is transformed to 13.09/5.15 "ys0 (ys,_) = ys; 13.09/5.15 " 13.09/5.15 The following Lambda expression 13.09/5.15 "\(_,zs)->zs" 13.09/5.15 is transformed to 13.09/5.15 "zs1 (_,zs) = zs; 13.09/5.15 " 13.09/5.15 The following Lambda expression 13.09/5.15 "\(ys,_)->ys" 13.09/5.15 is transformed to 13.09/5.15 "ys1 (ys,_) = ys; 13.09/5.15 " 13.09/5.15 13.09/5.15 ---------------------------------------- 13.09/5.15 13.09/5.15 (2) 13.09/5.15 Obligation: 13.09/5.15 mainModule Main 13.09/5.15 module Maybe where { 13.09/5.15 import qualified List; 13.09/5.15 import qualified Main; 13.09/5.15 import qualified Prelude; 13.09/5.15 } 13.09/5.15 module List where { 13.09/5.15 import qualified Main; 13.09/5.15 import qualified Maybe; 13.09/5.15 import qualified Prelude; 13.09/5.15 group :: Eq a => [a] -> [[a]]; 13.09/5.15 group = groupBy (==); 13.09/5.15 13.09/5.15 groupBy :: (a -> a -> Bool) -> [a] -> [[a]]; 13.09/5.15 groupBy _ [] = []; 13.09/5.15 groupBy eq (x : xs) = (x : ys) : groupBy eq zs where { 13.09/5.15 vv10 = span (eq x) xs; 13.09/5.15 ys = ys1 vv10; 13.09/5.15 ys1 (ys,_) = ys; 13.09/5.15 zs = zs1 vv10; 13.09/5.15 zs1 (_,zs) = zs; 13.09/5.15 }; 13.09/5.15 13.09/5.15 } 13.09/5.15 module Main where { 13.09/5.15 import qualified List; 13.09/5.15 import qualified Maybe; 13.09/5.15 import qualified Prelude; 13.09/5.15 } 13.09/5.15 13.09/5.15 ---------------------------------------- 13.09/5.15 13.09/5.15 (3) BR (EQUIVALENT) 13.09/5.15 Replaced joker patterns by fresh variables and removed binding patterns. 13.09/5.15 13.09/5.15 Binding Reductions: 13.09/5.15 The bind variable of the following binding Pattern 13.09/5.15 "xs@(vy : vz)" 13.09/5.15 is replaced by the following term 13.09/5.15 "vy : vz" 13.09/5.15 13.09/5.15 ---------------------------------------- 13.09/5.15 13.09/5.15 (4) 13.09/5.15 Obligation: 13.09/5.15 mainModule Main 13.09/5.15 module Maybe where { 13.09/5.15 import qualified List; 13.09/5.15 import qualified Main; 13.09/5.15 import qualified Prelude; 13.09/5.15 } 13.09/5.15 module List where { 13.09/5.15 import qualified Main; 13.09/5.15 import qualified Maybe; 13.09/5.15 import qualified Prelude; 13.09/5.15 group :: Eq a => [a] -> [[a]]; 13.09/5.15 group = groupBy (==); 13.09/5.15 13.09/5.15 groupBy :: (a -> a -> Bool) -> [a] -> [[a]]; 13.09/5.15 groupBy ww [] = []; 13.09/5.15 groupBy eq (x : xs) = (x : ys) : groupBy eq zs where { 13.09/5.15 vv10 = span (eq x) xs; 13.09/5.15 ys = ys1 vv10; 13.09/5.15 ys1 (ys,wx) = ys; 13.09/5.15 zs = zs1 vv10; 13.09/5.15 zs1 (wy,zs) = zs; 13.09/5.16 }; 13.09/5.16 13.09/5.16 } 13.09/5.16 module Main where { 13.09/5.16 import qualified List; 13.09/5.16 import qualified Maybe; 13.09/5.16 import qualified Prelude; 13.09/5.16 } 13.09/5.16 13.09/5.16 ---------------------------------------- 13.09/5.16 13.09/5.16 (5) COR (EQUIVALENT) 13.09/5.16 Cond Reductions: 13.09/5.16 The following Function with conditions 13.09/5.16 "undefined |Falseundefined; 13.09/5.16 " 13.09/5.16 is transformed to 13.09/5.16 "undefined = undefined1; 13.09/5.16 " 13.09/5.16 "undefined0 True = undefined; 13.09/5.16 " 13.09/5.16 "undefined1 = undefined0 False; 13.09/5.16 " 13.09/5.16 The following Function with conditions 13.09/5.16 "span p [] = ([],[]); 13.09/5.16 span p (vy : vz)|p vy(vy : ys,zs)|otherwise([],vy : vz) where { 13.09/5.16 vu43 = span p vz; 13.09/5.16 ; 13.09/5.16 ys = ys0 vu43; 13.09/5.16 ; 13.09/5.16 ys0 (ys,wv) = ys; 13.09/5.16 ; 13.09/5.16 zs = zs0 vu43; 13.09/5.16 ; 13.09/5.16 zs0 (wu,zs) = zs; 13.09/5.16 } 13.09/5.16 ; 13.09/5.16 " 13.09/5.16 is transformed to 13.09/5.16 "span p [] = span3 p []; 13.09/5.16 span p (vy : vz) = span2 p (vy : vz); 13.09/5.16 " 13.09/5.16 "span2 p (vy : vz) = span1 p vy vz (p vy) where { 13.09/5.16 span0 p vy vz True = ([],vy : vz); 13.09/5.16 ; 13.09/5.16 span1 p vy vz True = (vy : ys,zs); 13.09/5.16 span1 p vy vz False = span0 p vy vz otherwise; 13.09/5.16 ; 13.09/5.16 vu43 = span p vz; 13.09/5.16 ; 13.09/5.16 ys = ys0 vu43; 13.09/5.16 ; 13.09/5.16 ys0 (ys,wv) = ys; 13.09/5.16 ; 13.09/5.16 zs = zs0 vu43; 13.09/5.16 ; 13.09/5.16 zs0 (wu,zs) = zs; 13.09/5.16 } 13.09/5.16 ; 13.09/5.16 " 13.09/5.16 "span3 p [] = ([],[]); 13.09/5.16 span3 xv xw = span2 xv xw; 13.09/5.16 " 13.09/5.16 13.09/5.16 ---------------------------------------- 13.09/5.16 13.09/5.16 (6) 13.09/5.16 Obligation: 13.09/5.16 mainModule Main 13.09/5.16 module Maybe where { 13.09/5.16 import qualified List; 13.09/5.16 import qualified Main; 13.09/5.16 import qualified Prelude; 13.09/5.16 } 13.09/5.16 module List where { 13.09/5.16 import qualified Main; 13.09/5.16 import qualified Maybe; 13.09/5.16 import qualified Prelude; 13.09/5.16 group :: Eq a => [a] -> [[a]]; 13.09/5.16 group = groupBy (==); 13.09/5.16 13.09/5.16 groupBy :: (a -> a -> Bool) -> [a] -> [[a]]; 13.09/5.16 groupBy ww [] = []; 13.09/5.16 groupBy eq (x : xs) = (x : ys) : groupBy eq zs where { 13.09/5.16 vv10 = span (eq x) xs; 13.09/5.16 ys = ys1 vv10; 13.09/5.16 ys1 (ys,wx) = ys; 13.09/5.16 zs = zs1 vv10; 13.09/5.16 zs1 (wy,zs) = zs; 13.09/5.16 }; 13.09/5.16 13.09/5.16 } 13.09/5.16 module Main where { 13.09/5.16 import qualified List; 13.09/5.16 import qualified Maybe; 13.09/5.16 import qualified Prelude; 13.09/5.16 } 13.09/5.16 13.09/5.16 ---------------------------------------- 13.09/5.16 13.09/5.16 (7) LetRed (EQUIVALENT) 13.09/5.16 Let/Where Reductions: 13.09/5.16 The bindings of the following Let/Where expression 13.09/5.16 "span1 p vy vz (p vy) where { 13.09/5.16 span0 p vy vz True = ([],vy : vz); 13.09/5.16 ; 13.09/5.16 span1 p vy vz True = (vy : ys,zs); 13.09/5.16 span1 p vy vz False = span0 p vy vz otherwise; 13.09/5.16 ; 13.09/5.16 vu43 = span p vz; 13.09/5.16 ; 13.09/5.16 ys = ys0 vu43; 13.09/5.16 ; 13.09/5.16 ys0 (ys,wv) = ys; 13.09/5.16 ; 13.09/5.16 zs = zs0 vu43; 13.09/5.16 ; 13.09/5.16 zs0 (wu,zs) = zs; 13.09/5.16 } 13.09/5.16 " 13.09/5.16 are unpacked to the following functions on top level 13.09/5.16 "span2Vu43 xx xy = span xx xy; 13.09/5.16 " 13.09/5.16 "span2Span1 xx xy p vy vz True = (vy : span2Ys xx xy,span2Zs xx xy); 13.09/5.16 span2Span1 xx xy p vy vz False = span2Span0 xx xy p vy vz otherwise; 13.09/5.16 " 13.09/5.16 "span2Zs0 xx xy (wu,zs) = zs; 13.09/5.16 " 13.09/5.16 "span2Span0 xx xy p vy vz True = ([],vy : vz); 13.09/5.16 " 13.09/5.16 "span2Ys0 xx xy (ys,wv) = ys; 13.09/5.16 " 13.09/5.16 "span2Zs xx xy = span2Zs0 xx xy (span2Vu43 xx xy); 13.09/5.16 " 13.09/5.16 "span2Ys xx xy = span2Ys0 xx xy (span2Vu43 xx xy); 13.09/5.16 " 13.09/5.16 The bindings of the following Let/Where expression 13.09/5.16 "(x : ys) : groupBy eq zs where { 13.09/5.16 vv10 = span (eq x) xs; 13.09/5.16 ; 13.09/5.16 ys = ys1 vv10; 13.09/5.16 ; 13.09/5.16 ys1 (ys,wx) = ys; 13.09/5.16 ; 13.09/5.16 zs = zs1 vv10; 13.09/5.16 ; 13.09/5.16 zs1 (wy,zs) = zs; 13.09/5.16 } 13.09/5.16 " 13.09/5.16 are unpacked to the following functions on top level 13.09/5.16 "groupByZs1 xz yu yv (wy,zs) = zs; 13.09/5.16 " 13.09/5.16 "groupByVv10 xz yu yv = span (xz yu) yv; 13.09/5.16 " 13.09/5.16 "groupByYs1 xz yu yv (ys,wx) = ys; 13.09/5.16 " 13.09/5.16 "groupByYs xz yu yv = groupByYs1 xz yu yv (groupByVv10 xz yu yv); 13.09/5.16 " 13.09/5.16 "groupByZs xz yu yv = groupByZs1 xz yu yv (groupByVv10 xz yu yv); 13.09/5.16 " 13.09/5.16 13.09/5.16 ---------------------------------------- 13.09/5.16 13.09/5.16 (8) 13.09/5.16 Obligation: 13.09/5.16 mainModule Main 13.09/5.16 module Maybe where { 13.09/5.16 import qualified List; 13.09/5.16 import qualified Main; 13.09/5.16 import qualified Prelude; 13.09/5.16 } 13.09/5.16 module List where { 13.09/5.16 import qualified Main; 13.09/5.16 import qualified Maybe; 13.09/5.16 import qualified Prelude; 13.09/5.16 group :: Eq a => [a] -> [[a]]; 13.09/5.16 group = groupBy (==); 13.09/5.16 13.09/5.16 groupBy :: (a -> a -> Bool) -> [a] -> [[a]]; 13.09/5.16 groupBy ww [] = []; 13.09/5.16 groupBy eq (x : xs) = (x : groupByYs eq x xs) : groupBy eq (groupByZs eq x xs); 13.09/5.16 13.09/5.16 groupByVv10 xz yu yv = span (xz yu) yv; 13.09/5.16 13.09/5.16 groupByYs xz yu yv = groupByYs1 xz yu yv (groupByVv10 xz yu yv); 13.09/5.16 13.09/5.16 groupByYs1 xz yu yv (ys,wx) = ys; 13.09/5.16 13.09/5.16 groupByZs xz yu yv = groupByZs1 xz yu yv (groupByVv10 xz yu yv); 13.09/5.16 13.09/5.16 groupByZs1 xz yu yv (wy,zs) = zs; 13.09/5.16 13.09/5.16 } 13.09/5.16 module Main where { 13.09/5.16 import qualified List; 13.09/5.16 import qualified Maybe; 13.09/5.16 import qualified Prelude; 13.09/5.16 } 13.09/5.16 13.09/5.16 ---------------------------------------- 13.09/5.16 13.09/5.16 (9) Narrow (SOUND) 13.09/5.16 Haskell To QDPs 13.09/5.16 13.09/5.16 digraph dp_graph { 13.09/5.16 node [outthreshold=100, inthreshold=100];1[label="List.group",fontsize=16,color="grey",shape="box"];1 -> 3[label="",style="dashed", color="grey", weight=3]; 13.09/5.16 3[label="List.group yw3",fontsize=16,color="black",shape="triangle"];3 -> 4[label="",style="solid", color="black", weight=3]; 13.09/5.16 4[label="List.groupBy (==) yw3",fontsize=16,color="burlywood",shape="triangle"];77[label="yw3/yw30 : yw31",fontsize=10,color="white",style="solid",shape="box"];4 -> 77[label="",style="solid", color="burlywood", weight=9]; 13.09/5.16 77 -> 5[label="",style="solid", color="burlywood", weight=3]; 13.09/5.16 78[label="yw3/[]",fontsize=10,color="white",style="solid",shape="box"];4 -> 78[label="",style="solid", color="burlywood", weight=9]; 13.09/5.16 78 -> 6[label="",style="solid", color="burlywood", weight=3]; 13.09/5.16 5[label="List.groupBy (==) (yw30 : yw31)",fontsize=16,color="black",shape="box"];5 -> 7[label="",style="solid", color="black", weight=3]; 13.09/5.16 6[label="List.groupBy (==) []",fontsize=16,color="black",shape="box"];6 -> 8[label="",style="solid", color="black", weight=3]; 13.09/5.16 7[label="(yw30 : List.groupByYs (==) yw30 yw31) : List.groupBy (==) (List.groupByZs (==) yw30 yw31)",fontsize=16,color="green",shape="box"];7 -> 9[label="",style="dashed", color="green", weight=3]; 13.09/5.16 7 -> 10[label="",style="dashed", color="green", weight=3]; 13.09/5.16 8[label="[]",fontsize=16,color="green",shape="box"];9[label="List.groupByYs (==) yw30 yw31",fontsize=16,color="black",shape="box"];9 -> 11[label="",style="solid", color="black", weight=3]; 13.09/5.16 10 -> 4[label="",style="dashed", color="red", weight=0]; 13.09/5.16 10[label="List.groupBy (==) (List.groupByZs (==) yw30 yw31)",fontsize=16,color="magenta"];10 -> 12[label="",style="dashed", color="magenta", weight=3]; 13.09/5.16 11[label="List.groupByYs1 (==) yw30 yw31 (List.groupByVv10 (==) yw30 yw31)",fontsize=16,color="black",shape="box"];11 -> 13[label="",style="solid", color="black", weight=3]; 13.09/5.16 12[label="List.groupByZs (==) yw30 yw31",fontsize=16,color="black",shape="box"];12 -> 14[label="",style="solid", color="black", weight=3]; 13.09/5.16 13[label="List.groupByYs1 (==) yw30 yw31 (span ((==) yw30) yw31)",fontsize=16,color="burlywood",shape="box"];79[label="yw31/yw310 : yw311",fontsize=10,color="white",style="solid",shape="box"];13 -> 79[label="",style="solid", color="burlywood", weight=9]; 13.09/5.16 79 -> 15[label="",style="solid", color="burlywood", weight=3]; 13.09/5.16 80[label="yw31/[]",fontsize=10,color="white",style="solid",shape="box"];13 -> 80[label="",style="solid", color="burlywood", weight=9]; 13.09/5.16 80 -> 16[label="",style="solid", color="burlywood", weight=3]; 13.09/5.16 14[label="List.groupByZs1 (==) yw30 yw31 (List.groupByVv10 (==) yw30 yw31)",fontsize=16,color="black",shape="box"];14 -> 17[label="",style="solid", color="black", weight=3]; 13.09/5.16 15[label="List.groupByYs1 (==) yw30 (yw310 : yw311) (span ((==) yw30) (yw310 : yw311))",fontsize=16,color="black",shape="box"];15 -> 18[label="",style="solid", color="black", weight=3]; 13.09/5.16 16[label="List.groupByYs1 (==) yw30 [] (span ((==) yw30) [])",fontsize=16,color="black",shape="box"];16 -> 19[label="",style="solid", color="black", weight=3]; 13.09/5.16 17[label="List.groupByZs1 (==) yw30 yw31 (span ((==) yw30) yw31)",fontsize=16,color="burlywood",shape="box"];81[label="yw31/yw310 : yw311",fontsize=10,color="white",style="solid",shape="box"];17 -> 81[label="",style="solid", color="burlywood", weight=9]; 13.09/5.16 81 -> 20[label="",style="solid", color="burlywood", weight=3]; 13.09/5.16 82[label="yw31/[]",fontsize=10,color="white",style="solid",shape="box"];17 -> 82[label="",style="solid", color="burlywood", weight=9]; 13.09/5.16 82 -> 21[label="",style="solid", color="burlywood", weight=3]; 13.09/5.16 18[label="List.groupByYs1 (==) yw30 (yw310 : yw311) (span2 ((==) yw30) (yw310 : yw311))",fontsize=16,color="black",shape="box"];18 -> 22[label="",style="solid", color="black", weight=3]; 13.09/5.16 19[label="List.groupByYs1 (==) yw30 [] (span3 ((==) yw30) [])",fontsize=16,color="black",shape="box"];19 -> 23[label="",style="solid", color="black", weight=3]; 13.09/5.16 20[label="List.groupByZs1 (==) yw30 (yw310 : yw311) (span ((==) yw30) (yw310 : yw311))",fontsize=16,color="black",shape="box"];20 -> 24[label="",style="solid", color="black", weight=3]; 13.09/5.16 21[label="List.groupByZs1 (==) yw30 [] (span ((==) yw30) [])",fontsize=16,color="black",shape="box"];21 -> 25[label="",style="solid", color="black", weight=3]; 13.09/5.16 22[label="List.groupByYs1 (==) yw30 (yw310 : yw311) (span2Span1 ((==) yw30) yw311 ((==) yw30) yw310 yw311 ((==) yw30 yw310))",fontsize=16,color="burlywood",shape="box"];83[label="yw30/()",fontsize=10,color="white",style="solid",shape="box"];22 -> 83[label="",style="solid", color="burlywood", weight=9]; 13.09/5.16 83 -> 26[label="",style="solid", color="burlywood", weight=3]; 13.09/5.16 23[label="List.groupByYs1 (==) yw30 [] ([],[])",fontsize=16,color="black",shape="box"];23 -> 27[label="",style="solid", color="black", weight=3]; 13.09/5.16 24[label="List.groupByZs1 (==) yw30 (yw310 : yw311) (span2 ((==) yw30) (yw310 : yw311))",fontsize=16,color="black",shape="box"];24 -> 28[label="",style="solid", color="black", weight=3]; 13.09/5.16 25[label="List.groupByZs1 (==) yw30 [] (span3 ((==) yw30) [])",fontsize=16,color="black",shape="box"];25 -> 29[label="",style="solid", color="black", weight=3]; 13.09/5.16 26[label="List.groupByYs1 (==) () (yw310 : yw311) (span2Span1 ((==) ()) yw311 ((==) ()) yw310 yw311 ((==) () yw310))",fontsize=16,color="burlywood",shape="box"];84[label="yw310/()",fontsize=10,color="white",style="solid",shape="box"];26 -> 84[label="",style="solid", color="burlywood", weight=9]; 13.09/5.16 84 -> 30[label="",style="solid", color="burlywood", weight=3]; 13.09/5.16 27[label="[]",fontsize=16,color="green",shape="box"];28[label="List.groupByZs1 (==) yw30 (yw310 : yw311) (span2Span1 ((==) yw30) yw311 ((==) yw30) yw310 yw311 ((==) yw30 yw310))",fontsize=16,color="burlywood",shape="box"];85[label="yw30/()",fontsize=10,color="white",style="solid",shape="box"];28 -> 85[label="",style="solid", color="burlywood", weight=9]; 13.09/5.16 85 -> 31[label="",style="solid", color="burlywood", weight=3]; 13.09/5.16 29[label="List.groupByZs1 (==) yw30 [] ([],[])",fontsize=16,color="black",shape="box"];29 -> 32[label="",style="solid", color="black", weight=3]; 13.09/5.16 30[label="List.groupByYs1 (==) () (() : yw311) (span2Span1 ((==) ()) yw311 ((==) ()) () yw311 ((==) () ()))",fontsize=16,color="black",shape="box"];30 -> 33[label="",style="solid", color="black", weight=3]; 13.09/5.16 31[label="List.groupByZs1 (==) () (yw310 : yw311) (span2Span1 ((==) ()) yw311 ((==) ()) yw310 yw311 ((==) () yw310))",fontsize=16,color="burlywood",shape="box"];86[label="yw310/()",fontsize=10,color="white",style="solid",shape="box"];31 -> 86[label="",style="solid", color="burlywood", weight=9]; 13.09/5.16 86 -> 34[label="",style="solid", color="burlywood", weight=3]; 13.09/5.16 32[label="[]",fontsize=16,color="green",shape="box"];33[label="List.groupByYs1 (==) () (() : yw311) (span2Span1 ((==) ()) yw311 ((==) ()) () yw311 True)",fontsize=16,color="black",shape="box"];33 -> 35[label="",style="solid", color="black", weight=3]; 13.09/5.16 34[label="List.groupByZs1 (==) () (() : yw311) (span2Span1 ((==) ()) yw311 ((==) ()) () yw311 ((==) () ()))",fontsize=16,color="black",shape="box"];34 -> 36[label="",style="solid", color="black", weight=3]; 13.09/5.16 35[label="List.groupByYs1 (==) () (() : yw311) (() : span2Ys ((==) ()) yw311,span2Zs ((==) ()) yw311)",fontsize=16,color="black",shape="box"];35 -> 37[label="",style="solid", color="black", weight=3]; 13.09/5.16 36[label="List.groupByZs1 (==) () (() : yw311) (span2Span1 ((==) ()) yw311 ((==) ()) () yw311 True)",fontsize=16,color="black",shape="box"];36 -> 38[label="",style="solid", color="black", weight=3]; 13.09/5.16 37[label="() : span2Ys ((==) ()) yw311",fontsize=16,color="green",shape="box"];37 -> 39[label="",style="dashed", color="green", weight=3]; 13.09/5.16 38[label="List.groupByZs1 (==) () (() : yw311) (() : span2Ys ((==) ()) yw311,span2Zs ((==) ()) yw311)",fontsize=16,color="black",shape="box"];38 -> 40[label="",style="solid", color="black", weight=3]; 13.09/5.16 39[label="span2Ys ((==) ()) yw311",fontsize=16,color="black",shape="triangle"];39 -> 41[label="",style="solid", color="black", weight=3]; 13.09/5.16 40[label="span2Zs ((==) ()) yw311",fontsize=16,color="black",shape="triangle"];40 -> 42[label="",style="solid", color="black", weight=3]; 13.09/5.16 41[label="span2Ys0 ((==) ()) yw311 (span2Vu43 ((==) ()) yw311)",fontsize=16,color="black",shape="box"];41 -> 43[label="",style="solid", color="black", weight=3]; 13.09/5.16 42[label="span2Zs0 ((==) ()) yw311 (span2Vu43 ((==) ()) yw311)",fontsize=16,color="black",shape="box"];42 -> 44[label="",style="solid", color="black", weight=3]; 13.09/5.16 43[label="span2Ys0 ((==) ()) yw311 (span ((==) ()) yw311)",fontsize=16,color="burlywood",shape="box"];87[label="yw311/yw3110 : yw3111",fontsize=10,color="white",style="solid",shape="box"];43 -> 87[label="",style="solid", color="burlywood", weight=9]; 13.09/5.16 87 -> 45[label="",style="solid", color="burlywood", weight=3]; 13.09/5.16 88[label="yw311/[]",fontsize=10,color="white",style="solid",shape="box"];43 -> 88[label="",style="solid", color="burlywood", weight=9]; 13.09/5.16 88 -> 46[label="",style="solid", color="burlywood", weight=3]; 13.09/5.16 44[label="span2Zs0 ((==) ()) yw311 (span ((==) ()) yw311)",fontsize=16,color="burlywood",shape="box"];89[label="yw311/yw3110 : yw3111",fontsize=10,color="white",style="solid",shape="box"];44 -> 89[label="",style="solid", color="burlywood", weight=9]; 13.09/5.16 89 -> 47[label="",style="solid", color="burlywood", weight=3]; 13.09/5.16 90[label="yw311/[]",fontsize=10,color="white",style="solid",shape="box"];44 -> 90[label="",style="solid", color="burlywood", weight=9]; 13.09/5.16 90 -> 48[label="",style="solid", color="burlywood", weight=3]; 13.09/5.16 45[label="span2Ys0 ((==) ()) (yw3110 : yw3111) (span ((==) ()) (yw3110 : yw3111))",fontsize=16,color="black",shape="box"];45 -> 49[label="",style="solid", color="black", weight=3]; 13.09/5.16 46[label="span2Ys0 ((==) ()) [] (span ((==) ()) [])",fontsize=16,color="black",shape="box"];46 -> 50[label="",style="solid", color="black", weight=3]; 13.09/5.16 47[label="span2Zs0 ((==) ()) (yw3110 : yw3111) (span ((==) ()) (yw3110 : yw3111))",fontsize=16,color="black",shape="box"];47 -> 51[label="",style="solid", color="black", weight=3]; 13.09/5.16 48[label="span2Zs0 ((==) ()) [] (span ((==) ()) [])",fontsize=16,color="black",shape="box"];48 -> 52[label="",style="solid", color="black", weight=3]; 13.09/5.16 49[label="span2Ys0 ((==) ()) (yw3110 : yw3111) (span2 ((==) ()) (yw3110 : yw3111))",fontsize=16,color="black",shape="box"];49 -> 53[label="",style="solid", color="black", weight=3]; 13.09/5.16 50[label="span2Ys0 ((==) ()) [] (span3 ((==) ()) [])",fontsize=16,color="black",shape="box"];50 -> 54[label="",style="solid", color="black", weight=3]; 13.09/5.16 51[label="span2Zs0 ((==) ()) (yw3110 : yw3111) (span2 ((==) ()) (yw3110 : yw3111))",fontsize=16,color="black",shape="box"];51 -> 55[label="",style="solid", color="black", weight=3]; 13.09/5.16 52[label="span2Zs0 ((==) ()) [] (span3 ((==) ()) [])",fontsize=16,color="black",shape="box"];52 -> 56[label="",style="solid", color="black", weight=3]; 13.09/5.16 53[label="span2Ys0 ((==) ()) (yw3110 : yw3111) (span2Span1 ((==) ()) yw3111 ((==) ()) yw3110 yw3111 ((==) () yw3110))",fontsize=16,color="burlywood",shape="box"];91[label="yw3110/()",fontsize=10,color="white",style="solid",shape="box"];53 -> 91[label="",style="solid", color="burlywood", weight=9]; 13.09/5.16 91 -> 57[label="",style="solid", color="burlywood", weight=3]; 13.09/5.16 54[label="span2Ys0 ((==) ()) [] ([],[])",fontsize=16,color="black",shape="box"];54 -> 58[label="",style="solid", color="black", weight=3]; 13.09/5.16 55[label="span2Zs0 ((==) ()) (yw3110 : yw3111) (span2Span1 ((==) ()) yw3111 ((==) ()) yw3110 yw3111 ((==) () yw3110))",fontsize=16,color="burlywood",shape="box"];92[label="yw3110/()",fontsize=10,color="white",style="solid",shape="box"];55 -> 92[label="",style="solid", color="burlywood", weight=9]; 13.09/5.16 92 -> 59[label="",style="solid", color="burlywood", weight=3]; 13.09/5.16 56[label="span2Zs0 ((==) ()) [] ([],[])",fontsize=16,color="black",shape="box"];56 -> 60[label="",style="solid", color="black", weight=3]; 13.09/5.16 57[label="span2Ys0 ((==) ()) (() : yw3111) (span2Span1 ((==) ()) yw3111 ((==) ()) () yw3111 ((==) () ()))",fontsize=16,color="black",shape="box"];57 -> 61[label="",style="solid", color="black", weight=3]; 13.09/5.16 58[label="[]",fontsize=16,color="green",shape="box"];59[label="span2Zs0 ((==) ()) (() : yw3111) (span2Span1 ((==) ()) yw3111 ((==) ()) () yw3111 ((==) () ()))",fontsize=16,color="black",shape="box"];59 -> 62[label="",style="solid", color="black", weight=3]; 13.09/5.16 60[label="[]",fontsize=16,color="green",shape="box"];61[label="span2Ys0 ((==) ()) (() : yw3111) (span2Span1 ((==) ()) yw3111 ((==) ()) () yw3111 True)",fontsize=16,color="black",shape="box"];61 -> 63[label="",style="solid", color="black", weight=3]; 13.09/5.16 62[label="span2Zs0 ((==) ()) (() : yw3111) (span2Span1 ((==) ()) yw3111 ((==) ()) () yw3111 True)",fontsize=16,color="black",shape="box"];62 -> 64[label="",style="solid", color="black", weight=3]; 13.09/5.16 63 -> 65[label="",style="dashed", color="red", weight=0]; 13.09/5.16 63[label="span2Ys0 ((==) ()) (() : yw3111) (() : span2Ys ((==) ()) yw3111,span2Zs ((==) ()) yw3111)",fontsize=16,color="magenta"];63 -> 66[label="",style="dashed", color="magenta", weight=3]; 13.09/5.16 63 -> 67[label="",style="dashed", color="magenta", weight=3]; 13.09/5.16 64 -> 68[label="",style="dashed", color="red", weight=0]; 13.09/5.16 64[label="span2Zs0 ((==) ()) (() : yw3111) (() : span2Ys ((==) ()) yw3111,span2Zs ((==) ()) yw3111)",fontsize=16,color="magenta"];64 -> 69[label="",style="dashed", color="magenta", weight=3]; 13.09/5.16 64 -> 70[label="",style="dashed", color="magenta", weight=3]; 13.09/5.16 66 -> 40[label="",style="dashed", color="red", weight=0]; 13.09/5.16 66[label="span2Zs ((==) ()) yw3111",fontsize=16,color="magenta"];66 -> 71[label="",style="dashed", color="magenta", weight=3]; 13.09/5.16 67 -> 39[label="",style="dashed", color="red", weight=0]; 13.09/5.16 67[label="span2Ys ((==) ()) yw3111",fontsize=16,color="magenta"];67 -> 72[label="",style="dashed", color="magenta", weight=3]; 13.09/5.16 65[label="span2Ys0 ((==) ()) (() : yw3111) (() : yw5,yw4)",fontsize=16,color="black",shape="triangle"];65 -> 73[label="",style="solid", color="black", weight=3]; 13.09/5.16 69 -> 40[label="",style="dashed", color="red", weight=0]; 13.09/5.16 69[label="span2Zs ((==) ()) yw3111",fontsize=16,color="magenta"];69 -> 74[label="",style="dashed", color="magenta", weight=3]; 13.09/5.16 70 -> 39[label="",style="dashed", color="red", weight=0]; 13.09/5.16 70[label="span2Ys ((==) ()) yw3111",fontsize=16,color="magenta"];70 -> 75[label="",style="dashed", color="magenta", weight=3]; 13.09/5.16 68[label="span2Zs0 ((==) ()) (() : yw3111) (() : yw7,yw6)",fontsize=16,color="black",shape="triangle"];68 -> 76[label="",style="solid", color="black", weight=3]; 13.09/5.16 71[label="yw3111",fontsize=16,color="green",shape="box"];72[label="yw3111",fontsize=16,color="green",shape="box"];73[label="() : yw5",fontsize=16,color="green",shape="box"];74[label="yw3111",fontsize=16,color="green",shape="box"];75[label="yw3111",fontsize=16,color="green",shape="box"];76[label="yw6",fontsize=16,color="green",shape="box"];} 13.09/5.16 13.09/5.16 ---------------------------------------- 13.09/5.16 13.09/5.16 (10) 13.09/5.16 Complex Obligation (AND) 13.09/5.16 13.09/5.16 ---------------------------------------- 13.09/5.16 13.09/5.16 (11) 13.09/5.16 Obligation: 13.09/5.16 Q DP problem: 13.09/5.16 The TRS P consists of the following rules: 13.09/5.16 13.09/5.16 new_span2Ys(:(@0, yw3111)) -> new_span2Zs(yw3111) 13.09/5.16 new_span2Zs(:(@0, yw3111)) -> new_span2Zs(yw3111) 13.09/5.16 new_span2Zs(:(@0, yw3111)) -> new_span2Ys(yw3111) 13.09/5.16 new_span2Ys(:(@0, yw3111)) -> new_span2Ys(yw3111) 13.09/5.16 13.09/5.16 R is empty. 13.09/5.16 Q is empty. 13.09/5.16 We have to consider all minimal (P,Q,R)-chains. 13.09/5.16 ---------------------------------------- 13.09/5.16 13.09/5.16 (12) QDPSizeChangeProof (EQUIVALENT) 13.09/5.16 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. 13.09/5.16 13.09/5.16 From the DPs we obtained the following set of size-change graphs: 13.09/5.16 *new_span2Zs(:(@0, yw3111)) -> new_span2Ys(yw3111) 13.09/5.16 The graph contains the following edges 1 > 1 13.09/5.16 13.09/5.16 13.09/5.16 *new_span2Zs(:(@0, yw3111)) -> new_span2Zs(yw3111) 13.09/5.16 The graph contains the following edges 1 > 1 13.09/5.16 13.09/5.16 13.09/5.16 *new_span2Ys(:(@0, yw3111)) -> new_span2Ys(yw3111) 13.09/5.16 The graph contains the following edges 1 > 1 13.09/5.16 13.09/5.16 13.09/5.16 *new_span2Ys(:(@0, yw3111)) -> new_span2Zs(yw3111) 13.09/5.16 The graph contains the following edges 1 > 1 13.09/5.16 13.09/5.16 13.09/5.16 ---------------------------------------- 13.09/5.16 13.09/5.16 (13) 13.09/5.16 YES 13.09/5.16 13.09/5.16 ---------------------------------------- 13.09/5.16 13.09/5.16 (14) 13.09/5.16 Obligation: 13.09/5.16 Q DP problem: 13.09/5.16 The TRS P consists of the following rules: 13.09/5.16 13.09/5.16 new_groupBy(:(yw30, yw31)) -> new_groupBy(new_groupByZs1(yw30, yw31)) 13.09/5.16 13.09/5.16 The TRS R consists of the following rules: 13.09/5.16 13.09/5.16 new_span2Ys0(yw3111, yw5, yw4) -> :(@0, yw5) 13.09/5.16 new_span2Ys1(:(@0, yw3111)) -> new_span2Ys0(yw3111, new_span2Ys1(yw3111), new_span2Zs0(yw3111)) 13.09/5.16 new_span2Zs0(:(@0, yw3111)) -> new_span2Zs00(yw3111, new_span2Ys1(yw3111), new_span2Zs0(yw3111)) 13.09/5.16 new_groupByZs1(@0, :(@0, yw311)) -> new_span2Zs0(yw311) 13.09/5.16 new_span2Zs0([]) -> [] 13.09/5.16 new_groupByZs1(yw30, []) -> [] 13.09/5.16 new_span2Ys1([]) -> [] 13.09/5.16 new_span2Zs00(yw3111, yw7, yw6) -> yw6 13.09/5.16 13.09/5.16 The set Q consists of the following terms: 13.09/5.16 13.09/5.16 new_span2Zs0([]) 13.09/5.16 new_groupByZs1(x0, []) 13.09/5.16 new_span2Zs0(:(@0, x0)) 13.09/5.16 new_span2Ys1([]) 13.09/5.16 new_span2Ys1(:(@0, x0)) 13.09/5.16 new_span2Zs00(x0, x1, x2) 13.09/5.16 new_span2Ys0(x0, x1, x2) 13.09/5.16 new_groupByZs1(@0, :(@0, x0)) 13.09/5.16 13.09/5.16 We have to consider all minimal (P,Q,R)-chains. 13.09/5.16 ---------------------------------------- 13.09/5.16 13.09/5.16 (15) QDPSizeChangeProof (EQUIVALENT) 13.09/5.16 We used the following order together with the size-change analysis [AAECC05] to show that there are no infinite chains for this DP problem. 13.09/5.16 13.09/5.16 Order:Polynomial interpretation [POLO]: 13.09/5.16 13.09/5.16 POL(:(x_1, x_2)) = 1 + x_2 13.09/5.16 POL(@0) = 0 13.09/5.16 POL([]) = 1 13.09/5.16 POL(new_groupByZs1(x_1, x_2)) = x_2 13.09/5.16 POL(new_span2Ys0(x_1, x_2, x_3)) = 1 + x_2 13.09/5.16 POL(new_span2Ys1(x_1)) = 1 + x_1 13.09/5.16 POL(new_span2Zs0(x_1)) = x_1 13.09/5.16 POL(new_span2Zs00(x_1, x_2, x_3)) = x_3 13.09/5.16 13.09/5.16 13.09/5.16 13.09/5.16 13.09/5.16 From the DPs we obtained the following set of size-change graphs: 13.09/5.16 *new_groupBy(:(yw30, yw31)) -> new_groupBy(new_groupByZs1(yw30, yw31)) (allowed arguments on rhs = {1}) 13.09/5.16 The graph contains the following edges 1 > 1 13.09/5.16 13.09/5.16 13.09/5.16 13.09/5.16 We oriented the following set of usable rules [AAECC05,FROCOS05]. 13.09/5.16 13.09/5.16 new_span2Zs00(yw3111, yw7, yw6) -> yw6 13.09/5.16 new_span2Zs0([]) -> [] 13.09/5.16 new_span2Zs0(:(@0, yw3111)) -> new_span2Zs00(yw3111, new_span2Ys1(yw3111), new_span2Zs0(yw3111)) 13.09/5.16 new_span2Ys1([]) -> [] 13.09/5.16 new_span2Ys1(:(@0, yw3111)) -> new_span2Ys0(yw3111, new_span2Ys1(yw3111), new_span2Zs0(yw3111)) 13.09/5.16 new_span2Ys0(yw3111, yw5, yw4) -> :(@0, yw5) 13.09/5.16 new_groupByZs1(yw30, []) -> [] 13.09/5.16 new_groupByZs1(@0, :(@0, yw311)) -> new_span2Zs0(yw311) 13.09/5.16 13.09/5.16 ---------------------------------------- 13.09/5.16 13.09/5.16 (16) 13.09/5.16 YES 13.26/5.20 EOF