YES

We show the termination of the TRS R:

  ++(nil(),y) -> y
  ++(x,nil()) -> x
  ++(.(x,y),z) -> .(x,++(y,z))
  ++(++(x,y),z) -> ++(x,++(y,z))

-- SCC decomposition.

Consider the dependency pair problem (P, R), where P consists of

p1: ++#(.(x,y),z) -> ++#(y,z)
p2: ++#(++(x,y),z) -> ++#(x,++(y,z))
p3: ++#(++(x,y),z) -> ++#(y,z)

and R consists of:

r1: ++(nil(),y) -> y
r2: ++(x,nil()) -> x
r3: ++(.(x,y),z) -> .(x,++(y,z))
r4: ++(++(x,y),z) -> ++(x,++(y,z))

The estimated dependency graph contains the following SCCs:

  {p1, p2, p3}


-- Reduction pair.

Consider the dependency pair problem (P, R), where P consists of

p1: ++#(.(x,y),z) -> ++#(y,z)
p2: ++#(++(x,y),z) -> ++#(y,z)
p3: ++#(++(x,y),z) -> ++#(x,++(y,z))

and R consists of:

r1: ++(nil(),y) -> y
r2: ++(x,nil()) -> x
r3: ++(.(x,y),z) -> .(x,++(y,z))
r4: ++(++(x,y),z) -> ++(x,++(y,z))

The set of usable rules consists of

  r1, r2, r3, r4

Take the reduction pair:

  lexicographic combination of reduction pairs:
  
    1. lexicographic path order with precedence:
    
      precedence:
      
        nil > ++ > . > ++#
      
      argument filter:
    
        pi(++#) = [1]
        pi(.) = 2
        pi(++) = [1, 2]
        pi(nil) = []
    
    2. lexicographic path order with precedence:
    
      precedence:
      
        nil > ++ > . > ++#
      
      argument filter:
    
        pi(++#) = []
        pi(.) = 2
        pi(++) = 1
        pi(nil) = []
    

The next rules are strictly ordered:

  p2, p3

We remove them from the problem.

-- SCC decomposition.

Consider the dependency pair problem (P, R), where P consists of

p1: ++#(.(x,y),z) -> ++#(y,z)

and R consists of:

r1: ++(nil(),y) -> y
r2: ++(x,nil()) -> x
r3: ++(.(x,y),z) -> .(x,++(y,z))
r4: ++(++(x,y),z) -> ++(x,++(y,z))

The estimated dependency graph contains the following SCCs:

  {p1}


-- Reduction pair.

Consider the dependency pair problem (P, R), where P consists of

p1: ++#(.(x,y),z) -> ++#(y,z)

and R consists of:

r1: ++(nil(),y) -> y
r2: ++(x,nil()) -> x
r3: ++(.(x,y),z) -> .(x,++(y,z))
r4: ++(++(x,y),z) -> ++(x,++(y,z))

The set of usable rules consists of

  (no rules)

Take the reduction pair:

  lexicographic combination of reduction pairs:
  
    1. lexicographic path order with precedence:
    
      precedence:
      
        . > ++#
      
      argument filter:
    
        pi(++#) = [1]
        pi(.) = [1, 2]
    
    2. lexicographic path order with precedence:
    
      precedence:
      
        . > ++#
      
      argument filter:
    
        pi(++#) = [1]
        pi(.) = [1, 2]
    

The next rules are strictly ordered:

  p1

We remove them from the problem.  Then no dependency pair remains.