10.52/4.47 YES 12.62/5.03 proof of /export/starexec/sandbox/benchmark/theBenchmark.hs 12.62/5.03 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 12.62/5.03 12.62/5.03 12.62/5.03 H-Termination with start terms of the given HASKELL could be proven: 12.62/5.03 12.62/5.03 (0) HASKELL 12.62/5.03 (1) IFR [EQUIVALENT, 0 ms] 12.62/5.03 (2) HASKELL 12.62/5.03 (3) BR [EQUIVALENT, 0 ms] 12.62/5.03 (4) HASKELL 12.62/5.03 (5) COR [EQUIVALENT, 0 ms] 12.62/5.03 (6) HASKELL 12.62/5.03 (7) Narrow [SOUND, 0 ms] 12.62/5.03 (8) AND 12.62/5.03 (9) QDP 12.62/5.03 (10) QDPSizeChangeProof [EQUIVALENT, 0 ms] 12.62/5.03 (11) YES 12.62/5.03 (12) QDP 12.62/5.03 (13) QDPSizeChangeProof [EQUIVALENT, 0 ms] 12.62/5.03 (14) YES 12.62/5.03 12.62/5.03 12.62/5.03 ---------------------------------------- 12.62/5.03 12.62/5.03 (0) 12.62/5.03 Obligation: 12.62/5.03 mainModule Main 12.62/5.03 module Maybe where { 12.62/5.03 import qualified List; 12.62/5.03 import qualified Main; 12.62/5.03 import qualified Prelude; 12.62/5.03 } 12.62/5.03 module List where { 12.62/5.03 import qualified Main; 12.62/5.03 import qualified Maybe; 12.62/5.03 import qualified Prelude; 12.62/5.03 deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]; 12.62/5.03 deleteBy _ _ [] = []; 12.62/5.03 deleteBy eq x (y : ys) = if x `eq` y then ys else y : deleteBy eq x ys; 12.62/5.03 12.62/5.03 deleteFirstsBy :: (a -> a -> Bool) -> [a] -> [a] -> [a]; 12.62/5.03 deleteFirstsBy eq = foldl (flip (deleteBy eq)); 12.62/5.03 12.62/5.03 } 12.62/5.03 module Main where { 12.62/5.03 import qualified List; 12.62/5.03 import qualified Maybe; 12.62/5.03 import qualified Prelude; 12.62/5.03 } 12.62/5.03 12.62/5.03 ---------------------------------------- 12.62/5.03 12.62/5.03 (1) IFR (EQUIVALENT) 12.62/5.03 If Reductions: 12.62/5.03 The following If expression 12.62/5.03 "if eq x y then ys else y : deleteBy eq x ys" 12.62/5.03 is transformed to 12.62/5.03 "deleteBy0 ys y eq x True = ys; 12.62/5.03 deleteBy0 ys y eq x False = y : deleteBy eq x ys; 12.62/5.03 " 12.62/5.03 12.62/5.03 ---------------------------------------- 12.62/5.03 12.62/5.03 (2) 12.62/5.03 Obligation: 12.62/5.03 mainModule Main 12.62/5.03 module Maybe where { 12.62/5.03 import qualified List; 12.62/5.03 import qualified Main; 12.62/5.03 import qualified Prelude; 12.62/5.03 } 12.62/5.03 module List where { 12.62/5.03 import qualified Main; 12.62/5.03 import qualified Maybe; 12.62/5.03 import qualified Prelude; 12.62/5.03 deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]; 12.62/5.03 deleteBy _ _ [] = []; 12.62/5.03 deleteBy eq x (y : ys) = deleteBy0 ys y eq x (x `eq` y); 12.62/5.03 12.62/5.03 deleteBy0 ys y eq x True = ys; 12.62/5.03 deleteBy0 ys y eq x False = y : deleteBy eq x ys; 12.62/5.03 12.62/5.03 deleteFirstsBy :: (a -> a -> Bool) -> [a] -> [a] -> [a]; 12.62/5.03 deleteFirstsBy eq = foldl (flip (deleteBy eq)); 12.62/5.03 12.62/5.03 } 12.62/5.03 module Main where { 12.62/5.03 import qualified List; 12.62/5.03 import qualified Maybe; 12.62/5.03 import qualified Prelude; 12.62/5.03 } 12.62/5.03 12.62/5.03 ---------------------------------------- 12.62/5.03 12.62/5.03 (3) BR (EQUIVALENT) 12.62/5.03 Replaced joker patterns by fresh variables and removed binding patterns. 12.62/5.03 ---------------------------------------- 12.62/5.03 12.62/5.03 (4) 12.62/5.03 Obligation: 12.62/5.03 mainModule Main 12.62/5.03 module Maybe where { 12.62/5.03 import qualified List; 12.62/5.03 import qualified Main; 12.62/5.03 import qualified Prelude; 12.62/5.03 } 12.62/5.03 module List where { 12.62/5.03 import qualified Main; 12.62/5.03 import qualified Maybe; 12.62/5.03 import qualified Prelude; 12.62/5.03 deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]; 12.62/5.03 deleteBy vy vz [] = []; 12.62/5.03 deleteBy eq x (y : ys) = deleteBy0 ys y eq x (x `eq` y); 12.62/5.03 12.62/5.03 deleteBy0 ys y eq x True = ys; 12.62/5.03 deleteBy0 ys y eq x False = y : deleteBy eq x ys; 12.62/5.03 12.62/5.03 deleteFirstsBy :: (a -> a -> Bool) -> [a] -> [a] -> [a]; 12.62/5.03 deleteFirstsBy eq = foldl (flip (deleteBy eq)); 12.62/5.03 12.62/5.03 } 12.62/5.03 module Main where { 12.62/5.03 import qualified List; 12.62/5.03 import qualified Maybe; 12.62/5.03 import qualified Prelude; 12.62/5.03 } 12.62/5.03 12.62/5.03 ---------------------------------------- 12.62/5.03 12.62/5.03 (5) COR (EQUIVALENT) 12.62/5.03 Cond Reductions: 12.62/5.03 The following Function with conditions 12.62/5.03 "undefined |Falseundefined; 12.62/5.03 " 12.62/5.03 is transformed to 12.62/5.03 "undefined = undefined1; 12.62/5.03 " 12.62/5.03 "undefined0 True = undefined; 12.62/5.03 " 12.62/5.03 "undefined1 = undefined0 False; 12.62/5.03 " 12.62/5.03 12.62/5.03 ---------------------------------------- 12.62/5.03 12.62/5.03 (6) 12.62/5.03 Obligation: 12.62/5.03 mainModule Main 12.62/5.03 module Maybe where { 12.62/5.03 import qualified List; 12.62/5.03 import qualified Main; 12.62/5.03 import qualified Prelude; 12.62/5.03 } 12.62/5.03 module List where { 12.62/5.03 import qualified Main; 12.62/5.03 import qualified Maybe; 12.62/5.03 import qualified Prelude; 12.62/5.03 deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]; 12.62/5.03 deleteBy vy vz [] = []; 12.62/5.03 deleteBy eq x (y : ys) = deleteBy0 ys y eq x (x `eq` y); 12.62/5.03 12.62/5.03 deleteBy0 ys y eq x True = ys; 12.62/5.03 deleteBy0 ys y eq x False = y : deleteBy eq x ys; 12.62/5.03 12.62/5.03 deleteFirstsBy :: (a -> a -> Bool) -> [a] -> [a] -> [a]; 12.62/5.03 deleteFirstsBy eq = foldl (flip (deleteBy eq)); 12.62/5.03 12.62/5.03 } 12.62/5.03 module Main where { 12.62/5.03 import qualified List; 12.62/5.03 import qualified Maybe; 12.62/5.03 import qualified Prelude; 12.62/5.03 } 12.62/5.03 12.62/5.03 ---------------------------------------- 12.62/5.03 12.62/5.03 (7) Narrow (SOUND) 12.62/5.03 Haskell To QDPs 12.62/5.03 12.62/5.03 digraph dp_graph { 12.62/5.03 node [outthreshold=100, inthreshold=100];1[label="List.deleteFirstsBy",fontsize=16,color="grey",shape="box"];1 -> 3[label="",style="dashed", color="grey", weight=3]; 12.62/5.03 3[label="List.deleteFirstsBy wu3",fontsize=16,color="grey",shape="box"];3 -> 4[label="",style="dashed", color="grey", weight=3]; 12.62/5.03 4[label="List.deleteFirstsBy wu3 wu4",fontsize=16,color="grey",shape="box"];4 -> 5[label="",style="dashed", color="grey", weight=3]; 12.62/5.03 5[label="List.deleteFirstsBy wu3 wu4 wu5",fontsize=16,color="black",shape="triangle"];5 -> 6[label="",style="solid", color="black", weight=3]; 12.62/5.03 6[label="foldl (flip (List.deleteBy wu3)) wu4 wu5",fontsize=16,color="burlywood",shape="triangle"];30[label="wu5/wu50 : wu51",fontsize=10,color="white",style="solid",shape="box"];6 -> 30[label="",style="solid", color="burlywood", weight=9]; 12.62/5.03 30 -> 7[label="",style="solid", color="burlywood", weight=3]; 12.62/5.03 31[label="wu5/[]",fontsize=10,color="white",style="solid",shape="box"];6 -> 31[label="",style="solid", color="burlywood", weight=9]; 12.62/5.03 31 -> 8[label="",style="solid", color="burlywood", weight=3]; 12.62/5.03 7[label="foldl (flip (List.deleteBy wu3)) wu4 (wu50 : wu51)",fontsize=16,color="black",shape="box"];7 -> 9[label="",style="solid", color="black", weight=3]; 12.62/5.03 8[label="foldl (flip (List.deleteBy wu3)) wu4 []",fontsize=16,color="black",shape="box"];8 -> 10[label="",style="solid", color="black", weight=3]; 12.62/5.03 9 -> 6[label="",style="dashed", color="red", weight=0]; 12.62/5.03 9[label="foldl (flip (List.deleteBy wu3)) (flip (List.deleteBy wu3) wu4 wu50) wu51",fontsize=16,color="magenta"];9 -> 11[label="",style="dashed", color="magenta", weight=3]; 12.62/5.03 9 -> 12[label="",style="dashed", color="magenta", weight=3]; 12.62/5.03 10[label="wu4",fontsize=16,color="green",shape="box"];11[label="flip (List.deleteBy wu3) wu4 wu50",fontsize=16,color="black",shape="box"];11 -> 13[label="",style="solid", color="black", weight=3]; 12.62/5.03 12[label="wu51",fontsize=16,color="green",shape="box"];13[label="List.deleteBy wu3 wu50 wu4",fontsize=16,color="burlywood",shape="triangle"];32[label="wu4/wu40 : wu41",fontsize=10,color="white",style="solid",shape="box"];13 -> 32[label="",style="solid", color="burlywood", weight=9]; 12.62/5.03 32 -> 14[label="",style="solid", color="burlywood", weight=3]; 12.62/5.03 33[label="wu4/[]",fontsize=10,color="white",style="solid",shape="box"];13 -> 33[label="",style="solid", color="burlywood", weight=9]; 12.62/5.03 33 -> 15[label="",style="solid", color="burlywood", weight=3]; 12.62/5.03 14[label="List.deleteBy wu3 wu50 (wu40 : wu41)",fontsize=16,color="black",shape="box"];14 -> 16[label="",style="solid", color="black", weight=3]; 12.62/5.03 15[label="List.deleteBy wu3 wu50 []",fontsize=16,color="black",shape="box"];15 -> 17[label="",style="solid", color="black", weight=3]; 12.62/5.03 16 -> 18[label="",style="dashed", color="red", weight=0]; 12.62/5.03 16[label="List.deleteBy0 wu41 wu40 wu3 wu50 (wu3 wu50 wu40)",fontsize=16,color="magenta"];16 -> 19[label="",style="dashed", color="magenta", weight=3]; 12.62/5.03 17[label="[]",fontsize=16,color="green",shape="box"];19[label="wu3 wu50 wu40",fontsize=16,color="green",shape="box"];19 -> 24[label="",style="dashed", color="green", weight=3]; 12.62/5.03 19 -> 25[label="",style="dashed", color="green", weight=3]; 12.62/5.03 18[label="List.deleteBy0 wu41 wu40 wu3 wu50 wu6",fontsize=16,color="burlywood",shape="triangle"];34[label="wu6/False",fontsize=10,color="white",style="solid",shape="box"];18 -> 34[label="",style="solid", color="burlywood", weight=9]; 12.62/5.03 34 -> 22[label="",style="solid", color="burlywood", weight=3]; 12.62/5.03 35[label="wu6/True",fontsize=10,color="white",style="solid",shape="box"];18 -> 35[label="",style="solid", color="burlywood", weight=9]; 12.62/5.03 35 -> 23[label="",style="solid", color="burlywood", weight=3]; 12.62/5.03 24[label="wu50",fontsize=16,color="green",shape="box"];25[label="wu40",fontsize=16,color="green",shape="box"];22[label="List.deleteBy0 wu41 wu40 wu3 wu50 False",fontsize=16,color="black",shape="box"];22 -> 26[label="",style="solid", color="black", weight=3]; 12.62/5.03 23[label="List.deleteBy0 wu41 wu40 wu3 wu50 True",fontsize=16,color="black",shape="box"];23 -> 27[label="",style="solid", color="black", weight=3]; 12.62/5.03 26[label="wu40 : List.deleteBy wu3 wu50 wu41",fontsize=16,color="green",shape="box"];26 -> 28[label="",style="dashed", color="green", weight=3]; 12.62/5.03 27[label="wu41",fontsize=16,color="green",shape="box"];28 -> 13[label="",style="dashed", color="red", weight=0]; 12.62/5.03 28[label="List.deleteBy wu3 wu50 wu41",fontsize=16,color="magenta"];28 -> 29[label="",style="dashed", color="magenta", weight=3]; 12.62/5.03 29[label="wu41",fontsize=16,color="green",shape="box"];} 12.62/5.03 12.62/5.03 ---------------------------------------- 12.62/5.03 12.62/5.03 (8) 12.62/5.03 Complex Obligation (AND) 12.62/5.03 12.62/5.03 ---------------------------------------- 12.62/5.03 12.62/5.03 (9) 12.62/5.03 Obligation: 12.62/5.03 Q DP problem: 12.62/5.03 The TRS P consists of the following rules: 12.62/5.03 12.62/5.03 new_foldl(wu3, :(wu50, wu51), ba) -> new_foldl(wu3, wu51, ba) 12.62/5.03 12.62/5.03 R is empty. 12.62/5.03 Q is empty. 12.62/5.03 We have to consider all minimal (P,Q,R)-chains. 12.62/5.03 ---------------------------------------- 12.62/5.03 12.62/5.03 (10) QDPSizeChangeProof (EQUIVALENT) 12.62/5.03 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. 12.62/5.03 12.62/5.03 From the DPs we obtained the following set of size-change graphs: 12.62/5.03 *new_foldl(wu3, :(wu50, wu51), ba) -> new_foldl(wu3, wu51, ba) 12.62/5.03 The graph contains the following edges 1 >= 1, 2 > 2, 3 >= 3 12.62/5.03 12.62/5.03 12.62/5.03 ---------------------------------------- 12.62/5.03 12.62/5.03 (11) 12.62/5.03 YES 12.62/5.03 12.62/5.03 ---------------------------------------- 12.62/5.03 12.62/5.03 (12) 12.62/5.03 Obligation: 12.62/5.03 Q DP problem: 12.62/5.03 The TRS P consists of the following rules: 12.62/5.03 12.62/5.03 new_deleteBy(wu3, wu50, :(wu40, wu41), ba) -> new_deleteBy0(wu41, wu40, wu3, wu50, ba) 12.62/5.03 new_deleteBy0(wu41, wu40, wu3, wu50, ba) -> new_deleteBy(wu3, wu50, wu41, ba) 12.62/5.03 12.62/5.03 R is empty. 12.62/5.03 Q is empty. 12.62/5.03 We have to consider all minimal (P,Q,R)-chains. 12.62/5.03 ---------------------------------------- 12.62/5.03 12.62/5.03 (13) QDPSizeChangeProof (EQUIVALENT) 12.62/5.03 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. 12.62/5.03 12.62/5.03 From the DPs we obtained the following set of size-change graphs: 12.62/5.03 *new_deleteBy0(wu41, wu40, wu3, wu50, ba) -> new_deleteBy(wu3, wu50, wu41, ba) 12.62/5.03 The graph contains the following edges 3 >= 1, 4 >= 2, 1 >= 3, 5 >= 4 12.62/5.03 12.62/5.03 12.62/5.03 *new_deleteBy(wu3, wu50, :(wu40, wu41), ba) -> new_deleteBy0(wu41, wu40, wu3, wu50, ba) 12.62/5.03 The graph contains the following edges 3 > 1, 3 > 2, 1 >= 3, 2 >= 4, 4 >= 5 12.62/5.03 12.62/5.03 12.62/5.03 ---------------------------------------- 12.62/5.03 12.62/5.03 (14) 12.62/5.03 YES 12.66/5.07 EOF