TRS:
 {         f(s(X)) -> f(X),
   g(cons(0(), Y)) -> g(Y),
  g(cons(s(X), Y)) -> s(X),
     h(cons(X, Y)) -> h(g(cons(X, Y)))}
 POP* + Boolean Semantic Labelling:
  Normal positions:
  pi(h_sl=1) = [1], pi(h_sl=0) = [1], pi(g_sl=1) = [1], pi(g_sl=0) = [1], pi(f_sl=1) = [1]
  
Safe positions:
   pi(cons_sl=1) = [1,2], pi(cons_sl=0) = [1,2], pi(s_sl=1) = [1], pi(s_sl=0) = [1], pi(f_sl=0) = [1]
  
Precedence:
   f_sl=1 > f_sl=0, 
   h_sl=1 > h_sl=0, 
   h_sl=1 > g_sl=0
   empty
  
Interpretation:
   f^(1):
   0 | 0
   1 | 0
   s^(1):
   0 | 0
   1 | 0
   g^(1):
   0 | 0
   1 | 0
   cons^(2):
   00 | 1
   01 | 1
   10 | 1
   11 | 1
   0^(0):
    | 1
   h^(1):
   0 | 0
   1 | 0
   
  
Labelling:
   f^(1):
   0 | 1
   1 | 0
   s^(1):
   0 | 0
   1 | 0
   g^(1):
   0 | 0
   1 | 0
   cons^(2):
   00 | 1
   01 | 0
   10 | 0
   11 | 1
   0^(0):
    | 0
   h^(1):
   0 | 0
   1 | 1
   
  
Labelled predicative System:
   {              f_sl=1(s_sl=0(;X);) -> f_sl=1(X;),
                  f_sl=1(s_sl=0(;X);) -> f_sl=0(;X),
      g_sl=0(cons_sl=0(;0_sl=0(),Y);) -> g_sl=0(Y;),
      g_sl=0(cons_sl=1(;0_sl=0(),Y);) -> g_sl=0(Y;),
    g_sl=0(cons_sl=1(;s_sl=0(;X),Y);) -> s_sl=0(;X),
    g_sl=0(cons_sl=0(;s_sl=0(;X),Y);) -> s_sl=0(;X),
    g_sl=0(cons_sl=1(;s_sl=0(;X),Y);) -> s_sl=0(;X),
    g_sl=0(cons_sl=0(;s_sl=0(;X),Y);) -> s_sl=0(;X),
             h_sl=1(cons_sl=1(;X,Y);) -> h_sl=0(g_sl=0(cons_sl=1(;X,Y););),
             h_sl=1(cons_sl=0(;X,Y);) -> h_sl=0(g_sl=0(cons_sl=0(;X,Y););),
             h_sl=1(cons_sl=0(;X,Y);) -> h_sl=0(g_sl=0(cons_sl=0(;X,Y););),
             h_sl=1(cons_sl=1(;X,Y);) -> h_sl=0(g_sl=0(cons_sl=1(;X,Y););)}
  

  Qed