TRS: { fst(0(), Z) -> nil(), fst(s(), cons(Y)) -> cons(Y), from(X) -> cons(X), add(0(), X) -> X, add(s(), Y) -> s(), len(nil()) -> 0(), len(cons(X)) -> s()} POP* + Boolean Semantic Labelling: Normal positions: pi(len_sl=1) = [1], pi(len_sl=0) = [1], pi(from_sl=1) = [1], pi(from_sl=0) = [1], pi(fst_sl=1) = [1,2], pi(fst_sl=0) = [1,2] Safe positions: pi(cons_sl=1) = [1], pi(cons_sl=0) = [1] Precedence: from_sl=0 > cons_sl=0, fst_sl=0 > nil_sl=0, len_sl=0 > s_sl=0, len_sl=0 > 0_sl=0 empty Interpretation: nil^(0): | 1 fst^(2): 00 | 1 01 | 1 10 | 0 11 | 0 0^(0): | 0 cons^(1): 0 | 0 1 | 0 s^(0): | 1 from^(1): 0 | 0 1 | 0 add^(2): 00 | 0 01 | 1 10 | 1 11 | 1 len^(1): 0 | 1 1 | 0 Labelling: nil^(0): | 0 fst^(2): 00 | 0 01 | 0 10 | 0 11 | 0 0^(0): | 0 cons^(1): 0 | 0 1 | 0 s^(0): | 0 from^(1): 0 | 0 1 | 0 add^(2): 00 | 0 01 | 0 10 | 1 11 | 1 len^(1): 0 | 0 1 | 0 Labelled predicative System: { fst_sl=0(0_sl=0(),Z;) -> nil_sl=0(), fst_sl=0(0_sl=0(),Z;) -> nil_sl=0(), fst_sl=0(s_sl=0(),cons_sl=0(;Y);) -> cons_sl=0(;Y), fst_sl=0(s_sl=0(),cons_sl=0(;Y);) -> cons_sl=0(;Y), from_sl=0(X;) -> cons_sl=0(;X), from_sl=0(X;) -> cons_sl=0(;X), add_sl=0(0_sl=0(),X;) -> X, add_sl=0(0_sl=0(),X;) -> X, add_sl=1(s_sl=0(),Y;) -> s_sl=0(), add_sl=1(s_sl=0(),Y;) -> s_sl=0(), len_sl=0(nil_sl=0();) -> 0_sl=0(), len_sl=0(cons_sl=0(;X);) -> s_sl=0(), len_sl=0(cons_sl=0(;X);) -> s_sl=0()} Qed