/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: eq(0(),0()) -> true() 2: eq(0(),s(X)) -> false() 3: eq(s(Y),0()) -> false() 4: eq(s(V),s(U)) -> eq(V,U) 5: le(0(),W) -> true() 6: le(s(P),0()) -> false() 7: le(s(Y1),s(X1)) -> le(Y1,X1) 8: min(cons(0(),nil())) -> 0() 9: min(cons(s(U1),nil())) -> s(U1) 10: min(cons(W1,cons(V1,P1))) -> ifxb6220min(le(W1,V1),cons(W1,cons(V1,P1))) 11: ifxb6220min(true(),cons(Y2,cons(X2,U2))) -> min(cons(Y2,U2)) 12: ifxb6220min(false(),cons(W2,cons(V2,P2))) -> min(cons(V2,P2)) 13: replace(Y3,X3,nil()) -> nil() 14: replace(W3,V3,cons(U3,P3)) -> ifxb6220replace(eq(W3,U3),W3,V3,cons(U3,P3)) 15: ifxb6220replace(true(),U4,Y4,cons(X4,V4)) -> cons(Y4,V4) 16: ifxb6220replace(false(),X5,P4,cons(W4,Y5)) -> cons(W4,replace(X5,P4,Y5)) 17: sort(nil()) -> nil() 18: sort(cons(U5,V5)) -> cons(min(cons(U5,V5)),sort(replace(min(cons(U5,V5)),U5,V5))) 19: _(X1,X2) -> X1 20: _(X1,X2) -> X2 Number of strict rules: 20 Direct POLO(bPol) ... failed. Uncurrying min 1: eq(0(),0()) -> true() 2: eq(0(),s(X)) -> false() 3: eq(s(Y),0()) -> false() 4: eq(s(V),s(U)) -> eq(V,U) 5: le(0(),W) -> true() 6: le(s(P),0()) -> false() 7: le(s(Y1),s(X1)) -> le(Y1,X1) 8: min^1_cons(0(),nil()) -> 0() 9: min^1_cons(s(U1),nil()) -> s(U1) 10: min^1_cons(W1,cons(V1,P1)) -> ifxb6220min(le(W1,V1),cons(W1,cons(V1,P1))) 11: ifxb6220min(true(),cons(Y2,cons(X2,U2))) -> min^1_cons(Y2,U2) 12: ifxb6220min(false(),cons(W2,cons(V2,P2))) -> min^1_cons(V2,P2) 13: replace(Y3,X3,nil()) -> nil() 14: replace(W3,V3,cons(U3,P3)) -> ifxb6220replace(eq(W3,U3),W3,V3,cons(U3,P3)) 15: ifxb6220replace(true(),U4,Y4,cons(X4,V4)) -> cons(Y4,V4) 16: ifxb6220replace(false(),X5,P4,cons(W4,Y5)) -> cons(W4,replace(X5,P4,Y5)) 17: sort(nil()) -> nil() 18: sort(cons(U5,V5)) -> cons(min^1_cons(U5,V5),sort(replace(min^1_cons(U5,V5),U5,V5))) 19: _(X1,X2) -> X1 20: _(X1,X2) -> X2 21: min(cons(_1,_2)) ->= min^1_cons(_1,_2) Number of strict rules: 20 Direct POLO(bPol) ... failed. Dependency Pairs: #1: #ifxb6220min(true(),cons(Y2,cons(X2,U2))) -> #min^1_cons(Y2,U2) #2: #ifxb6220min(false(),cons(W2,cons(V2,P2))) -> #min^1_cons(V2,P2) #3: #replace(W3,V3,cons(U3,P3)) -> #ifxb6220replace(eq(W3,U3),W3,V3,cons(U3,P3)) #4: #replace(W3,V3,cons(U3,P3)) -> #eq(W3,U3) #5: #le(s(Y1),s(X1)) -> #le(Y1,X1) #6: #min^1_cons(W1,cons(V1,P1)) -> #ifxb6220min(le(W1,V1),cons(W1,cons(V1,P1))) #7: #min^1_cons(W1,cons(V1,P1)) -> #le(W1,V1) #8: #min(cons(_1,_2)) ->? #min^1_cons(_1,_2) #9: #ifxb6220replace(false(),X5,P4,cons(W4,Y5)) -> #replace(X5,P4,Y5) #10: #eq(s(V),s(U)) -> #eq(V,U) #11: #sort(cons(U5,V5)) -> #min^1_cons(U5,V5) #12: #sort(cons(U5,V5)) -> #sort(replace(min^1_cons(U5,V5),U5,V5)) #13: #sort(cons(U5,V5)) -> #replace(min^1_cons(U5,V5),U5,V5) #14: #sort(cons(U5,V5)) -> #min^1_cons(U5,V5) Number of SCCs: 5, DPs: 8 SCC { #10 } POLO(Sum)... succeeded. le w: 0 s w: x1 + 1 #le w: 0 ifxb6220replace w: 0 #ifxb6220min w: 0 min^1_cons w: 0 eq w: 0 false w: 0 #ifxb6220replace w: 0 #min w: 0 _ w: 0 true w: 0 #eq w: x1 + x2 #sort w: 0 ifxb6220min w: 0 0 w: 0 nil w: 0 sort w: 0 #replace w: 0 #_ w: 0 min w: 0 #min^1_cons w: 0 cons w: 0 replace w: 0 USABLE RULES: { } Removed DPs: #10 Number of SCCs: 4, DPs: 7 SCC { #5 } POLO(Sum)... succeeded. le w: 0 s w: x1 + 1 #le w: x2 ifxb6220replace w: 0 #ifxb6220min w: 0 min^1_cons w: 0 eq w: 0 false w: 0 #ifxb6220replace w: 0 #min w: 0 _ w: 0 true w: 0 #eq w: 0 #sort w: 0 ifxb6220min w: 0 0 w: 0 nil w: 0 sort w: 0 #replace w: 0 #_ w: 0 min w: 0 #min^1_cons w: 0 cons w: 0 replace w: 0 USABLE RULES: { } Removed DPs: #5 Number of SCCs: 3, DPs: 6 SCC { #12 } POLO(Sum)... succeeded. le w: x2 + 1 s w: 1 #le w: 0 ifxb6220replace w: x2 + x4 + 1797 #ifxb6220min w: 0 min^1_cons w: 1 eq w: x1 + 1 false w: 3 #ifxb6220replace w: 0 #min w: 0 _ w: 0 true w: 3 #eq w: 0 #sort w: x1 ifxb6220min w: 1 0 w: 1 nil w: 8366 sort w: 0 #replace w: 0 #_ w: 0 min w: 0 #min^1_cons w: 0 cons w: x2 + 1799 replace w: x1 + x3 + 1797 USABLE RULES: { 8..16 } Removed DPs: #12 Number of SCCs: 2, DPs: 5 SCC { #3 #9 } POLO(Sum)... succeeded. le w: x2 + 1 s w: 1 #le w: 0 ifxb6220replace w: x2 + x4 + 1797 #ifxb6220min w: 0 min^1_cons w: 1 eq w: 2 false w: 2 #ifxb6220replace w: x1 + x4 #min w: 0 _ w: 0 true w: 2 #eq w: 0 #sort w: x1 ifxb6220min w: 1 0 w: 0 nil w: 8366 sort w: 0 #replace w: x3 + 3 #_ w: 0 min w: 0 #min^1_cons w: 0 cons w: x2 + 1799 replace w: x1 + x3 + 1797 USABLE RULES: { 1..4 8..16 } Removed DPs: #3 #9 Number of SCCs: 1, DPs: 3 SCC { #1 #2 #6 } POLO(Sum)... succeeded. le w: x1 s w: x1 + 1 #le w: 0 ifxb6220replace w: x2 + x3 + 3596 #ifxb6220min w: x2 min^1_cons w: 1 eq w: x2 + 2 false w: 0 #ifxb6220replace w: x1 #min w: 0 _ w: 0 true w: 1 #eq w: 0 #sort w: 0 ifxb6220min w: x1 + 1 0 w: 1 nil w: 8366 sort w: 0 #replace w: 3 #_ w: 0 min w: 0 #min^1_cons w: x1 + x2 + 3597 cons w: x1 + x2 + 1799 replace w: x1 + x2 + x3 + 1797 USABLE RULES: { 1..8 13 } Removed DPs: #1 #2 #6 Number of SCCs: 0, DPs: 0 ... Input TRS: 1: eq(0(),0()) -> true() 2: eq(0(),s(X)) -> false() 3: eq(s(Y),0()) -> false() 4: eq(s(V),s(U)) -> eq(V,U) 5: le(0(),W) -> true() 6: le(s(P),0()) -> false() 7: le(s(Y1),s(X1)) -> le(Y1,X1) 8: min(cons(0(),nil())) -> 0() 9: min(cons(s(U1),nil())) -> s(U1) 10: min(cons(W1,cons(V1,P1))) -> ifxb6220min(le(W1,V1),cons(W1,cons(V1,P1))) 11: ifxb6220min(true(),cons(Y2,cons(X2,U2))) -> min(cons(Y2,U2)) 12: ifxb6220min(false(),cons(W2,cons(V2,P2))) -> min(cons(V2,P2)) 13: replace(Y3,X3,nil()) -> nil() 14: replace(W3,V3,cons(U3,P3)) -> ifxb6220replace(eq(W3,U3),W3,V3,cons(U3,P3)) 15: ifxb6220replace(true(),U4,Y4,cons(X4,V4)) -> cons(Y4,V4) 16: ifxb6220replace(false(),X5,P4,cons(W4,Y5)) -> cons(W4,replace(X5,P4,Y5)) 17: sort(nil()) -> nil() 18: sort(cons(U5,V5)) -> cons(min(cons(U5,V5)),sort(replace(min(cons(U5,V5)),U5,V5))) 19: _(X1,X2) -> X1 20: _(X1,X2) -> X2 Number of strict rules: 20 Direct POLO(bPol) ... failed. Uncurrying min 1: eq(0(),0()) -> true() 2: eq(0(),s(X)) -> false() 3: eq(s(Y),0()) -> false() 4: eq(s(V),s(U)) -> eq(V,U) 5: le(0(),W) -> true() 6: le(s(P),0()) -> false() 7: le(s(Y1),s(X1)) -> le(Y1,X1) 8: min^1_cons(0(),nil()) -> 0() 9: min^1_cons(s(U1),nil()) -> s(U1) 10: min^1_cons(W1,cons(V1,P1)) -> ifxb6220min(le(W1,V1),cons(W1,cons(V1,P1))) 11: ifxb6220min(true(),cons(Y2,cons(X2,U2))) -> min^1_cons(Y2,U2) 12: ifxb6220min(false(),cons(W2,cons(V2,P2))) -> min^1_cons(V2,P2) 13: replace(Y3,X3,nil()) -> nil() 14: replace(W3,V3,cons(U3,P3)) -> ifxb6220replace(eq(W3,U3),W3,V3,cons(U3,P3)) 15: ifxb6220replace(true(),U4,Y4,cons(X4,V4)) -> cons(Y4,V4) 16: ifxb6220replace(false(),X5,P4,cons(W4,Y5)) -> cons(W4,replace(X5,P4,Y5)) 17: sort(nil()) -> nil() 18: sort(cons(U5,V5)) -> cons(min^1_cons(U5,V5),sort(replace(min^1_cons(U5,V5),U5,V5))) 19: _(X1,X2) -> X1 20: _(X1,X2) -> X2 21: min(cons(_1,_2)) ->= min^1_cons(_1,_2) Number of strict rules: 20 Direct POLO(bPol) ... failed. Dependency Pairs: #1: #ifxb6220min(true(),cons(Y2,cons(X2,U2))) -> #min^1_cons(Y2,U2) #2: #ifxb6220min(false(),cons(W2,cons(V2,P2))) -> #min^1_cons(V2,P2) #3: #replace(W3,V3,cons(U3,P3)) -> #ifxb6220replace(eq(W3,U3),W3,V3,cons(U3,P3)) #4: #replace(W3,V3,cons(U3,P3)) -> #eq(W3,U3) #5: #le(s(Y1),s(X1)) -> #le(Y1,X1) #6: #min^1_cons(W1,cons(V1,P1)) -> #ifxb6220min(le(W1,V1),cons(W1,cons(V1,P1))) #7: #min^1_cons(W1,cons(V1,P1)) -> #le(W1,V1) #8: #min(cons(_1,_2)) ->? #min^1_cons(_1,_2) #9: #ifxb6220replace(false(),X5,P4,cons(W4,Y5)) -> #replace(X5,P4,Y5) #10: #eq(s(V),s(U)) -> #eq(V,U) #11: #sort(cons(U5,V5)) -> #min^1_cons(U5,V5) #12: #sort(cons(U5,V5)) -> #sort(replace(min^1_cons(U5,V5),U5,V5)) #13: #sort(cons(U5,V5)) -> #replace(min^1_cons(U5,V5),U5,V5) #14: #sort(cons(U5,V5)) -> #min^1_cons(U5,V5) Number of SCCs: 5, DPs: 8 SCC { #10 } POLO(Sum)... succeeded. le w: 0 s w: x1 + 1 #le w: 0 ifxb6220replace w: 0 #ifxb6220min w: 0 min^1_cons w: 0 eq w: 0 false w: 0 #ifxb6220replace w: 0 #min w: 0 _ w: 0 true w: 0 #eq w: x1 + x2 #sort w: 0 ifxb6220min w: 0 0 w: 0 nil w: 0 sort w: 0 #replace w: 0 #_ w: 0 min w: 0 #min^1_cons w: 0 cons w: 0 replace w: 0 USABLE RULES: { } Removed DPs: #10 Number of SCCs: 4, DPs: 7 SCC { #5 } POLO(Sum)... succeeded. le w: 0 s w: x1 + 1 #le w: x2 ifxb6220replace w: 0 #ifxb6220min w: 0 min^1_cons w: 0 eq w: 0 false w: 0 #ifxb6220replace w: 0 #min w: 0 _ w: 0 true w: 0 #eq w: 0 #sort w: 0 ifxb6220min w: 0 0 w: 0 nil w: 0 sort w: 0 #replace w: 0 #_ w: 0 min w: 0 #min^1_cons w: 0 cons w: 0 replace w: 0 USABLE RULES: { } Removed DPs: #5 Number of SCCs: 3, DPs: 6 SCC { #12 } POLO(Sum)... succeeded. le w: x2 + 1 s w: 1 #le w: 0 ifxb6220replace w: x2 + x4 + 1797 #ifxb6220min w: 0 min^1_cons w: 1 eq w: x1 + 1 false w: 3 #ifxb6220replace w: 0 #min w: 0 _ w: 0 true w: 3 #eq w: 0 #sort w: x1 ifxb6220min w: 1 0 w: 1 nil w: 8366 sort w: 0 #replace w: 0 #_ w: 0 min w: 0 #min^1_cons w: 0 cons w: x2 + 1799 replace w: x1 + x3 + 1797 USABLE RULES: { 8..16 } Removed DPs: #12 Number of SCCs: 2, DPs: 5 SCC { #3 #9 } POLO(Sum)... succeeded. le w: x2 + 1 s w: 1 #le w: 0 ifxb6220replace w: x2 + x4 + 1797 #ifxb6220min w: 0 min^1_cons w: 1 eq w: 2 false w: 2 #ifxb6220replace w: x1 + x4 #min w: 0 _ w: 0 true w: 2 #eq w: 0 #sort w: x1 ifxb6220min w: 1 0 w: 0 nil w: 8366 sort w: 0 #replace w: x3 + 3 #_ w: 0 min w: 0 #min^1_cons w: 0 cons w: x2 + 1799 replace w: x1 + x3 + 1797 USABLE RULES: { 1..4 8..16 } Removed DPs: #3 #9 Number of SCCs: 1, DPs: 3 SCC { #1 #2 #6 } POLO(Sum)... succeeded. le w: x1 s w: x1 + 1 #le w: 0 ifxb6220replace w: x2 + x3 + 3596 #ifxb6220min w: x2 min^1_cons w: 1 eq w: x2 + 2 false w: 0 #ifxb6220replace w: x1 #min w: 0 _ w: 0 true w: 1 #eq w: 0 #sort w: 0 ifxb6220min w: x1 + 1 0 w: 1 nil w: 8366 sort w: 0 #replace w: 3 #_ w: 0 min w: 0 #min^1_cons w: x1 + x2 + 3597 cons w: x1 + x2 + 1799 replace w: x1 + x2 + x3 + 1797 USABLE RULES: { 1..8 13 } Removed DPs: #1 #2 #6 Number of SCCs: 0, DPs: 0 >>YES ******** Signature ******** map : ((b -> b),c) -> c nil : c cons : (b,c) -> c filter : ((b -> a),c) -> c filter2 : (a,(b -> a),b,c) -> c true : a false : a ******** Computation rules ******** (19) map(I5,nil) => nil (20) map(J5,cons(X6,Y6)) => cons(J5[X6],map(J5,Y6)) (21) filter(G6,nil) => nil (22) filter(H6,cons(W6,P6)) => filter2(H6[W6],H6,W6,P6) (23) filter2(true,F7,Y7,U7) => cons(Y7,filter(F7,U7)) (24) filter2(false,H7,W7,P7) => filter(H7,P7) ******** General Schema criterion ******** Found constructors: 0, cons, false, nil, s, true Checking type order >>OK Checking positivity of constructors >>OK Checking function dependency >>Regared as equal: filter2, filter Checking (1) eq(0,0) => true (fun eq>true) >>True Checking (2) eq(0,s(X)) => false (fun eq>false) >>True Checking (3) eq(s(Y),0) => false (fun eq>false) >>True Checking (4) eq(s(V),s(U)) => eq(V,U) (fun eq=eq) subterm comparison of args w. LR LR (meta V)[is acc in s(V),s(U)] [is positive in s(V)] [is acc in V] (meta U)[is acc in s(V),s(U)] [is positive in s(V)] [is positive in s(U)] [is acc in U] >>True Checking (5) le(0,W) => true (fun le>true) >>True Checking (6) le(s(P),0) => false (fun le>false) >>True Checking (7) le(s(Y1),s(X1)) => le(Y1,X1) (fun le=le) subterm comparison of args w. LR LR (meta Y1)[is acc in s(Y1),s(X1)] [is positive in s(Y1)] [is acc in Y1] (meta X1)[is acc in s(Y1),s(X1)] [is positive in s(Y1)] [is positive in s(X1)] [is acc in X1] >>True Checking (8) min(cons(0,nil)) => 0 (fun min>0) >>True Checking (9) min(cons(s(U1),nil)) => s(U1) (fun min>s) (meta U1)[is acc in cons(s(U1),nil)] [is positive in cons(s(U1),nil)] [is positive in s(U1)] [is acc in U1] >>True Checking (10) min(cons(W1,cons(V1,P1))) => ifxb6220min(le(W1,V1),cons(W1,cons(V1,P1))) (fun min>ifxb6220min) (fun min>le) (meta W1)[is acc in cons(W1,cons(V1,P1))] [is positive in cons(W1,cons(V1,P1))] [is acc in W1] (meta V1)[is acc in cons(W1,cons(V1,P1))] [is positive in cons(W1,cons(V1,P1))] [is positive in cons(V1,P1)] [is acc in V1] (fun min>cons) (meta W1)[is acc in cons(W1,cons(V1,P1))] [is positive in cons(W1,cons(V1,P1))] [is acc in W1] (fun min>cons) (meta V1)[is acc in cons(W1,cons(V1,P1))] [is positive in cons(W1,cons(V1,P1))] [is positive in cons(V1,P1)] [is acc in V1] (meta P1)[is acc in cons(W1,cons(V1,P1))] [is positive in cons(W1,cons(V1,P1))] [is positive in cons(V1,P1)] [is acc in P1] >>True Checking (11) ifxb6220min(true,cons(Y2,cons(X2,U2))) => min(cons(Y2,U2)) (fun ifxb6220min>min) (fun ifxb6220min>cons) (meta Y2)[is acc in true,cons(Y2,cons(X2,U2))] [is positive in true] [is positive in cons(Y2,cons(X2,U2))] [is acc in Y2] (meta U2)[is acc in true,cons(Y2,cons(X2,U2))] [is positive in true] [is positive in cons(Y2,cons(X2,U2))] [is positive in cons(X2,U2)] [is acc in U2] >>True Checking (12) ifxb6220min(false,cons(W2,cons(V2,P2))) => min(cons(V2,P2)) (fun ifxb6220min>min) (fun ifxb6220min>cons) (meta V2)[is acc in false,cons(W2,cons(V2,P2))] [is positive in false] [is positive in cons(W2,cons(V2,P2))] [is positive in cons(V2,P2)] [is acc in V2] (meta P2)[is acc in false,cons(W2,cons(V2,P2))] [is positive in false] [is positive in cons(W2,cons(V2,P2))] [is positive in cons(V2,P2)] [is acc in P2] >>True Checking (13) replace(Y3,X3,nil) => nil (fun replace>nil) >>True Checking (14) replace(W3,V3,cons(U3,P3)) => ifxb6220replace(eq(W3,U3),W3,V3,cons(U3,P3)) (fun replace>ifxb6220replace) (fun replace>eq) (meta W3)[is acc in W3,V3,cons(U3,P3)] [is acc in W3] (meta U3)[is acc in W3,V3,cons(U3,P3)] [is positive in cons(U3,P3)] [is acc in U3] (meta W3)[is acc in W3,V3,cons(U3,P3)] [is acc in W3] (meta V3)[is acc in W3,V3,cons(U3,P3)] [is acc in V3] (fun replace>cons) (meta U3)[is acc in W3,V3,cons(U3,P3)] [is positive in cons(U3,P3)] [is acc in U3] (meta P3)[is acc in W3,V3,cons(U3,P3)] [is positive in cons(U3,P3)] [is acc in P3] >>True Checking (15) ifxb6220replace(true,U4,Y4,cons(X4,V4)) => cons(Y4,V4) (fun ifxb6220replace>cons) (meta Y4)[is acc in true,U4,Y4,cons(X4,V4)] [is positive in true] [is acc in Y4] (meta V4)[is acc in true,U4,Y4,cons(X4,V4)] [is positive in true] [is positive in cons(X4,V4)] [is acc in V4] >>True Checking (16) ifxb6220replace(false,X5,P4,cons(W4,Y5)) => cons(W4,replace(X5,P4,Y5)) (fun ifxb6220replace>cons) (meta W4)[is acc in false,X5,P4,cons(W4,Y5)] [is positive in false] [is positive in cons(W4,Y5)] [is acc in W4] (fun ifxb6220replace>replace) (meta X5)[is acc in false,X5,P4,cons(W4,Y5)] [is positive in false] [is acc in X5] (meta P4)[is acc in false,X5,P4,cons(W4,Y5)] [is positive in false] [is acc in P4] (meta Y5)[is acc in false,X5,P4,cons(W4,Y5)] [is positive in false] [is positive in cons(W4,Y5)] [is acc in Y5] >>True Checking (17) sort(nil) => nil (fun sort>nil) >>True Checking (18) sort(cons(U5,V5)) => cons(min(cons(U5,V5)),sort(replace(min(cons(U5,V5)),U5,V5))) (fun sort>cons) (fun sort>min) (fun sort>cons) (meta U5)[is acc in cons(U5,V5)] [is positive in cons(U5,V5)] [is acc in U5] (meta V5)[is acc in cons(U5,V5)] [is positive in cons(U5,V5)] [is acc in V5] (fun sort=sort) subterm comparison of args w. LR LR >>False Try again using status RL Checking (1) eq(0,0) => true (fun eq>true) >>True Checking (2) eq(0,s(X)) => false (fun eq>false) >>True Checking (3) eq(s(Y),0) => false (fun eq>false) >>True Checking (4) eq(s(V),s(U)) => eq(V,U) (fun eq=eq) subterm comparison of args w. RL RL (meta V)[is acc in s(V),s(U)] [is positive in s(V)] [is acc in V] (meta U)[is acc in s(V),s(U)] [is positive in s(V)] [is positive in s(U)] [is acc in U] >>True Checking (5) le(0,W) => true (fun le>true) >>True Checking (6) le(s(P),0) => false (fun le>false) >>True Checking (7) le(s(Y1),s(X1)) => le(Y1,X1) (fun le=le) subterm comparison of args w. RL RL (meta Y1)[is acc in s(Y1),s(X1)] [is positive in s(Y1)] [is acc in Y1] (meta X1)[is acc in s(Y1),s(X1)] [is positive in s(Y1)] [is positive in s(X1)] [is acc in X1] >>True Checking (8) min(cons(0,nil)) => 0 (fun min>0) >>True Checking (9) min(cons(s(U1),nil)) => s(U1) (fun min>s) (meta U1)[is acc in cons(s(U1),nil)] [is positive in cons(s(U1),nil)] [is positive in s(U1)] [is acc in U1] >>True Checking (10) min(cons(W1,cons(V1,P1))) => ifxb6220min(le(W1,V1),cons(W1,cons(V1,P1))) (fun min>ifxb6220min) (fun min>le) (meta W1)[is acc in cons(W1,cons(V1,P1))] [is positive in cons(W1,cons(V1,P1))] [is acc in W1] (meta V1)[is acc in cons(W1,cons(V1,P1))] [is positive in cons(W1,cons(V1,P1))] [is positive in cons(V1,P1)] [is acc in V1] (fun min>cons) (meta W1)[is acc in cons(W1,cons(V1,P1))] [is positive in cons(W1,cons(V1,P1))] [is acc in W1] (fun min>cons) (meta V1)[is acc in cons(W1,cons(V1,P1))] [is positive in cons(W1,cons(V1,P1))] [is positive in cons(V1,P1)] [is acc in V1] (meta P1)[is acc in cons(W1,cons(V1,P1))] [is positive in cons(W1,cons(V1,P1))] [is positive in cons(V1,P1)] [is acc in P1] >>True Checking (11) ifxb6220min(true,cons(Y2,cons(X2,U2))) => min(cons(Y2,U2)) (fun ifxb6220min>min) (fun ifxb6220min>cons) (meta Y2)[is acc in true,cons(Y2,cons(X2,U2))] [is positive in true] [is positive in cons(Y2,cons(X2,U2))] [is acc in Y2] (meta U2)[is acc in true,cons(Y2,cons(X2,U2))] [is positive in true] [is positive in cons(Y2,cons(X2,U2))] [is positive in cons(X2,U2)] [is acc in U2] >>True Checking (12) ifxb6220min(false,cons(W2,cons(V2,P2))) => min(cons(V2,P2)) (fun ifxb6220min>min) (fun ifxb6220min>cons) (meta V2)[is acc in false,cons(W2,cons(V2,P2))] [is positive in false] [is positive in cons(W2,cons(V2,P2))] [is positive in cons(V2,P2)] [is acc in V2] (meta P2)[is acc in false,cons(W2,cons(V2,P2))] [is positive in false] [is positive in cons(W2,cons(V2,P2))] [is positive in cons(V2,P2)] [is acc in P2] >>True Checking (13) replace(Y3,X3,nil) => nil (fun replace>nil) >>True Checking (14) replace(W3,V3,cons(U3,P3)) => ifxb6220replace(eq(W3,U3),W3,V3,cons(U3,P3)) (fun replace>ifxb6220replace) (fun replace>eq) (meta W3)[is acc in W3,V3,cons(U3,P3)] [is acc in W3] (meta U3)[is acc in W3,V3,cons(U3,P3)] [is positive in cons(U3,P3)] [is acc in U3] (meta W3)[is acc in W3,V3,cons(U3,P3)] [is acc in W3] (meta V3)[is acc in W3,V3,cons(U3,P3)] [is acc in V3] (fun replace>cons) (meta U3)[is acc in W3,V3,cons(U3,P3)] [is positive in cons(U3,P3)] [is acc in U3] (meta P3)[is acc in W3,V3,cons(U3,P3)] [is positive in cons(U3,P3)] [is acc in P3] >>True Checking (15) ifxb6220replace(true,U4,Y4,cons(X4,V4)) => cons(Y4,V4) (fun ifxb6220replace>cons) (meta Y4)[is acc in true,U4,Y4,cons(X4,V4)] [is positive in true] [is acc in Y4] (meta V4)[is acc in true,U4,Y4,cons(X4,V4)] [is positive in true] [is positive in cons(X4,V4)] [is acc in V4] >>True Checking (16) ifxb6220replace(false,X5,P4,cons(W4,Y5)) => cons(W4,replace(X5,P4,Y5)) (fun ifxb6220replace>cons) (meta W4)[is acc in false,X5,P4,cons(W4,Y5)] [is positive in false] [is positive in cons(W4,Y5)] [is acc in W4] (fun ifxb6220replace>replace) (meta X5)[is acc in false,X5,P4,cons(W4,Y5)] [is positive in false] [is acc in X5] (meta P4)[is acc in false,X5,P4,cons(W4,Y5)] [is positive in false] [is acc in P4] (meta Y5)[is acc in false,X5,P4,cons(W4,Y5)] [is positive in false] [is positive in cons(W4,Y5)] [is acc in Y5] >>True Checking (17) sort(nil) => nil (fun sort>nil) >>True Checking (18) sort(cons(U5,V5)) => cons(min(cons(U5,V5)),sort(replace(min(cons(U5,V5)),U5,V5))) (fun sort>cons) (fun sort>min) (fun sort>cons) (meta U5)[is acc in cons(U5,V5)] [is positive in cons(U5,V5)] [is acc in U5] (meta V5)[is acc in cons(U5,V5)] [is positive in cons(U5,V5)] [is acc in V5] (fun sort=sort) subterm comparison of args w. RL RL >>False Try again using status Mul Checking (1) eq(0,0) => true (fun eq>true) >>True Checking (2) eq(0,s(X)) => false (fun eq>false) >>True Checking (3) eq(s(Y),0) => false (fun eq>false) >>True Checking (4) eq(s(V),s(U)) => eq(V,U) (fun eq=eq) subterm comparison of args w. Mul Mul (meta V)[is acc in s(V),s(U)] [is positive in s(V)] [is acc in V] (meta U)[is acc in s(V),s(U)] [is positive in s(V)] [is positive in s(U)] [is acc in U] >>True Checking (5) le(0,W) => true (fun le>true) >>True Checking (6) le(s(P),0) => false (fun le>false) >>True Checking (7) le(s(Y1),s(X1)) => le(Y1,X1) (fun le=le) subterm comparison of args w. Mul Mul (meta Y1)[is acc in s(Y1),s(X1)] [is positive in s(Y1)] [is acc in Y1] (meta X1)[is acc in s(Y1),s(X1)] [is positive in s(Y1)] [is positive in s(X1)] [is acc in X1] >>True Checking (8) min(cons(0,nil)) => 0 (fun min>0) >>True Checking (9) min(cons(s(U1),nil)) => s(U1) (fun min>s) (meta U1)[is acc in cons(s(U1),nil)] [is positive in cons(s(U1),nil)] [is positive in s(U1)] [is acc in U1] >>True Checking (10) min(cons(W1,cons(V1,P1))) => ifxb6220min(le(W1,V1),cons(W1,cons(V1,P1))) (fun min>ifxb6220min) (fun min>le) (meta W1)[is acc in cons(W1,cons(V1,P1))] [is positive in cons(W1,cons(V1,P1))] [is acc in W1] (meta V1)[is acc in cons(W1,cons(V1,P1))] [is positive in cons(W1,cons(V1,P1))] [is positive in cons(V1,P1)] [is acc in V1] (fun min>cons) (meta W1)[is acc in cons(W1,cons(V1,P1))] [is positive in cons(W1,cons(V1,P1))] [is acc in W1] (fun min>cons) (meta V1)[is acc in cons(W1,cons(V1,P1))] [is positive in cons(W1,cons(V1,P1))] [is positive in cons(V1,P1)] [is acc in V1] (meta P1)[is acc in cons(W1,cons(V1,P1))] [is positive in cons(W1,cons(V1,P1))] [is positive in cons(V1,P1)] [is acc in P1] >>True Checking (11) ifxb6220min(true,cons(Y2,cons(X2,U2))) => min(cons(Y2,U2)) (fun ifxb6220min>min) (fun ifxb6220min>cons) (meta Y2)[is acc in true,cons(Y2,cons(X2,U2))] [is positive in true] [is positive in cons(Y2,cons(X2,U2))] [is acc in Y2] (meta U2)[is acc in true,cons(Y2,cons(X2,U2))] [is positive in true] [is positive in cons(Y2,cons(X2,U2))] [is positive in cons(X2,U2)] [is acc in U2] >>True Checking (12) ifxb6220min(false,cons(W2,cons(V2,P2))) => min(cons(V2,P2)) (fun ifxb6220min>min) (fun ifxb6220min>cons) (meta V2)[is acc in false,cons(W2,cons(V2,P2))] [is positive in false] [is positive in cons(W2,cons(V2,P2))] [is positive in cons(V2,P2)] [is acc in V2] (meta P2)[is acc in false,cons(W2,cons(V2,P2))] [is positive in false] [is positive in cons(W2,cons(V2,P2))] [is positive in cons(V2,P2)] [is acc in P2] >>True Checking (13) replace(Y3,X3,nil) => nil (fun replace>nil) >>True Checking (14) replace(W3,V3,cons(U3,P3)) => ifxb6220replace(eq(W3,U3),W3,V3,cons(U3,P3)) (fun replace>ifxb6220replace) (fun replace>eq) (meta W3)[is acc in W3,V3,cons(U3,P3)] [is acc in W3] (meta U3)[is acc in W3,V3,cons(U3,P3)] [is positive in cons(U3,P3)] [is acc in U3] (meta W3)[is acc in W3,V3,cons(U3,P3)] [is acc in W3] (meta V3)[is acc in W3,V3,cons(U3,P3)] [is acc in V3] (fun replace>cons) (meta U3)[is acc in W3,V3,cons(U3,P3)] [is positive in cons(U3,P3)] [is acc in U3] (meta P3)[is acc in W3,V3,cons(U3,P3)] [is positive in cons(U3,P3)] [is acc in P3] >>True Checking (15) ifxb6220replace(true,U4,Y4,cons(X4,V4)) => cons(Y4,V4) (fun ifxb6220replace>cons) (meta Y4)[is acc in true,U4,Y4,cons(X4,V4)] [is positive in true] [is acc in Y4] (meta V4)[is acc in true,U4,Y4,cons(X4,V4)] [is positive in true] [is positive in cons(X4,V4)] [is acc in V4] >>True Checking (16) ifxb6220replace(false,X5,P4,cons(W4,Y5)) => cons(W4,replace(X5,P4,Y5)) (fun ifxb6220replace>cons) (meta W4)[is acc in false,X5,P4,cons(W4,Y5)] [is positive in false] [is positive in cons(W4,Y5)] [is acc in W4] (fun ifxb6220replace>replace) (meta X5)[is acc in false,X5,P4,cons(W4,Y5)] [is positive in false] [is acc in X5] (meta P4)[is acc in false,X5,P4,cons(W4,Y5)] [is positive in false] [is acc in P4] (meta Y5)[is acc in false,X5,P4,cons(W4,Y5)] [is positive in false] [is positive in cons(W4,Y5)] [is acc in Y5] >>True Checking (17) sort(nil) => nil (fun sort>nil) >>True Checking (18) sort(cons(U5,V5)) => cons(min(cons(U5,V5)),sort(replace(min(cons(U5,V5)),U5,V5))) (fun sort>cons) (fun sort>min) (fun sort>cons) (meta U5)[is acc in cons(U5,V5)] [is positive in cons(U5,V5)] [is acc in U5] (meta V5)[is acc in cons(U5,V5)] [is positive in cons(U5,V5)] [is acc in V5] (fun sort=sort) subterm comparison of args w. Mul Mul >>False Found constructors: nil, cons, true, false Checking type order >>OK Checking positivity of constructors >>OK Checking function dependency >>Regared as equal: filter2, filter Checking (19) map(I5,nil) => nil (fun map>nil) >>True Checking (20) map(J5,cons(X6,Y6)) => cons(J5[X6],map(J5,Y6)) (fun map>cons) (meta J5)[is acc in J5,cons(X6,Y6)] [is acc in J5] (meta X6)[is acc in J5,cons(X6,Y6)] [is positive in cons(X6,Y6)] [is acc in X6] (fun map=map) subterm comparison of args w. LR LR (meta J5)[is acc in J5,cons(X6,Y6)] [is acc in J5] (meta Y6)[is acc in J5,cons(X6,Y6)] [is positive in cons(X6,Y6)] [is acc in Y6] >>True Checking (21) filter(G6,nil) => nil (fun filter>nil) >>True Checking (22) filter(H6,cons(W6,P6)) => filter2(H6[W6],H6,W6,P6) (fun filter=filter2) subterm comparison of args w. Arg [1,2] Arg [2,4,3,1] (meta H6)[is acc in H6,cons(W6,P6)] [is acc in H6] (meta W6)[is acc in H6,cons(W6,P6)] [is positive in cons(W6,P6)] [is acc in W6] (meta H6)[is acc in H6,cons(W6,P6)] [is acc in H6] (meta W6)[is acc in H6,cons(W6,P6)] [is positive in cons(W6,P6)] [is acc in W6] (meta P6)[is acc in H6,cons(W6,P6)] [is positive in cons(W6,P6)] [is acc in P6] >>True Checking (23) filter2(true,F7,Y7,U7) => cons(Y7,filter(F7,U7)) (fun filter2>cons) (meta Y7)[is acc in true,F7,Y7,U7] [is positive in true] [is acc in Y7] (fun filter2=filter) subterm comparison of args w. Arg [2,4,3,1] Arg [1,2] (meta F7)[is acc in true,F7,Y7,U7] [is positive in true] [is acc in F7] (meta U7)[is acc in true,F7,Y7,U7] [is positive in true] [is acc in U7] >>True Checking (24) filter2(false,H7,W7,P7) => filter(H7,P7) (fun filter2=filter) subterm comparison of args w. Arg [2,4,3,1] Arg [1,2] (meta H7)[is acc in false,H7,W7,P7] [is positive in false] [is acc in H7] (meta P7)[is acc in false,H7,W7,P7] [is positive in false] [is acc in P7] >>True #SN! ******** Signature ******** 0 : b cons : (b,c) -> c eq : (b,b) -> a false : a filter : ((b -> a),c) -> c filter2 : (a,(b -> a),b,c) -> c ifxb6220min : (a,c) -> b ifxb6220replace : (a,b,b,c) -> c le : (b,b) -> a map : ((b -> b),c) -> c min : c -> b nil : c replace : (b,b,c) -> c s : b -> b sort : c -> c true : a ******** Computation Rules ******** (1) eq(0,0) => true (2) eq(0,s(X)) => false (3) eq(s(Y),0) => false (4) eq(s(V),s(U)) => eq(V,U) (5) le(0,W) => true (6) le(s(P),0) => false (7) le(s(Y1),s(X1)) => le(Y1,X1) (8) min(cons(0,nil)) => 0 (9) min(cons(s(U1),nil)) => s(U1) (10) min(cons(W1,cons(V1,P1))) => ifxb6220min(le(W1,V1),cons(W1,cons(V1,P1))) (11) ifxb6220min(true,cons(Y2,cons(X2,U2))) => min(cons(Y2,U2)) (12) ifxb6220min(false,cons(W2,cons(V2,P2))) => min(cons(V2,P2)) (13) replace(Y3,X3,nil) => nil (14) replace(W3,V3,cons(U3,P3)) => ifxb6220replace(eq(W3,U3),W3,V3,cons(U3,P3)) (15) ifxb6220replace(true,U4,Y4,cons(X4,V4)) => cons(Y4,V4) (16) ifxb6220replace(false,X5,P4,cons(W4,Y5)) => cons(W4,replace(X5,P4,Y5)) (17) sort(nil) => nil (18) sort(cons(U5,V5)) => cons(min(cons(U5,V5)),sort(replace(min(cons(U5,V5)),U5,V5))) (19) map(I5,nil) => nil (20) map(J5,cons(X6,Y6)) => cons(J5[X6],map(J5,Y6)) (21) filter(G6,nil) => nil (22) filter(H6,cons(W6,P6)) => filter2(H6[W6],H6,W6,P6) (23) filter2(true,F7,Y7,U7) => cons(Y7,filter(F7,U7)) (24) filter2(false,H7,W7,P7) => filter(H7,P7) YES