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