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