YES We show the termination of the TRS R: a__and(tt(),T) -> mark(T) a__isNatIList(IL) -> a__isNatList(IL) a__isNat(|0|()) -> tt() a__isNat(s(N)) -> a__isNat(N) a__isNat(length(L)) -> a__isNatList(L) a__isNatIList(zeros()) -> tt() a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) a__isNatList(nil()) -> tt() a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) a__zeros() -> cons(|0|(),zeros()) a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) a__uTake1(tt()) -> nil() a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) a__uLength(tt(),L) -> s(a__length(mark(L))) mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) mark(isNatIList(X)) -> a__isNatIList(X) mark(isNatList(X)) -> a__isNatList(X) mark(isNat(X)) -> a__isNat(X) mark(length(X)) -> a__length(mark(X)) mark(zeros()) -> a__zeros() mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) mark(uTake1(X)) -> a__uTake1(mark(X)) mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) mark(tt()) -> tt() mark(|0|()) -> |0|() mark(s(X)) -> s(mark(X)) mark(cons(X1,X2)) -> cons(mark(X1),X2) mark(nil()) -> nil() a__and(X1,X2) -> and(X1,X2) a__isNatIList(X) -> isNatIList(X) a__isNatList(X) -> isNatList(X) a__isNat(X) -> isNat(X) a__length(X) -> length(X) a__zeros() -> zeros() a__take(X1,X2) -> take(X1,X2) a__uTake1(X) -> uTake1(X) a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) a__uLength(X1,X2) -> uLength(X1,X2) -- SCC decomposition. Consider the dependency pair problem (P, R), where P consists of p1: a__and#(tt(),T) -> mark#(T) p2: a__isNatIList#(IL) -> a__isNatList#(IL) p3: a__isNat#(s(N)) -> a__isNat#(N) p4: a__isNat#(length(L)) -> a__isNatList#(L) p5: a__isNatIList#(cons(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p6: a__isNatIList#(cons(N,IL)) -> a__isNat#(N) p7: a__isNatIList#(cons(N,IL)) -> a__isNatIList#(IL) p8: a__isNatList#(cons(N,L)) -> a__and#(a__isNat(N),a__isNatList(L)) p9: a__isNatList#(cons(N,L)) -> a__isNat#(N) p10: a__isNatList#(cons(N,L)) -> a__isNatList#(L) p11: a__isNatList#(take(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p12: a__isNatList#(take(N,IL)) -> a__isNat#(N) p13: a__isNatList#(take(N,IL)) -> a__isNatIList#(IL) p14: a__take#(|0|(),IL) -> a__uTake1#(a__isNatIList(IL)) p15: a__take#(|0|(),IL) -> a__isNatIList#(IL) p16: a__take#(s(M),cons(N,IL)) -> a__uTake2#(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) p17: a__take#(s(M),cons(N,IL)) -> a__and#(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))) p18: a__take#(s(M),cons(N,IL)) -> a__isNat#(M) p19: a__take#(s(M),cons(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p20: a__take#(s(M),cons(N,IL)) -> a__isNat#(N) p21: a__take#(s(M),cons(N,IL)) -> a__isNatIList#(IL) p22: a__uTake2#(tt(),M,N,IL) -> mark#(N) p23: a__length#(cons(N,L)) -> a__uLength#(a__and(a__isNat(N),a__isNatList(L)),L) p24: a__length#(cons(N,L)) -> a__and#(a__isNat(N),a__isNatList(L)) p25: a__length#(cons(N,L)) -> a__isNat#(N) p26: a__length#(cons(N,L)) -> a__isNatList#(L) p27: a__uLength#(tt(),L) -> a__length#(mark(L)) p28: a__uLength#(tt(),L) -> mark#(L) p29: mark#(and(X1,X2)) -> a__and#(mark(X1),mark(X2)) p30: mark#(and(X1,X2)) -> mark#(X1) p31: mark#(and(X1,X2)) -> mark#(X2) p32: mark#(isNatIList(X)) -> a__isNatIList#(X) p33: mark#(isNatList(X)) -> a__isNatList#(X) p34: mark#(isNat(X)) -> a__isNat#(X) p35: mark#(length(X)) -> a__length#(mark(X)) p36: mark#(length(X)) -> mark#(X) p37: mark#(zeros()) -> a__zeros#() p38: mark#(take(X1,X2)) -> a__take#(mark(X1),mark(X2)) p39: mark#(take(X1,X2)) -> mark#(X1) p40: mark#(take(X1,X2)) -> mark#(X2) p41: mark#(uTake1(X)) -> a__uTake1#(mark(X)) p42: mark#(uTake1(X)) -> mark#(X) p43: mark#(uTake2(X1,X2,X3,X4)) -> a__uTake2#(mark(X1),X2,X3,X4) p44: mark#(uTake2(X1,X2,X3,X4)) -> mark#(X1) p45: mark#(uLength(X1,X2)) -> a__uLength#(mark(X1),X2) p46: mark#(uLength(X1,X2)) -> mark#(X1) p47: mark#(s(X)) -> mark#(X) p48: mark#(cons(X1,X2)) -> mark#(X1) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The estimated dependency graph contains the following SCCs: {p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p38, p39, p40, p42, p43, p44, p45, p46, p47, p48} -- Reduction pair. Consider the dependency pair problem (P, R), where P consists of p1: a__and#(tt(),T) -> mark#(T) p2: mark#(cons(X1,X2)) -> mark#(X1) p3: mark#(s(X)) -> mark#(X) p4: mark#(uLength(X1,X2)) -> mark#(X1) p5: mark#(uLength(X1,X2)) -> a__uLength#(mark(X1),X2) p6: a__uLength#(tt(),L) -> mark#(L) p7: mark#(uTake2(X1,X2,X3,X4)) -> mark#(X1) p8: mark#(uTake2(X1,X2,X3,X4)) -> a__uTake2#(mark(X1),X2,X3,X4) p9: a__uTake2#(tt(),M,N,IL) -> mark#(N) p10: mark#(uTake1(X)) -> mark#(X) p11: mark#(take(X1,X2)) -> mark#(X2) p12: mark#(take(X1,X2)) -> mark#(X1) p13: mark#(take(X1,X2)) -> a__take#(mark(X1),mark(X2)) p14: a__take#(s(M),cons(N,IL)) -> a__isNatIList#(IL) p15: a__isNatIList#(cons(N,IL)) -> a__isNatIList#(IL) p16: a__isNatIList#(cons(N,IL)) -> a__isNat#(N) p17: a__isNat#(length(L)) -> a__isNatList#(L) p18: a__isNatList#(take(N,IL)) -> a__isNatIList#(IL) p19: a__isNatIList#(cons(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p20: a__isNatIList#(IL) -> a__isNatList#(IL) p21: a__isNatList#(take(N,IL)) -> a__isNat#(N) p22: a__isNat#(s(N)) -> a__isNat#(N) p23: a__isNatList#(take(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p24: a__isNatList#(cons(N,L)) -> a__isNatList#(L) p25: a__isNatList#(cons(N,L)) -> a__isNat#(N) p26: a__isNatList#(cons(N,L)) -> a__and#(a__isNat(N),a__isNatList(L)) p27: a__take#(s(M),cons(N,IL)) -> a__isNat#(N) p28: a__take#(s(M),cons(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p29: a__take#(s(M),cons(N,IL)) -> a__isNat#(M) p30: a__take#(s(M),cons(N,IL)) -> a__and#(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))) p31: a__take#(s(M),cons(N,IL)) -> a__uTake2#(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) p32: a__take#(|0|(),IL) -> a__isNatIList#(IL) p33: mark#(length(X)) -> mark#(X) p34: mark#(length(X)) -> a__length#(mark(X)) p35: a__length#(cons(N,L)) -> a__isNatList#(L) p36: a__length#(cons(N,L)) -> a__isNat#(N) p37: a__length#(cons(N,L)) -> a__and#(a__isNat(N),a__isNatList(L)) p38: a__length#(cons(N,L)) -> a__uLength#(a__and(a__isNat(N),a__isNatList(L)),L) p39: a__uLength#(tt(),L) -> a__length#(mark(L)) p40: mark#(isNat(X)) -> a__isNat#(X) p41: mark#(isNatList(X)) -> a__isNatList#(X) p42: mark#(isNatIList(X)) -> a__isNatIList#(X) p43: mark#(and(X1,X2)) -> mark#(X2) p44: mark#(and(X1,X2)) -> mark#(X1) p45: mark#(and(X1,X2)) -> a__and#(mark(X1),mark(X2)) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The set of usable rules consists of r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r30, r31, r32, r33, r34, r35, r36, r37, r38, r39, r40, r41, r42 Take the reduction pair: max/plus interpretations on natural numbers: a__and#_A(x1,x2) = max{6, x1 - 8, x2 - 8} tt_A = 12 mark#_A(x1) = max{6, x1 - 8} cons_A(x1,x2) = max{10, x1, x2} s_A(x1) = max{29, x1} uLength_A(x1,x2) = max{29, x1 + 1, x2 + 15} a__uLength#_A(x1,x2) = max{10, x1 - 19, x2 - 3} mark_A(x1) = max{13, x1} uTake2_A(x1,x2,x3,x4) = max{38, x1 + 22, x2 + 9, x3 + 21, x4 + 21} a__uTake2#_A(x1,x2,x3,x4) = max{x1 - 5, x3 + 12, x4 + 12} uTake1_A(x1) = max{22, x1 + 5} take_A(x1,x2) = max{34, x1 + 9, x2 + 21} a__take#_A(x1,x2) = x2 + 12 a__isNatIList#_A(x1) = 8 a__isNat#_A(x1) = 8 length_A(x1) = max{29, x1 + 15} a__isNatList#_A(x1) = 8 a__isNat_A(x1) = 16 a__isNatIList_A(x1) = 16 a__isNatList_A(x1) = 16 a__and_A(x1,x2) = max{13, x1, x2} |0|_A = 0 a__length#_A(x1) = max{10, x1 - 3} isNat_A(x1) = 16 isNatList_A(x1) = 16 isNatIList_A(x1) = 16 and_A(x1,x2) = max{12, x1, x2} a__zeros_A = 13 zeros_A = 12 a__take_A(x1,x2) = max{34, x1 + 9, x2 + 21} a__uTake1_A(x1) = max{22, x1 + 5} nil_A = 18 a__uTake2_A(x1,x2,x3,x4) = max{38, x1 + 22, x2 + 9, x3 + 21, x4 + 21} a__length_A(x1) = max{29, x1 + 15} a__uLength_A(x1,x2) = max{29, x1 + 1, x2 + 15} The next rules are strictly ordered: p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p27, p28, p29, p30, p32, p33, p34, p35, p36, p37 We remove them from the problem. -- SCC decomposition. Consider the dependency pair problem (P, R), where P consists of p1: a__and#(tt(),T) -> mark#(T) p2: mark#(cons(X1,X2)) -> mark#(X1) p3: mark#(s(X)) -> mark#(X) p4: a__isNatIList#(cons(N,IL)) -> a__isNatIList#(IL) p5: a__isNatIList#(cons(N,IL)) -> a__isNat#(N) p6: a__isNat#(length(L)) -> a__isNatList#(L) p7: a__isNatList#(take(N,IL)) -> a__isNatIList#(IL) p8: a__isNatIList#(cons(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p9: a__isNatIList#(IL) -> a__isNatList#(IL) p10: a__isNatList#(take(N,IL)) -> a__isNat#(N) p11: a__isNat#(s(N)) -> a__isNat#(N) p12: a__isNatList#(take(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p13: a__isNatList#(cons(N,L)) -> a__isNatList#(L) p14: a__isNatList#(cons(N,L)) -> a__isNat#(N) p15: a__isNatList#(cons(N,L)) -> a__and#(a__isNat(N),a__isNatList(L)) p16: a__take#(s(M),cons(N,IL)) -> a__uTake2#(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) p17: a__length#(cons(N,L)) -> a__uLength#(a__and(a__isNat(N),a__isNatList(L)),L) p18: a__uLength#(tt(),L) -> a__length#(mark(L)) p19: mark#(isNat(X)) -> a__isNat#(X) p20: mark#(isNatList(X)) -> a__isNatList#(X) p21: mark#(isNatIList(X)) -> a__isNatIList#(X) p22: mark#(and(X1,X2)) -> mark#(X2) p23: mark#(and(X1,X2)) -> mark#(X1) p24: mark#(and(X1,X2)) -> a__and#(mark(X1),mark(X2)) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The estimated dependency graph contains the following SCCs: {p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p19, p20, p21, p22, p23, p24} {p17, p18} -- Reduction pair. Consider the dependency pair problem (P, R), where P consists of p1: a__and#(tt(),T) -> mark#(T) p2: mark#(and(X1,X2)) -> a__and#(mark(X1),mark(X2)) p3: mark#(and(X1,X2)) -> mark#(X1) p4: mark#(and(X1,X2)) -> mark#(X2) p5: mark#(isNatIList(X)) -> a__isNatIList#(X) p6: a__isNatIList#(IL) -> a__isNatList#(IL) p7: a__isNatList#(cons(N,L)) -> a__and#(a__isNat(N),a__isNatList(L)) p8: a__isNatList#(cons(N,L)) -> a__isNat#(N) p9: a__isNat#(s(N)) -> a__isNat#(N) p10: a__isNat#(length(L)) -> a__isNatList#(L) p11: a__isNatList#(cons(N,L)) -> a__isNatList#(L) p12: a__isNatList#(take(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p13: a__isNatList#(take(N,IL)) -> a__isNat#(N) p14: a__isNatList#(take(N,IL)) -> a__isNatIList#(IL) p15: a__isNatIList#(cons(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p16: a__isNatIList#(cons(N,IL)) -> a__isNat#(N) p17: a__isNatIList#(cons(N,IL)) -> a__isNatIList#(IL) p18: mark#(isNatList(X)) -> a__isNatList#(X) p19: mark#(isNat(X)) -> a__isNat#(X) p20: mark#(s(X)) -> mark#(X) p21: mark#(cons(X1,X2)) -> mark#(X1) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The set of usable rules consists of r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r30, r31, r32, r33, r34, r35, r36, r37, r38, r39, r40, r41, r42 Take the reduction pair: max/plus interpretations on natural numbers: a__and#_A(x1,x2) = max{3, x1 - 16, x2 - 7} tt_A = 8 mark#_A(x1) = max{3, x1 - 7} and_A(x1,x2) = max{4, x1, x2} mark_A(x1) = max{8, x1} isNatIList_A(x1) = x1 + 5 a__isNatIList#_A(x1) = max{2, x1 - 2} a__isNatList#_A(x1) = max{0, x1 - 3} cons_A(x1,x2) = max{8, x1, x2} a__isNat_A(x1) = max{11, x1 + 4} a__isNatList_A(x1) = max{6, x1 + 4} a__isNat#_A(x1) = max{4, x1 - 3} s_A(x1) = x1 length_A(x1) = x1 take_A(x1,x2) = max{17, x1, x2 + 9} a__isNatIList_A(x1) = max{8, x1 + 5} isNatList_A(x1) = max{6, x1 + 4} isNat_A(x1) = max{11, x1 + 4} a__and_A(x1,x2) = max{4, x1, x2} a__zeros_A = 8 |0|_A = 3 zeros_A = 2 a__take_A(x1,x2) = max{17, x1, x2 + 9} a__uTake1_A(x1) = max{9, x1 - 5} nil_A = 9 a__uTake2_A(x1,x2,x3,x4) = max{17, x2, x3 + 9, x4 + 9} a__length_A(x1) = x1 a__uLength_A(x1,x2) = max{8, x1 - 11, x2} uTake1_A(x1) = max{9, x1 - 5} uTake2_A(x1,x2,x3,x4) = max{17, x2, x3 + 9, x4 + 9} uLength_A(x1,x2) = max{x1 - 11, x2} The next rules are strictly ordered: p6, p12, p14, p16 We remove them from the problem. -- SCC decomposition. Consider the dependency pair problem (P, R), where P consists of p1: a__and#(tt(),T) -> mark#(T) p2: mark#(and(X1,X2)) -> a__and#(mark(X1),mark(X2)) p3: mark#(and(X1,X2)) -> mark#(X1) p4: mark#(and(X1,X2)) -> mark#(X2) p5: mark#(isNatIList(X)) -> a__isNatIList#(X) p6: a__isNatList#(cons(N,L)) -> a__and#(a__isNat(N),a__isNatList(L)) p7: a__isNatList#(cons(N,L)) -> a__isNat#(N) p8: a__isNat#(s(N)) -> a__isNat#(N) p9: a__isNat#(length(L)) -> a__isNatList#(L) p10: a__isNatList#(cons(N,L)) -> a__isNatList#(L) p11: a__isNatList#(take(N,IL)) -> a__isNat#(N) p12: a__isNatIList#(cons(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p13: a__isNatIList#(cons(N,IL)) -> a__isNatIList#(IL) p14: mark#(isNatList(X)) -> a__isNatList#(X) p15: mark#(isNat(X)) -> a__isNat#(X) p16: mark#(s(X)) -> mark#(X) p17: mark#(cons(X1,X2)) -> mark#(X1) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The estimated dependency graph contains the following SCCs: {p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17} -- Reduction pair. Consider the dependency pair problem (P, R), where P consists of p1: a__and#(tt(),T) -> mark#(T) p2: mark#(cons(X1,X2)) -> mark#(X1) p3: mark#(s(X)) -> mark#(X) p4: mark#(isNat(X)) -> a__isNat#(X) p5: a__isNat#(length(L)) -> a__isNatList#(L) p6: a__isNatList#(take(N,IL)) -> a__isNat#(N) p7: a__isNat#(s(N)) -> a__isNat#(N) p8: a__isNatList#(cons(N,L)) -> a__isNatList#(L) p9: a__isNatList#(cons(N,L)) -> a__isNat#(N) p10: a__isNatList#(cons(N,L)) -> a__and#(a__isNat(N),a__isNatList(L)) p11: mark#(isNatList(X)) -> a__isNatList#(X) p12: mark#(isNatIList(X)) -> a__isNatIList#(X) p13: a__isNatIList#(cons(N,IL)) -> a__isNatIList#(IL) p14: a__isNatIList#(cons(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p15: mark#(and(X1,X2)) -> mark#(X2) p16: mark#(and(X1,X2)) -> mark#(X1) p17: mark#(and(X1,X2)) -> a__and#(mark(X1),mark(X2)) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The set of usable rules consists of r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r30, r31, r32, r33, r34, r35, r36, r37, r38, r39, r40, r41, r42 Take the reduction pair: max/plus interpretations on natural numbers: a__and#_A(x1,x2) = max{x1 - 6, x2 + 2} tt_A = 25 mark#_A(x1) = max{9, x1 + 2} cons_A(x1,x2) = max{16, x1 + 8, x2} s_A(x1) = max{4, x1} isNat_A(x1) = x1 + 19 a__isNat#_A(x1) = x1 + 21 length_A(x1) = max{7, x1 - 8} a__isNatList#_A(x1) = x1 + 13 take_A(x1,x2) = max{19, x1 + 8, x2 + 13} a__isNat_A(x1) = x1 + 19 a__isNatList_A(x1) = x1 + 11 isNatList_A(x1) = x1 + 11 isNatIList_A(x1) = x1 + 23 a__isNatIList#_A(x1) = x1 + 25 a__isNatIList_A(x1) = x1 + 23 and_A(x1,x2) = max{21, x1, x2} mark_A(x1) = max{6, x1} a__and_A(x1,x2) = max{21, x1, x2} a__zeros_A = 16 |0|_A = 8 zeros_A = 16 a__take_A(x1,x2) = max{19, x1 + 8, x2 + 13} a__uTake1_A(x1) = max{14, x1 - 10} nil_A = 15 a__uTake2_A(x1,x2,x3,x4) = max{x2 + 8, x3 + 19, x4 + 13} a__length_A(x1) = max{7, x1 - 8} a__uLength_A(x1,x2) = max{8, x1 - 28, x2 - 8} uTake1_A(x1) = max{14, x1 - 10} uTake2_A(x1,x2,x3,x4) = max{x2 + 8, x3 + 19, x4 + 13} uLength_A(x1,x2) = max{8, x1 - 28, x2 - 8} The next rules are strictly ordered: p2 We remove them from the problem. -- SCC decomposition. Consider the dependency pair problem (P, R), where P consists of p1: a__and#(tt(),T) -> mark#(T) p2: mark#(s(X)) -> mark#(X) p3: mark#(isNat(X)) -> a__isNat#(X) p4: a__isNat#(length(L)) -> a__isNatList#(L) p5: a__isNatList#(take(N,IL)) -> a__isNat#(N) p6: a__isNat#(s(N)) -> a__isNat#(N) p7: a__isNatList#(cons(N,L)) -> a__isNatList#(L) p8: a__isNatList#(cons(N,L)) -> a__isNat#(N) p9: a__isNatList#(cons(N,L)) -> a__and#(a__isNat(N),a__isNatList(L)) p10: mark#(isNatList(X)) -> a__isNatList#(X) p11: mark#(isNatIList(X)) -> a__isNatIList#(X) p12: a__isNatIList#(cons(N,IL)) -> a__isNatIList#(IL) p13: a__isNatIList#(cons(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p14: mark#(and(X1,X2)) -> mark#(X2) p15: mark#(and(X1,X2)) -> mark#(X1) p16: mark#(and(X1,X2)) -> a__and#(mark(X1),mark(X2)) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The estimated dependency graph contains the following SCCs: {p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16} -- Reduction pair. Consider the dependency pair problem (P, R), where P consists of p1: a__and#(tt(),T) -> mark#(T) p2: mark#(and(X1,X2)) -> a__and#(mark(X1),mark(X2)) p3: mark#(and(X1,X2)) -> mark#(X1) p4: mark#(and(X1,X2)) -> mark#(X2) p5: mark#(isNatIList(X)) -> a__isNatIList#(X) p6: a__isNatIList#(cons(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p7: a__isNatIList#(cons(N,IL)) -> a__isNatIList#(IL) p8: mark#(isNatList(X)) -> a__isNatList#(X) p9: a__isNatList#(cons(N,L)) -> a__and#(a__isNat(N),a__isNatList(L)) p10: a__isNatList#(cons(N,L)) -> a__isNat#(N) p11: a__isNat#(s(N)) -> a__isNat#(N) p12: a__isNat#(length(L)) -> a__isNatList#(L) p13: a__isNatList#(cons(N,L)) -> a__isNatList#(L) p14: a__isNatList#(take(N,IL)) -> a__isNat#(N) p15: mark#(isNat(X)) -> a__isNat#(X) p16: mark#(s(X)) -> mark#(X) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The set of usable rules consists of r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r30, r31, r32, r33, r34, r35, r36, r37, r38, r39, r40, r41, r42 Take the reduction pair: max/plus interpretations on natural numbers: a__and#_A(x1,x2) = max{17, x1 + 1, x2 + 2} tt_A = 18 mark#_A(x1) = x1 + 2 and_A(x1,x2) = max{15, x1 + 14, x2} mark_A(x1) = x1 isNatIList_A(x1) = x1 + 32 a__isNatIList#_A(x1) = x1 + 34 cons_A(x1,x2) = max{x1 - 5, x2} a__isNat_A(x1) = x1 + 13 a__isNatIList_A(x1) = x1 + 32 isNatList_A(x1) = x1 + 32 a__isNatList#_A(x1) = x1 + 34 a__isNatList_A(x1) = x1 + 32 a__isNat#_A(x1) = x1 + 15 s_A(x1) = max{6, x1} length_A(x1) = x1 + 19 take_A(x1,x2) = max{x1 + 18, x2 + 14} isNat_A(x1) = x1 + 13 a__and_A(x1,x2) = max{15, x1 + 14, x2} a__zeros_A = 0 |0|_A = 5 zeros_A = 0 a__take_A(x1,x2) = max{x1 + 18, x2 + 14} a__uTake1_A(x1) = 19 nil_A = 1 a__uTake2_A(x1,x2,x3,x4) = max{x2 + 18, x3 - 1, x4 + 14} a__length_A(x1) = x1 + 19 a__uLength_A(x1,x2) = max{x1 - 13, x2 + 19} uTake1_A(x1) = 19 uTake2_A(x1,x2,x3,x4) = max{x2 + 18, x3 - 1, x4 + 14} uLength_A(x1,x2) = max{x1 - 13, x2 + 19} The next rules are strictly ordered: p3, p10, p14 We remove them from the problem. -- SCC decomposition. Consider the dependency pair problem (P, R), where P consists of p1: a__and#(tt(),T) -> mark#(T) p2: mark#(and(X1,X2)) -> a__and#(mark(X1),mark(X2)) p3: mark#(and(X1,X2)) -> mark#(X2) p4: mark#(isNatIList(X)) -> a__isNatIList#(X) p5: a__isNatIList#(cons(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p6: a__isNatIList#(cons(N,IL)) -> a__isNatIList#(IL) p7: mark#(isNatList(X)) -> a__isNatList#(X) p8: a__isNatList#(cons(N,L)) -> a__and#(a__isNat(N),a__isNatList(L)) p9: a__isNat#(s(N)) -> a__isNat#(N) p10: a__isNat#(length(L)) -> a__isNatList#(L) p11: a__isNatList#(cons(N,L)) -> a__isNatList#(L) p12: mark#(isNat(X)) -> a__isNat#(X) p13: mark#(s(X)) -> mark#(X) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The estimated dependency graph contains the following SCCs: {p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13} -- Reduction pair. Consider the dependency pair problem (P, R), where P consists of p1: a__and#(tt(),T) -> mark#(T) p2: mark#(s(X)) -> mark#(X) p3: mark#(isNat(X)) -> a__isNat#(X) p4: a__isNat#(length(L)) -> a__isNatList#(L) p5: a__isNatList#(cons(N,L)) -> a__isNatList#(L) p6: a__isNatList#(cons(N,L)) -> a__and#(a__isNat(N),a__isNatList(L)) p7: a__isNat#(s(N)) -> a__isNat#(N) p8: mark#(isNatList(X)) -> a__isNatList#(X) p9: mark#(isNatIList(X)) -> a__isNatIList#(X) p10: a__isNatIList#(cons(N,IL)) -> a__isNatIList#(IL) p11: a__isNatIList#(cons(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p12: mark#(and(X1,X2)) -> mark#(X2) p13: mark#(and(X1,X2)) -> a__and#(mark(X1),mark(X2)) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The set of usable rules consists of r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r30, r31, r32, r33, r34, r35, r36, r37, r38, r39, r40, r41, r42 Take the reduction pair: max/plus interpretations on natural numbers: a__and#_A(x1,x2) = x2 + 5 tt_A = 1 mark#_A(x1) = x1 + 5 s_A(x1) = max{2, x1} isNat_A(x1) = 3 a__isNat#_A(x1) = 6 length_A(x1) = x1 + 5 a__isNatList#_A(x1) = 6 cons_A(x1,x2) = max{11, x1, x2} a__isNat_A(x1) = 3 a__isNatList_A(x1) = 1 isNatList_A(x1) = 1 isNatIList_A(x1) = 1 a__isNatIList#_A(x1) = 6 a__isNatIList_A(x1) = 1 and_A(x1,x2) = max{1, x1 - 4, x2} mark_A(x1) = x1 a__and_A(x1,x2) = max{1, x1 - 4, x2} a__zeros_A = 11 |0|_A = 1 zeros_A = 11 a__take_A(x1,x2) = x2 + 12 a__uTake1_A(x1) = x1 + 11 nil_A = 11 a__uTake2_A(x1,x2,x3,x4) = max{x1 + 11, x3 + 12, x4 + 12} take_A(x1,x2) = x2 + 12 a__length_A(x1) = x1 + 5 a__uLength_A(x1,x2) = max{x1 + 4, x2 + 5} uTake1_A(x1) = x1 + 11 uTake2_A(x1,x2,x3,x4) = max{x1 + 11, x3 + 12, x4 + 12} uLength_A(x1,x2) = max{x1 + 4, x2 + 5} The next rules are strictly ordered: p3 We remove them from the problem. -- SCC decomposition. Consider the dependency pair problem (P, R), where P consists of p1: a__and#(tt(),T) -> mark#(T) p2: mark#(s(X)) -> mark#(X) p3: a__isNat#(length(L)) -> a__isNatList#(L) p4: a__isNatList#(cons(N,L)) -> a__isNatList#(L) p5: a__isNatList#(cons(N,L)) -> a__and#(a__isNat(N),a__isNatList(L)) p6: a__isNat#(s(N)) -> a__isNat#(N) p7: mark#(isNatList(X)) -> a__isNatList#(X) p8: mark#(isNatIList(X)) -> a__isNatIList#(X) p9: a__isNatIList#(cons(N,IL)) -> a__isNatIList#(IL) p10: a__isNatIList#(cons(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p11: mark#(and(X1,X2)) -> mark#(X2) p12: mark#(and(X1,X2)) -> a__and#(mark(X1),mark(X2)) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The estimated dependency graph contains the following SCCs: {p6} {p1, p2, p4, p5, p7, p8, p9, p10, p11, p12} -- Reduction pair. Consider the dependency pair problem (P, R), where P consists of p1: a__isNat#(s(N)) -> a__isNat#(N) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The set of usable rules consists of (no rules) Take the monotone reduction pair: max/plus interpretations on natural numbers: a__isNat#_A(x1) = x1 s_A(x1) = x1 + 1 The next rules are strictly ordered: p1 We remove them from the problem. Then no dependency pair remains. -- Reduction pair. Consider the dependency pair problem (P, R), where P consists of p1: a__and#(tt(),T) -> mark#(T) p2: mark#(and(X1,X2)) -> a__and#(mark(X1),mark(X2)) p3: mark#(and(X1,X2)) -> mark#(X2) p4: mark#(isNatIList(X)) -> a__isNatIList#(X) p5: a__isNatIList#(cons(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p6: a__isNatIList#(cons(N,IL)) -> a__isNatIList#(IL) p7: mark#(isNatList(X)) -> a__isNatList#(X) p8: a__isNatList#(cons(N,L)) -> a__and#(a__isNat(N),a__isNatList(L)) p9: a__isNatList#(cons(N,L)) -> a__isNatList#(L) p10: mark#(s(X)) -> mark#(X) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The set of usable rules consists of r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r30, r31, r32, r33, r34, r35, r36, r37, r38, r39, r40, r41, r42 Take the reduction pair: max/plus interpretations on natural numbers: a__and#_A(x1,x2) = x2 + 2 tt_A = 10 mark#_A(x1) = x1 + 2 and_A(x1,x2) = max{15, x2} mark_A(x1) = max{12, x1} isNatIList_A(x1) = x1 + 26 a__isNatIList#_A(x1) = max{28, x1 + 16} cons_A(x1,x2) = max{x1, x2 + 12} a__isNat_A(x1) = x1 + 39 a__isNatIList_A(x1) = x1 + 26 isNatList_A(x1) = x1 + 26 a__isNatList#_A(x1) = x1 + 17 a__isNatList_A(x1) = x1 + 26 s_A(x1) = max{1, x1} a__and_A(x1,x2) = max{15, x2} a__zeros_A = 12 |0|_A = 0 zeros_A = 0 a__take_A(x1,x2) = x2 a__uTake1_A(x1) = 0 nil_A = 0 a__uTake2_A(x1,x2,x3,x4) = max{x3, x4 + 12} take_A(x1,x2) = x2 a__length_A(x1) = max{40, x1 + 28} a__uLength_A(x1,x2) = max{x1 + 1, x2 + 40} length_A(x1) = max{40, x1 + 28} uTake1_A(x1) = 0 uTake2_A(x1,x2,x3,x4) = max{x3, x4 + 12} uLength_A(x1,x2) = max{x1 + 1, x2 + 40} isNat_A(x1) = x1 + 39 The next rules are strictly ordered: p7, p8, p9 We remove them from the problem. -- SCC decomposition. Consider the dependency pair problem (P, R), where P consists of p1: a__and#(tt(),T) -> mark#(T) p2: mark#(and(X1,X2)) -> a__and#(mark(X1),mark(X2)) p3: mark#(and(X1,X2)) -> mark#(X2) p4: mark#(isNatIList(X)) -> a__isNatIList#(X) p5: a__isNatIList#(cons(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p6: a__isNatIList#(cons(N,IL)) -> a__isNatIList#(IL) p7: mark#(s(X)) -> mark#(X) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The estimated dependency graph contains the following SCCs: {p1, p2, p3, p4, p5, p6, p7} -- Reduction pair. Consider the dependency pair problem (P, R), where P consists of p1: a__and#(tt(),T) -> mark#(T) p2: mark#(s(X)) -> mark#(X) p3: mark#(isNatIList(X)) -> a__isNatIList#(X) p4: a__isNatIList#(cons(N,IL)) -> a__isNatIList#(IL) p5: a__isNatIList#(cons(N,IL)) -> a__and#(a__isNat(N),a__isNatIList(IL)) p6: mark#(and(X1,X2)) -> mark#(X2) p7: mark#(and(X1,X2)) -> a__and#(mark(X1),mark(X2)) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The set of usable rules consists of r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r30, r31, r32, r33, r34, r35, r36, r37, r38, r39, r40, r41, r42 Take the reduction pair: max/plus interpretations on natural numbers: a__and#_A(x1,x2) = max{2, x1 - 16, x2 - 7} tt_A = 23 mark#_A(x1) = max{0, x1 - 8} s_A(x1) = max{8, x1 + 4} isNatIList_A(x1) = x1 + 23 a__isNatIList#_A(x1) = x1 + 15 cons_A(x1,x2) = max{x1, x2 + 4} a__isNat_A(x1) = max{23, x1 + 22} a__isNatIList_A(x1) = x1 + 23 and_A(x1,x2) = max{19, x1 - 8, x2 + 4} mark_A(x1) = max{4, x1} a__and_A(x1,x2) = max{19, x1 - 8, x2 + 4} a__isNatList_A(x1) = x1 + 15 nil_A = 8 take_A(x1,x2) = max{24, x1 + 20, x2 + 18} a__zeros_A = 4 |0|_A = 0 zeros_A = 0 a__take_A(x1,x2) = max{24, x1 + 20, x2 + 18} a__uTake1_A(x1) = 24 a__uTake2_A(x1,x2,x3,x4) = max{28, x2 + 24, x3, x4 + 22} a__length_A(x1) = x1 a__uLength_A(x1,x2) = max{x1 - 15, x2 + 4} isNatList_A(x1) = x1 + 15 length_A(x1) = x1 uTake1_A(x1) = 24 uTake2_A(x1,x2,x3,x4) = max{28, x2 + 24, x3, x4 + 22} uLength_A(x1,x2) = max{x1 - 15, x2 + 4} isNat_A(x1) = max{23, x1 + 22} The next rules are strictly ordered: p1, p4, p5, p6 We remove them from the problem. -- SCC decomposition. Consider the dependency pair problem (P, R), where P consists of p1: mark#(s(X)) -> mark#(X) p2: mark#(isNatIList(X)) -> a__isNatIList#(X) p3: mark#(and(X1,X2)) -> a__and#(mark(X1),mark(X2)) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The estimated dependency graph contains the following SCCs: {p1} -- Reduction pair. Consider the dependency pair problem (P, R), where P consists of p1: mark#(s(X)) -> mark#(X) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The set of usable rules consists of (no rules) Take the monotone reduction pair: max/plus interpretations on natural numbers: mark#_A(x1) = x1 s_A(x1) = x1 + 1 The next rules are strictly ordered: p1 We remove them from the problem. Then no dependency pair remains. -- Reduction pair. Consider the dependency pair problem (P, R), where P consists of p1: a__length#(cons(N,L)) -> a__uLength#(a__and(a__isNat(N),a__isNatList(L)),L) p2: a__uLength#(tt(),L) -> a__length#(mark(L)) and R consists of: r1: a__and(tt(),T) -> mark(T) r2: a__isNatIList(IL) -> a__isNatList(IL) r3: a__isNat(|0|()) -> tt() r4: a__isNat(s(N)) -> a__isNat(N) r5: a__isNat(length(L)) -> a__isNatList(L) r6: a__isNatIList(zeros()) -> tt() r7: a__isNatIList(cons(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r8: a__isNatList(nil()) -> tt() r9: a__isNatList(cons(N,L)) -> a__and(a__isNat(N),a__isNatList(L)) r10: a__isNatList(take(N,IL)) -> a__and(a__isNat(N),a__isNatIList(IL)) r11: a__zeros() -> cons(|0|(),zeros()) r12: a__take(|0|(),IL) -> a__uTake1(a__isNatIList(IL)) r13: a__uTake1(tt()) -> nil() r14: a__take(s(M),cons(N,IL)) -> a__uTake2(a__and(a__isNat(M),a__and(a__isNat(N),a__isNatIList(IL))),M,N,IL) r15: a__uTake2(tt(),M,N,IL) -> cons(mark(N),take(M,IL)) r16: a__length(cons(N,L)) -> a__uLength(a__and(a__isNat(N),a__isNatList(L)),L) r17: a__uLength(tt(),L) -> s(a__length(mark(L))) r18: mark(and(X1,X2)) -> a__and(mark(X1),mark(X2)) r19: mark(isNatIList(X)) -> a__isNatIList(X) r20: mark(isNatList(X)) -> a__isNatList(X) r21: mark(isNat(X)) -> a__isNat(X) r22: mark(length(X)) -> a__length(mark(X)) r23: mark(zeros()) -> a__zeros() r24: mark(take(X1,X2)) -> a__take(mark(X1),mark(X2)) r25: mark(uTake1(X)) -> a__uTake1(mark(X)) r26: mark(uTake2(X1,X2,X3,X4)) -> a__uTake2(mark(X1),X2,X3,X4) r27: mark(uLength(X1,X2)) -> a__uLength(mark(X1),X2) r28: mark(tt()) -> tt() r29: mark(|0|()) -> |0|() r30: mark(s(X)) -> s(mark(X)) r31: mark(cons(X1,X2)) -> cons(mark(X1),X2) r32: mark(nil()) -> nil() r33: a__and(X1,X2) -> and(X1,X2) r34: a__isNatIList(X) -> isNatIList(X) r35: a__isNatList(X) -> isNatList(X) r36: a__isNat(X) -> isNat(X) r37: a__length(X) -> length(X) r38: a__zeros() -> zeros() r39: a__take(X1,X2) -> take(X1,X2) r40: a__uTake1(X) -> uTake1(X) r41: a__uTake2(X1,X2,X3,X4) -> uTake2(X1,X2,X3,X4) r42: a__uLength(X1,X2) -> uLength(X1,X2) The set of usable rules consists of r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r30, r31, r32, r33, r34, r35, r36, r37, r38, r39, r40, r41, r42 Take the reduction pair: max/plus interpretations on natural numbers: a__length#_A(x1) = x1 + 4 cons_A(x1,x2) = max{14, x2 + 11} a__uLength#_A(x1,x2) = max{x1 - 17, x2 + 5} a__and_A(x1,x2) = max{17, x2 + 3} a__isNat_A(x1) = x1 + 40 a__isNatList_A(x1) = max{16, x1 + 5} tt_A = 36 mark_A(x1) = max{14, x1} a__isNatIList_A(x1) = x1 + 33 zeros_A = 3 a__zeros_A = 14 |0|_A = 18 a__take_A(x1,x2) = max{47, x1 + 22, x2 + 33} a__uTake1_A(x1) = x1 nil_A = 31 s_A(x1) = max{36, x1 + 11} a__uTake2_A(x1,x2,x3,x4) = max{58, x1 - 26, x2 + 33, x4 + 44} take_A(x1,x2) = max{47, x1 + 22, x2 + 33} a__length_A(x1) = max{19, x1 - 3} a__uLength_A(x1,x2) = max{9, x1, x2 + 8} isNatIList_A(x1) = x1 + 33 length_A(x1) = max{19, x1 - 3} uTake1_A(x1) = x1 uTake2_A(x1,x2,x3,x4) = max{58, x1 - 26, x2 + 33, x4 + 44} uLength_A(x1,x2) = max{x1, x2 + 8} and_A(x1,x2) = max{17, x2 + 3} isNatList_A(x1) = max{16, x1 + 5} isNat_A(x1) = x1 + 40 The next rules are strictly ordered: p1, p2 We remove them from the problem. Then no dependency pair remains.