/export/starexec/sandbox/solver/bin/starexec_run_standard /export/starexec/sandbox/benchmark/theBenchmark.hs /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- YES proof of /export/starexec/sandbox/benchmark/theBenchmark.hs # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty H-Termination with start terms of the given HASKELL could be proven: (0) HASKELL (1) CR [EQUIVALENT, 0 ms] (2) HASKELL (3) BR [EQUIVALENT, 0 ms] (4) HASKELL (5) COR [EQUIVALENT, 24 ms] (6) HASKELL (7) Narrow [SOUND, 0 ms] (8) QDP (9) QDPSizeChangeProof [EQUIVALENT, 0 ms] (10) 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; insert :: Ord a => a -> [a] -> [a]; insert e ls = insertBy compare e ls; insertBy :: (a -> a -> Ordering) -> a -> [a] -> [a]; insertBy _ x [] = x : []; insertBy cmp x ys@(y : ys') = case cmp x y of { GT-> y : insertBy cmp x ys'; _-> x : ys; } ; } module Main where { import qualified List; import qualified Maybe; import qualified Prelude; } ---------------------------------------- (1) CR (EQUIVALENT) Case Reductions: The following Case expression "case cmp x y of { GT -> y : insertBy cmp x ys'; _ -> x : ys} " is transformed to "insertBy0 y cmp x ys' ys GT = y : insertBy cmp x ys'; insertBy0 y cmp x ys' ys _ = x : 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; insert :: Ord a => a -> [a] -> [a]; insert e ls = insertBy compare e ls; insertBy :: (a -> a -> Ordering) -> a -> [a] -> [a]; insertBy _ x [] = x : []; insertBy cmp x ys@(y : ys') = insertBy0 y cmp x ys' ys (cmp x y); insertBy0 y cmp x ys' ys GT = y : insertBy cmp x ys'; insertBy0 y cmp x ys' ys _ = x : ys; } 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 "ys@(wu : wv)" is replaced by the following term "wu : wv" ---------------------------------------- (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; insert :: Ord a => a -> [a] -> [a]; insert e ls = insertBy compare e ls; insertBy :: (a -> a -> Ordering) -> a -> [a] -> [a]; insertBy vz x [] = x : []; insertBy cmp x (wu : wv) = insertBy0 wu cmp x wv (wu : wv) (cmp x wu); insertBy0 y cmp x ys' ys GT = y : insertBy cmp x ys'; insertBy0 y cmp x ys' ys vy = x : ys; } 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; " ---------------------------------------- (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; insert :: Ord a => a -> [a] -> [a]; insert e ls = insertBy compare e ls; insertBy :: (a -> a -> Ordering) -> a -> [a] -> [a]; insertBy vz x [] = x : []; insertBy cmp x (wu : wv) = insertBy0 wu cmp x wv (wu : wv) (cmp x wu); insertBy0 y cmp x ys' ys GT = y : insertBy cmp x ys'; insertBy0 y cmp x ys' ys vy = x : ys; } module Main where { import qualified List; import qualified Maybe; import qualified Prelude; } ---------------------------------------- (7) Narrow (SOUND) Haskell To QDPs digraph dp_graph { node [outthreshold=100, inthreshold=100];1[label="List.insert",fontsize=16,color="grey",shape="box"];1 -> 3[label="",style="dashed", color="grey", weight=3]; 3[label="List.insert ww3",fontsize=16,color="grey",shape="box"];3 -> 4[label="",style="dashed", color="grey", weight=3]; 4[label="List.insert ww3 ww4",fontsize=16,color="black",shape="triangle"];4 -> 5[label="",style="solid", color="black", weight=3]; 5[label="List.insertBy compare ww3 ww4",fontsize=16,color="burlywood",shape="box"];171[label="ww4/ww40 : ww41",fontsize=10,color="white",style="solid",shape="box"];5 -> 171[label="",style="solid", color="burlywood", weight=9]; 171 -> 6[label="",style="solid", color="burlywood", weight=3]; 172[label="ww4/[]",fontsize=10,color="white",style="solid",shape="box"];5 -> 172[label="",style="solid", color="burlywood", weight=9]; 172 -> 7[label="",style="solid", color="burlywood", weight=3]; 6[label="List.insertBy compare ww3 (ww40 : ww41)",fontsize=16,color="black",shape="box"];6 -> 8[label="",style="solid", color="black", weight=3]; 7[label="List.insertBy compare ww3 []",fontsize=16,color="black",shape="box"];7 -> 9[label="",style="solid", color="black", weight=3]; 8[label="List.insertBy0 ww40 compare ww3 ww41 (ww40 : ww41) (compare ww3 ww40)",fontsize=16,color="black",shape="box"];8 -> 10[label="",style="solid", color="black", weight=3]; 9[label="ww3 : []",fontsize=16,color="green",shape="box"];10[label="List.insertBy0 ww40 primCmpChar ww3 ww41 (ww40 : ww41) (primCmpChar ww3 ww40)",fontsize=16,color="burlywood",shape="triangle"];173[label="ww3/Char ww30",fontsize=10,color="white",style="solid",shape="box"];10 -> 173[label="",style="solid", color="burlywood", weight=9]; 173 -> 11[label="",style="solid", color="burlywood", weight=3]; 11[label="List.insertBy0 ww40 primCmpChar (Char ww30) ww41 (ww40 : ww41) (primCmpChar (Char ww30) ww40)",fontsize=16,color="burlywood",shape="box"];174[label="ww40/Char ww400",fontsize=10,color="white",style="solid",shape="box"];11 -> 174[label="",style="solid", color="burlywood", weight=9]; 174 -> 12[label="",style="solid", color="burlywood", weight=3]; 12[label="List.insertBy0 (Char ww400) primCmpChar (Char ww30) ww41 (Char ww400 : ww41) (primCmpChar (Char ww30) (Char ww400))",fontsize=16,color="black",shape="box"];12 -> 13[label="",style="solid", color="black", weight=3]; 13[label="List.insertBy0 (Char ww400) primCmpChar (Char ww30) ww41 (Char ww400 : ww41) (primCmpNat ww30 ww400)",fontsize=16,color="burlywood",shape="box"];175[label="ww30/Succ ww300",fontsize=10,color="white",style="solid",shape="box"];13 -> 175[label="",style="solid", color="burlywood", weight=9]; 175 -> 14[label="",style="solid", color="burlywood", weight=3]; 176[label="ww30/Zero",fontsize=10,color="white",style="solid",shape="box"];13 -> 176[label="",style="solid", color="burlywood", weight=9]; 176 -> 15[label="",style="solid", color="burlywood", weight=3]; 14[label="List.insertBy0 (Char ww400) primCmpChar (Char (Succ ww300)) ww41 (Char ww400 : ww41) (primCmpNat (Succ ww300) ww400)",fontsize=16,color="burlywood",shape="box"];177[label="ww400/Succ ww4000",fontsize=10,color="white",style="solid",shape="box"];14 -> 177[label="",style="solid", color="burlywood", weight=9]; 177 -> 16[label="",style="solid", color="burlywood", weight=3]; 178[label="ww400/Zero",fontsize=10,color="white",style="solid",shape="box"];14 -> 178[label="",style="solid", color="burlywood", weight=9]; 178 -> 17[label="",style="solid", color="burlywood", weight=3]; 15[label="List.insertBy0 (Char ww400) primCmpChar (Char Zero) ww41 (Char ww400 : ww41) (primCmpNat Zero ww400)",fontsize=16,color="burlywood",shape="box"];179[label="ww400/Succ ww4000",fontsize=10,color="white",style="solid",shape="box"];15 -> 179[label="",style="solid", color="burlywood", weight=9]; 179 -> 18[label="",style="solid", color="burlywood", weight=3]; 180[label="ww400/Zero",fontsize=10,color="white",style="solid",shape="box"];15 -> 180[label="",style="solid", color="burlywood", weight=9]; 180 -> 19[label="",style="solid", color="burlywood", weight=3]; 16[label="List.insertBy0 (Char (Succ ww4000)) primCmpChar (Char (Succ ww300)) ww41 (Char (Succ ww4000) : ww41) (primCmpNat (Succ ww300) (Succ ww4000))",fontsize=16,color="black",shape="box"];16 -> 20[label="",style="solid", color="black", weight=3]; 17[label="List.insertBy0 (Char Zero) primCmpChar (Char (Succ ww300)) ww41 (Char Zero : ww41) (primCmpNat (Succ ww300) Zero)",fontsize=16,color="black",shape="box"];17 -> 21[label="",style="solid", color="black", weight=3]; 18[label="List.insertBy0 (Char (Succ ww4000)) primCmpChar (Char Zero) ww41 (Char (Succ ww4000) : ww41) (primCmpNat Zero (Succ ww4000))",fontsize=16,color="black",shape="box"];18 -> 22[label="",style="solid", color="black", weight=3]; 19[label="List.insertBy0 (Char Zero) primCmpChar (Char Zero) ww41 (Char Zero : ww41) (primCmpNat Zero Zero)",fontsize=16,color="black",shape="box"];19 -> 23[label="",style="solid", color="black", weight=3]; 20 -> 117[label="",style="dashed", color="red", weight=0]; 20[label="List.insertBy0 (Char (Succ ww4000)) primCmpChar (Char (Succ ww300)) ww41 (Char (Succ ww4000) : ww41) (primCmpNat ww300 ww4000)",fontsize=16,color="magenta"];20 -> 118[label="",style="dashed", color="magenta", weight=3]; 20 -> 119[label="",style="dashed", color="magenta", weight=3]; 20 -> 120[label="",style="dashed", color="magenta", weight=3]; 20 -> 121[label="",style="dashed", color="magenta", weight=3]; 20 -> 122[label="",style="dashed", color="magenta", weight=3]; 21[label="List.insertBy0 (Char Zero) primCmpChar (Char (Succ ww300)) ww41 (Char Zero : ww41) GT",fontsize=16,color="black",shape="box"];21 -> 26[label="",style="solid", color="black", weight=3]; 22[label="List.insertBy0 (Char (Succ ww4000)) primCmpChar (Char Zero) ww41 (Char (Succ ww4000) : ww41) LT",fontsize=16,color="black",shape="box"];22 -> 27[label="",style="solid", color="black", weight=3]; 23[label="List.insertBy0 (Char Zero) primCmpChar (Char Zero) ww41 (Char Zero : ww41) EQ",fontsize=16,color="black",shape="box"];23 -> 28[label="",style="solid", color="black", weight=3]; 118[label="ww4000",fontsize=16,color="green",shape="box"];119[label="ww300",fontsize=16,color="green",shape="box"];120[label="ww300",fontsize=16,color="green",shape="box"];121[label="ww41",fontsize=16,color="green",shape="box"];122[label="ww4000",fontsize=16,color="green",shape="box"];117[label="List.insertBy0 (Char (Succ ww17)) primCmpChar (Char (Succ ww18)) ww19 (Char (Succ ww17) : ww19) (primCmpNat ww20 ww21)",fontsize=16,color="burlywood",shape="triangle"];181[label="ww20/Succ ww200",fontsize=10,color="white",style="solid",shape="box"];117 -> 181[label="",style="solid", color="burlywood", weight=9]; 181 -> 153[label="",style="solid", color="burlywood", weight=3]; 182[label="ww20/Zero",fontsize=10,color="white",style="solid",shape="box"];117 -> 182[label="",style="solid", color="burlywood", weight=9]; 182 -> 154[label="",style="solid", color="burlywood", weight=3]; 26[label="Char Zero : List.insertBy primCmpChar (Char (Succ ww300)) ww41",fontsize=16,color="green",shape="box"];26 -> 33[label="",style="dashed", color="green", weight=3]; 27[label="Char Zero : Char (Succ ww4000) : ww41",fontsize=16,color="green",shape="box"];28[label="Char Zero : Char Zero : ww41",fontsize=16,color="green",shape="box"];153[label="List.insertBy0 (Char (Succ ww17)) primCmpChar (Char (Succ ww18)) ww19 (Char (Succ ww17) : ww19) (primCmpNat (Succ ww200) ww21)",fontsize=16,color="burlywood",shape="box"];183[label="ww21/Succ ww210",fontsize=10,color="white",style="solid",shape="box"];153 -> 183[label="",style="solid", color="burlywood", weight=9]; 183 -> 155[label="",style="solid", color="burlywood", weight=3]; 184[label="ww21/Zero",fontsize=10,color="white",style="solid",shape="box"];153 -> 184[label="",style="solid", color="burlywood", weight=9]; 184 -> 156[label="",style="solid", color="burlywood", weight=3]; 154[label="List.insertBy0 (Char (Succ ww17)) primCmpChar (Char (Succ ww18)) ww19 (Char (Succ ww17) : ww19) (primCmpNat Zero ww21)",fontsize=16,color="burlywood",shape="box"];185[label="ww21/Succ ww210",fontsize=10,color="white",style="solid",shape="box"];154 -> 185[label="",style="solid", color="burlywood", weight=9]; 185 -> 157[label="",style="solid", color="burlywood", weight=3]; 186[label="ww21/Zero",fontsize=10,color="white",style="solid",shape="box"];154 -> 186[label="",style="solid", color="burlywood", weight=9]; 186 -> 158[label="",style="solid", color="burlywood", weight=3]; 33[label="List.insertBy primCmpChar (Char (Succ ww300)) ww41",fontsize=16,color="burlywood",shape="triangle"];187[label="ww41/ww410 : ww411",fontsize=10,color="white",style="solid",shape="box"];33 -> 187[label="",style="solid", color="burlywood", weight=9]; 187 -> 38[label="",style="solid", color="burlywood", weight=3]; 188[label="ww41/[]",fontsize=10,color="white",style="solid",shape="box"];33 -> 188[label="",style="solid", color="burlywood", weight=9]; 188 -> 39[label="",style="solid", color="burlywood", weight=3]; 155[label="List.insertBy0 (Char (Succ ww17)) primCmpChar (Char (Succ ww18)) ww19 (Char (Succ ww17) : ww19) (primCmpNat (Succ ww200) (Succ ww210))",fontsize=16,color="black",shape="box"];155 -> 159[label="",style="solid", color="black", weight=3]; 156[label="List.insertBy0 (Char (Succ ww17)) primCmpChar (Char (Succ ww18)) ww19 (Char (Succ ww17) : ww19) (primCmpNat (Succ ww200) Zero)",fontsize=16,color="black",shape="box"];156 -> 160[label="",style="solid", color="black", weight=3]; 157[label="List.insertBy0 (Char (Succ ww17)) primCmpChar (Char (Succ ww18)) ww19 (Char (Succ ww17) : ww19) (primCmpNat Zero (Succ ww210))",fontsize=16,color="black",shape="box"];157 -> 161[label="",style="solid", color="black", weight=3]; 158[label="List.insertBy0 (Char (Succ ww17)) primCmpChar (Char (Succ ww18)) ww19 (Char (Succ ww17) : ww19) (primCmpNat Zero Zero)",fontsize=16,color="black",shape="box"];158 -> 162[label="",style="solid", color="black", weight=3]; 38[label="List.insertBy primCmpChar (Char (Succ ww300)) (ww410 : ww411)",fontsize=16,color="black",shape="box"];38 -> 45[label="",style="solid", color="black", weight=3]; 39[label="List.insertBy primCmpChar (Char (Succ ww300)) []",fontsize=16,color="black",shape="box"];39 -> 46[label="",style="solid", color="black", weight=3]; 159 -> 117[label="",style="dashed", color="red", weight=0]; 159[label="List.insertBy0 (Char (Succ ww17)) primCmpChar (Char (Succ ww18)) ww19 (Char (Succ ww17) : ww19) (primCmpNat ww200 ww210)",fontsize=16,color="magenta"];159 -> 163[label="",style="dashed", color="magenta", weight=3]; 159 -> 164[label="",style="dashed", color="magenta", weight=3]; 160[label="List.insertBy0 (Char (Succ ww17)) primCmpChar (Char (Succ ww18)) ww19 (Char (Succ ww17) : ww19) GT",fontsize=16,color="black",shape="box"];160 -> 165[label="",style="solid", color="black", weight=3]; 161[label="List.insertBy0 (Char (Succ ww17)) primCmpChar (Char (Succ ww18)) ww19 (Char (Succ ww17) : ww19) LT",fontsize=16,color="black",shape="box"];161 -> 166[label="",style="solid", color="black", weight=3]; 162[label="List.insertBy0 (Char (Succ ww17)) primCmpChar (Char (Succ ww18)) ww19 (Char (Succ ww17) : ww19) EQ",fontsize=16,color="black",shape="box"];162 -> 167[label="",style="solid", color="black", weight=3]; 45 -> 10[label="",style="dashed", color="red", weight=0]; 45[label="List.insertBy0 ww410 primCmpChar (Char (Succ ww300)) ww411 (ww410 : ww411) (primCmpChar (Char (Succ ww300)) ww410)",fontsize=16,color="magenta"];45 -> 52[label="",style="dashed", color="magenta", weight=3]; 45 -> 53[label="",style="dashed", color="magenta", weight=3]; 45 -> 54[label="",style="dashed", color="magenta", weight=3]; 46[label="Char (Succ ww300) : []",fontsize=16,color="green",shape="box"];163[label="ww200",fontsize=16,color="green",shape="box"];164[label="ww210",fontsize=16,color="green",shape="box"];165[label="Char (Succ ww17) : List.insertBy primCmpChar (Char (Succ ww18)) ww19",fontsize=16,color="green",shape="box"];165 -> 168[label="",style="dashed", color="green", weight=3]; 166[label="Char (Succ ww18) : Char (Succ ww17) : ww19",fontsize=16,color="green",shape="box"];167[label="Char (Succ ww18) : Char (Succ ww17) : ww19",fontsize=16,color="green",shape="box"];52[label="ww411",fontsize=16,color="green",shape="box"];53[label="ww410",fontsize=16,color="green",shape="box"];54[label="Char (Succ ww300)",fontsize=16,color="green",shape="box"];168 -> 33[label="",style="dashed", color="red", weight=0]; 168[label="List.insertBy primCmpChar (Char (Succ ww18)) ww19",fontsize=16,color="magenta"];168 -> 169[label="",style="dashed", color="magenta", weight=3]; 168 -> 170[label="",style="dashed", color="magenta", weight=3]; 169[label="ww18",fontsize=16,color="green",shape="box"];170[label="ww19",fontsize=16,color="green",shape="box"];} ---------------------------------------- (8) Obligation: Q DP problem: The TRS P consists of the following rules: new_insertBy00(Char(Succ(ww4000)), Char(Succ(ww300)), ww41) -> new_insertBy0(ww4000, ww300, ww41, ww300, ww4000) new_insertBy00(Char(Zero), Char(Succ(ww300)), :(ww410, ww411)) -> new_insertBy00(ww410, Char(Succ(ww300)), ww411) new_insertBy0(ww17, ww18, ww19, Succ(ww200), Succ(ww210)) -> new_insertBy0(ww17, ww18, ww19, ww200, ww210) new_insertBy0(ww17, ww18, ww19, Succ(ww200), Zero) -> new_insertBy(ww18, ww19) new_insertBy(ww300, :(ww410, ww411)) -> new_insertBy00(ww410, Char(Succ(ww300)), ww411) R is empty. Q is empty. We have to consider all minimal (P,Q,R)-chains. ---------------------------------------- (9) 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_insertBy00(Char(Succ(ww4000)), Char(Succ(ww300)), ww41) -> new_insertBy0(ww4000, ww300, ww41, ww300, ww4000) The graph contains the following edges 1 > 1, 2 > 2, 3 >= 3, 2 > 4, 1 > 5 *new_insertBy00(Char(Zero), Char(Succ(ww300)), :(ww410, ww411)) -> new_insertBy00(ww410, Char(Succ(ww300)), ww411) The graph contains the following edges 3 > 1, 2 >= 2, 3 > 3 *new_insertBy(ww300, :(ww410, ww411)) -> new_insertBy00(ww410, Char(Succ(ww300)), ww411) The graph contains the following edges 2 > 1, 2 > 3 *new_insertBy0(ww17, ww18, ww19, Succ(ww200), Succ(ww210)) -> new_insertBy0(ww17, ww18, ww19, ww200, ww210) The graph contains the following edges 1 >= 1, 2 >= 2, 3 >= 3, 4 > 4, 5 > 5 *new_insertBy0(ww17, ww18, ww19, Succ(ww200), Zero) -> new_insertBy(ww18, ww19) The graph contains the following edges 2 >= 1, 3 >= 2 ---------------------------------------- (10) YES