YES Problem: double(0()) -> 0() double(s(x)) -> s(s(double(x))) half(0()) -> 0() half(s(0())) -> 0() half(s(s(x))) -> s(half(x)) -(x,0()) -> x -(s(x),s(y)) -> -(x,y) if(0(),y,z) -> y if(s(x),y,z) -> z half(double(x)) -> x Proof: Matrix Interpretation Processor: dim=1 interpretation: [-](x0, x1) = 4x0 + 2x1 + 6, [double](x0) = 2x0, [half](x0) = x0 + 5, [if](x0, x1, x2) = 2x0 + 4x1 + 4x2 + 1, [0] = 0, [s](x0) = x0 + 1 orientation: double(0()) = 0 >= 0 = 0() double(s(x)) = 2x + 2 >= 2x + 2 = s(s(double(x))) half(0()) = 5 >= 0 = 0() half(s(0())) = 6 >= 0 = 0() half(s(s(x))) = x + 7 >= x + 6 = s(half(x)) -(x,0()) = 4x + 6 >= x = x -(s(x),s(y)) = 4x + 2y + 12 >= 4x + 2y + 6 = -(x,y) if(0(),y,z) = 4y + 4z + 1 >= y = y if(s(x),y,z) = 2x + 4y + 4z + 3 >= z = z half(double(x)) = 2x + 5 >= x = x problem: double(0()) -> 0() double(s(x)) -> s(s(double(x))) Matrix Interpretation Processor: dim=3 interpretation: [1 0 1] [double](x0) = [0 1 0]x0 [0 0 1] , [0] [0] = [1] [1], [1 0 0] [s](x0) = [0 0 0]x0 [0 0 1] orientation: [1] [0] double(0()) = [1] >= [1] = 0() [1] [1] [1 0 1] [1 0 1] double(s(x)) = [0 0 0]x >= [0 0 0]x = s(s(double(x))) [0 0 1] [0 0 1] problem: double(s(x)) -> s(s(double(x))) Matrix Interpretation Processor: dim=3 interpretation: [1 1 1] [double](x0) = [0 1 1]x0 [0 1 1] , [1 0 0] [0] [s](x0) = [0 0 1]x0 + [0] [0 1 0] [1] orientation: [1 1 1] [1] [1 1 1] [0] double(s(x)) = [0 1 1]x + [1] >= [0 1 1]x + [1] = s(s(double(x))) [0 1 1] [1] [0 1 1] [1] problem: Qed