/export/starexec/sandbox2/solver/bin/starexec_run_default /export/starexec/sandbox2/benchmark/theBenchmark.xml /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- YES We split firstr-order part and higher-order part, and do modular checking by a general modularity. ******** FO SN check ******** Check SN using NaTT (Nagoya Termination Tool) Input TRS: 1: le(0(),Y) -> true() 2: le(s(X),0()) -> false() 3: le(s(X),s(Y)) -> le(X,Y) 4: minus(X,0()) -> X 5: minus(s(X),s(Y)) -> minus(X,Y) 6: gcd(0(),Y) -> 0() 7: gcd(s(X),0()) -> 0() 8: gcd(s(X),s(Y)) -> if(le(Y,X),s(X),s(Y)) 9: if(true(),s(X),s(Y)) -> gcd(minus(X,Y),s(Y)) 10: if(false(),s(X),s(Y)) -> gcd(minus(Y,X),s(X)) 11: _(X1,X2) -> X1 12: _(X1,X2) -> X2 Number of strict rules: 12 Direct POLO(bPol) ... failed. Uncurrying ... failed. Dependency Pairs: #1: #if(true(),s(X),s(Y)) -> #gcd(minus(X,Y),s(Y)) #2: #if(true(),s(X),s(Y)) -> #minus(X,Y) #3: #if(false(),s(X),s(Y)) -> #gcd(minus(Y,X),s(X)) #4: #if(false(),s(X),s(Y)) -> #minus(Y,X) #5: #minus(s(X),s(Y)) -> #minus(X,Y) #6: #le(s(X),s(Y)) -> #le(X,Y) #7: #gcd(s(X),s(Y)) -> #if(le(Y,X),s(X),s(Y)) #8: #gcd(s(X),s(Y)) -> #le(Y,X) Number of SCCs: 3, DPs: 5 SCC { #6 } POLO(Sum)... succeeded. le w: 0 s w: x1 + 1 #le w: x1 minus w: 0 gcd w: 0 false w: 0 _ w: 0 true w: 0 0 w: 0 if w: 0 #minus w: 0 #_ w: 0 #if w: 0 #gcd w: 0 USABLE RULES: { } Removed DPs: #6 Number of SCCs: 2, DPs: 4 SCC { #5 } POLO(Sum)... succeeded. le w: 0 s w: x1 + 1 #le w: 0 minus w: 0 gcd w: 0 false w: 0 _ w: 0 true w: 0 0 w: 0 if w: 0 #minus w: x1 #_ w: 0 #if w: 0 #gcd w: 0 USABLE RULES: { } Removed DPs: #5 Number of SCCs: 1, DPs: 3 SCC { #1 #3 #7 } POLO(Sum)... succeeded. le w: x1 + x2 + 1 s w: x1 + 3 #le w: 0 minus w: x1 + 1 gcd w: 0 false w: 1148 _ w: 0 true w: 1145 0 w: 1143 if w: 0 #minus w: 0 #_ w: 0 #if w: x2 + x3 #gcd w: x1 + x2 + 1 USABLE RULES: { 4 5 } Removed DPs: #1 #3 #7 Number of SCCs: 0, DPs: 0 ... Input TRS: 1: le(0(),Y) -> true() 2: le(s(X),0()) -> false() 3: le(s(X),s(Y)) -> le(X,Y) 4: minus(X,0()) -> X 5: minus(s(X),s(Y)) -> minus(X,Y) 6: gcd(0(),Y) -> 0() 7: gcd(s(X),0()) -> 0() 8: gcd(s(X),s(Y)) -> if(le(Y,X),s(X),s(Y)) 9: if(true(),s(X),s(Y)) -> gcd(minus(X,Y),s(Y)) 10: if(false(),s(X),s(Y)) -> gcd(minus(Y,X),s(X)) 11: _(X1,X2) -> X1 12: _(X1,X2) -> X2 Number of strict rules: 12 Direct POLO(bPol) ... failed. Uncurrying ... failed. Dependency Pairs: #1: #if(true(),s(X),s(Y)) -> #gcd(minus(X,Y),s(Y)) #2: #if(true(),s(X),s(Y)) -> #minus(X,Y) #3: #if(false(),s(X),s(Y)) -> #gcd(minus(Y,X),s(X)) #4: #if(false(),s(X),s(Y)) -> #minus(Y,X) #5: #minus(s(X),s(Y)) -> #minus(X,Y) #6: #le(s(X),s(Y)) -> #le(X,Y) #7: #gcd(s(X),s(Y)) -> #if(le(Y,X),s(X),s(Y)) #8: #gcd(s(X),s(Y)) -> #le(Y,X) Number of SCCs: 3, DPs: 5 SCC { #6 } POLO(Sum)... succeeded. le w: 0 s w: x1 + 1 #le w: x1 minus w: 0 gcd w: 0 false w: 0 _ w: 0 true w: 0 0 w: 0 if w: 0 #minus w: 0 #_ w: 0 #if w: 0 #gcd w: 0 USABLE RULES: { } Removed DPs: #6 Number of SCCs: 2, DPs: 4 SCC { #5 } POLO(Sum)... succeeded. le w: 0 s w: x1 + 1 #le w: 0 minus w: 0 gcd w: 0 false w: 0 _ w: 0 true w: 0 0 w: 0 if w: 0 #minus w: x1 #_ w: 0 #if w: 0 #gcd w: 0 USABLE RULES: { } Removed DPs: #5 Number of SCCs: 1, DPs: 3 SCC { #1 #3 #7 } POLO(Sum)... succeeded. le w: x1 + x2 + 1 s w: x1 + 3 #le w: 0 minus w: x1 + 1 gcd w: 0 false w: 1148 _ w: 0 true w: 1145 0 w: 1143 if w: 0 #minus w: 0 #_ w: 0 #if w: x2 + x3 #gcd w: x1 + x2 + 1 USABLE RULES: { 4 5 } Removed DPs: #1 #3 #7 Number of SCCs: 0, DPs: 0 >>YES ******** Signature ******** zipWith : (((nat,nat) -> nat),list,list) -> list nil : list cons : (nat,list) -> list gcdlists : (list,list) -> list gcd : (nat,nat) -> nat ******** Computation rules ******** (11) zipWith(F,Xs,nil) => nil (12) zipWith(F,nil,Ys) => nil (13) zipWith(F,cons(X,Xs),cons(Y,Ys)) => cons(F[X,Y],zipWith(F,Xs,Ys)) (14) gcdlists(Xs,Ys) => zipWith(x.y.gcd(x,y),Xs,Ys) ******** General Schema criterion ******** Found constructors: 0, s, true, false, nil, cons Checking type order >>OK Checking positivity of constructors >>OK Checking function dependency >>Regared as equal: gcdlists, gcd, if, le Checking (1) le(0,Y) => true (fun le>true) >>True Checking (2) le(s(X),0) => false (fun le>false) >>True Checking (3) le(s(X),s(Y)) => le(X,Y) (fun le=le) subterm comparison of args w. LR LR (meta X)[is acc in s(X),s(Y)] [is positive in s(X)] [is acc in X] (meta Y)[is acc in s(X),s(Y)] [is positive in s(X)] [is positive in s(Y)] [is acc in Y] >>True Checking (4) minus(X,0) => X (meta X)[is acc in X,0] [is acc in X] >>True Checking (5) minus(s(X),s(Y)) => minus(X,Y) (fun minus=minus) subterm comparison of args w. LR LR (meta X)[is acc in s(X),s(Y)] [is positive in s(X)] [is acc in X] (meta Y)[is acc in s(X),s(Y)] [is positive in s(X)] [is positive in s(Y)] [is acc in Y] >>True Checking (6) gcd(0,Y) => 0 (fun gcd>0) >>True Checking (7) gcd(s(X),0) => 0 (fun gcd>0) >>True Checking (8) gcd(s(X),s(Y)) => if(le(Y,X),s(X),s(Y)) (fun gcd=if) subterm comparison of args w. LR LR >>False Try again using status RL Checking (1) le(0,Y) => true (fun le>true) >>True Checking (2) le(s(X),0) => false (fun le>false) >>True Checking (3) le(s(X),s(Y)) => le(X,Y) (fun le=le) subterm comparison of args w. RL RL (meta X)[is acc in s(X),s(Y)] [is positive in s(X)] [is acc in X] (meta Y)[is acc in s(X),s(Y)] [is positive in s(X)] [is positive in s(Y)] [is acc in Y] >>True Checking (4) minus(X,0) => X (meta X)[is acc in X,0] [is acc in X] >>True Checking (5) minus(s(X),s(Y)) => minus(X,Y) (fun minus=minus) subterm comparison of args w. RL RL (meta X)[is acc in s(X),s(Y)] [is positive in s(X)] [is acc in X] (meta Y)[is acc in s(X),s(Y)] [is positive in s(X)] [is positive in s(Y)] [is acc in Y] >>True Checking (6) gcd(0,Y) => 0 (fun gcd>0) >>True Checking (7) gcd(s(X),0) => 0 (fun gcd>0) >>True Checking (8) gcd(s(X),s(Y)) => if(le(Y,X),s(X),s(Y)) (fun gcd=if) subterm comparison of args w. RL RL >>False Try again using status Mul Checking (1) le(0,Y) => true (fun le>true) >>True Checking (2) le(s(X),0) => false (fun le>false) >>True Checking (3) le(s(X),s(Y)) => le(X,Y) (fun le=le) subterm comparison of args w. Mul Mul (meta X)[is acc in s(X),s(Y)] [is positive in s(X)] [is acc in X] (meta Y)[is acc in s(X),s(Y)] [is positive in s(X)] [is positive in s(Y)] [is acc in Y] >>True Checking (4) minus(X,0) => X (meta X)[is acc in X,0] [is acc in X] >>True Checking (5) minus(s(X),s(Y)) => minus(X,Y) (fun minus=minus) subterm comparison of args w. Mul Mul (meta X)[is acc in s(X),s(Y)] [is positive in s(X)] [is acc in X] (meta Y)[is acc in s(X),s(Y)] [is positive in s(X)] [is positive in s(Y)] [is acc in Y] >>True Checking (6) gcd(0,Y) => 0 (fun gcd>0) >>True Checking (7) gcd(s(X),0) => 0 (fun gcd>0) >>True Checking (8) gcd(s(X),s(Y)) => if(le(Y,X),s(X),s(Y)) (fun gcd=if) subterm comparison of args w. Mul Mul >>False Found constructors: nil, cons, gcd Checking type order >>OK Checking positivity of constructors >>OK Checking function dependency >>OK Checking (11) zipWith(F,Xs,nil) => nil (fun zipWith>nil) >>True Checking (12) zipWith(F,nil,Ys) => nil (fun zipWith>nil) >>True Checking (13) zipWith(F,cons(X,Xs),cons(Y,Ys)) => cons(F[X,Y],zipWith(F,Xs,Ys)) (fun zipWith>cons) (meta F)[is acc in F,cons(X,Xs),cons(Y,Ys)] [is acc in F] (meta X)[is acc in F,cons(X,Xs),cons(Y,Ys)] [is positive in cons(X,Xs)] [is acc in X] (meta Y)[is acc in F,cons(X,Xs),cons(Y,Ys)] [is positive in cons(X,Xs)] [is positive in cons(Y,Ys)] [is acc in Y] (fun zipWith=zipWith) subterm comparison of args w. LR LR (meta F)[is acc in F,cons(X,Xs),cons(Y,Ys)] [is acc in F] (meta Xs)[is acc in F,cons(X,Xs),cons(Y,Ys)] [is positive in cons(X,Xs)] [is acc in Xs] (meta Ys)[is acc in F,cons(X,Xs),cons(Y,Ys)] [is positive in cons(X,Xs)] [is positive in cons(Y,Ys)] [is acc in Ys] >>True Checking (14) gcdlists(Xs,Ys) => zipWith(x.y.gcd(x,y),Xs,Ys) (fun gcdlists>zipWith) (fun gcdlists>gcd) (meta Xs)[is acc in Xs,Ys] [is acc in Xs] (meta Ys)[is acc in Xs,Ys] [is acc in Ys] >>True #SN! ******** Signature ******** 0 : nat s : nat -> nat le : (nat,nat) -> bool gcd : (nat,nat) -> nat minus : (nat,nat) -> nat true : bool false : bool if : (bool,nat,nat) -> nat nil : list cons : (nat,list) -> list zipWith : (((nat,nat) -> nat),list,list) -> list gcdlists : (list,list) -> list ******** Computation Rules ******** (1) le(0,Y) => true (2) le(s(X),0) => false (3) le(s(X),s(Y)) => le(X,Y) (4) minus(X,0) => X (5) minus(s(X),s(Y)) => minus(X,Y) (6) gcd(0,Y) => 0 (7) gcd(s(X),0) => 0 (8) gcd(s(X),s(Y)) => if(le(Y,X),s(X),s(Y)) (9) if(true,s(X),s(Y)) => gcd(minus(X,Y),s(Y)) (10) if(false,s(X),s(Y)) => gcd(minus(Y,X),s(X)) (11) zipWith(F,Xs,nil) => nil (12) zipWith(F,nil,Ys) => nil (13) zipWith(F,cons(X,Xs),cons(Y,Ys)) => cons(F[X,Y],zipWith(F,Xs,Ys)) (14) gcdlists(Xs,Ys) => zipWith(x.y.gcd(x,y),Xs,Ys) YES