# How to implement split-complex numbers?

For those who do not know, the split-complex numbers are an analogue to the complex numbers where J is defined such that $$J^2=1$$ but $$J\ne\pm1$$, so they are all of the form $$a+bJ$$.

By using TagSetDelayed, I tried to define the split-complex numbers as so:

J /: J^2 := 1


If I then type J^2, I get the output 1. However, if I type J^3, I just get the output J^3. I would like to instead get the output $$J$$, since $$J^3=J^2J=1J=J$$. Is there a better way to implement this number system?

• Might be easier to do this using 2x2 matrix representations. Jan 22, 2019 at 22:28
• Ummmm.... isn't $J = -1$? Jan 22, 2019 at 23:28
• Sorry, I forgot to specify that $J\ne -1$ either, I've edited the question to fix that Jan 22, 2019 at 23:46

Try this:

J /: Power[J, p_Integer?OddQ] := J
J /: Power[J, p_Integer?EvenQ] := 1

J^Range[-10, 10]


{1, J, 1, J, 1, J, 1, J, 1, J, 1, J, 1, J, 1, J, 1, J, 1, J, 1}

• This will not work with most functions. See my answer. Dec 12, 2021 at 14:48

You can represent split-complex numbers as multivectors (geometric number, clifford number) with signature $$(1, 0)$$. I have a paclet for this:

PacletInstall["https://wolfr.am/OkONsyY2"]

<< GeometricAlgebra

(* this is your split-complex number *)
h = Multivector[{a, b}, 1]

(* you can perform numeric operations with it *)
h^2
h^-1
MultivectorFunction[Exp, h] (* similar to MatrixFunction *)

• See my much simpler answer. Dec 12, 2021 at 10:22

This way, add this line to the top of the notebook:

\$Post = #/.J->{-1,1}/.{x_,y_}->(x+y)/2+J(y-x)/2&;


Use like this:

In:= Log[J]

Out:= (I Pi)/2 - (I Pi J)/2

In:= I^J

Out:= I J
`