YES Problem: merge(x,nil()) -> x merge(nil(),y) -> y merge(++(x,y),++(u(),v())) -> ++(x,merge(y,++(u(),v()))) merge(++(x,y),++(u(),v())) -> ++(u(),merge(++(x,y),v())) Proof: Matrix Interpretation Processor: dim=3 interpretation: [0] [v] = [0] [0], [0] [u] = [1] [0], [1 0 0] [++](x0, x1) = [0 0 0]x0 + x1 [0 1 0] , [1 1 1] [1 1 1] [merge](x0, x1) = [1 1 1]x0 + [0 1 0]x1 [1 1 1] [1 1 1] , [0] [nil] = [1] [0] orientation: [1 1 1] [1] merge(x,nil()) = [1 1 1]x + [1] >= x = x [1 1 1] [1] [1 1 1] [1] merge(nil(),y) = [0 1 0]y + [1] >= y = y [1 1 1] [1] [1 1 0] [1 1 1] [1] [1 0 0] [1 1 1] [1] merge(++(x,y),++(u(),v())) = [1 1 0]x + [1 1 1]y + [0] >= [0 0 0]x + [1 1 1]y + [0] = ++(x,merge(y,++(u(),v()))) [1 1 0] [1 1 1] [1] [0 1 0] [1 1 1] [1] [1 1 0] [1 1 1] [1] [1 1 0] [1 1 1] [0] merge(++(x,y),++(u(),v())) = [1 1 0]x + [1 1 1]y + [0] >= [1 1 0]x + [1 1 1]y + [0] = ++(u(),merge(++(x,y),v())) [1 1 0] [1 1 1] [1] [1 1 0] [1 1 1] [1] problem: merge(++(x,y),++(u(),v())) -> ++(x,merge(y,++(u(),v()))) Matrix Interpretation Processor: dim=3 interpretation: [0] [v] = [0] [0], [0] [u] = [0] [0], [1 0 0] [1 0 0] [0] [++](x0, x1) = [0 0 0]x0 + [0 1 1]x1 + [0] [0 0 0] [0 0 0] [1], [1 1 1] [1 0 0] [merge](x0, x1) = [0 1 0]x0 + [0 0 0]x1 [0 0 1] [0 0 0] orientation: [1 0 0] [1 1 1] [1] [1 0 0] [1 1 1] [0] merge(++(x,y),++(u(),v())) = [0 0 0]x + [0 1 1]y + [0] >= [0 0 0]x + [0 1 1]y + [0] = ++(x,merge(y,++(u(),v()))) [0 0 0] [0 0 0] [1] [0 0 0] [0 0 0] [1] problem: Qed