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], [1 1 0] [merge](x0, x1) = [0 1 0]x0 + x1 [0 0 1] , [0] [u] = [0] [0], [1] [nil] = [0] [0], [1 0 0] [1 0 0] [++](x0, x1) = [0 0 0]x0 + [0 1 1]x1 [0 0 0] [0 0 0] orientation: [1 1 0] [1] merge(x,nil()) = [0 1 0]x + [0] >= x = x [0 0 1] [0] [1] merge(nil(),y) = y + [0] >= y = y [0] [1 0 0] [1 1 1] [1 0 0] [1 1 0] merge(++(x,y),++(u(),v())) = [0 0 0]x + [0 1 1]y >= [0 0 0]x + [0 1 1]y = ++(x,merge(y,++(u(),v()))) [0 0 0] [0 0 0] [0 0 0] [0 0 0] [1 0 0] [1 1 1] [1 0 0] [1 1 1] merge(++(x,y),++(u(),v())) = [0 0 0]x + [0 1 1]y >= [0 0 0]x + [0 1 1]y = ++(u(),merge(++(x,y),v())) [0 0 0] [0 0 0] [0 0 0] [0 0 0] problem: merge(++(x,y),++(u(),v())) -> ++(x,merge(y,++(u(),v()))) merge(++(x,y),++(u(),v())) -> ++(u(),merge(++(x,y),v())) Matrix Interpretation Processor: dim=3 interpretation: [0] [v] = [0] [0], [1 1 1] [1 0 0] [merge](x0, x1) = [0 1 0]x0 + [0 0 1]x1 [0 0 1] [0 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] 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 + [1] >= [0 0 0]x + [0 1 1]y + [1] = ++(x,merge(y,++(u(),v()))) [0 0 0] [0 0 0] [1] [0 0 0] [0 0 0] [1] [1 0 0] [1 1 1] [1] [1 0 0] [1 1 1] [1] merge(++(x,y),++(u(),v())) = [0 0 0]x + [0 1 1]y + [1] >= [0 0 0]x + [0 1 1]y + [1] = ++(u(),merge(++(x,y),v())) [0 0 0] [0 0 0] [1] [0 0 0] [0 0 0] [1] problem: merge(++(x,y),++(u(),v())) -> ++(u(),merge(++(x,y),v())) Matrix Interpretation Processor: dim=3 interpretation: [0] [v] = [0] [1], [1 0 0] [1 1 0] [merge](x0, x1) = [0 0 1]x0 + [0 0 0]x1 [0 0 0] [0 0 0] , [0] [u] = [0] [0], [1 0 0] [1 0 0] [++](x0, x1) = [0 0 0]x0 + [0 1 1]x1 [0 1 0] [0 0 0] orientation: [1 0 0] [1 0 0] [1] [1 0 0] [1 0 0] merge(++(x,y),++(u(),v())) = [0 1 0]x + [0 0 0]y + [0] >= [0 1 0]x + [0 0 0]y = ++(u(),merge(++(x,y),v())) [0 0 0] [0 0 0] [0] [0 0 0] [0 0 0] problem: Qed