Perhaps we all can agree, that mathematical proofs are a limitless source of happiness and holiday cheer, especially if they don't require much use of pencil and paper.
Let me just pose a question, and see if we can prove an answer: What is the angle between two vectors with complex components? Indeed, if we can answer this question for vectors of length 2, by some transformation or another, the same answer applies in arbitrary dimension.
The stumbling point is that the orthogonal group is not well suited to the complex case. However, theory tells us that orthogonal groups are related to SU(2) through commutation relations, and that representations of rotations in arbitrary high dimension can be constructed from SU(2). Mostly only physicists know how to do this, because of Julian Schwinger's report "On Angular Momentum". The many may be happier not going to graduate school, and truth be told, we only need a few basic facts.
The starting place is how to construct the element of SU(2) which takes one vector of the span to the second:
span = {{
z[1, 1, Re] + I *z[1, 1, Im],
z[1, 2, Re] + I*z[1, 2, Im]
}, {
z[2, 1, Re] + I *z[2, 1, Im],
z[2, 2, Re] + I*z[2, 2, Im]
}};
orthoSpan = Conjugate[RotationMatrix[Pi/2] . #] & /@ span;
rotateMatrix = ReplaceAll[Plus[
Outer[Conjugate[#2]*#1 &, span[[2]], span[[1]], 1],
Outer[Conjugate[#2]*#1 &, orthoSpan[[2]], orthoSpan[[1]], 1]],
Conjugate[x_] :> x]
out[]={{(-I z[1, 1, Im] + z[1, 1, Re]) (I z[2, 1, Im] +
z[2, 1, Re]) + (-I z[1, 2, Im] - z[1, 2, Re]) (I z[2, 2, Im] -
z[2, 2, Re]), (-I z[1, 2, Im] + z[1, 2, Re]) (I z[2, 1, Im] +
z[2, 1, Re]) + (I z[1, 1, Im] + z[1, 1, Re]) (I z[2, 2, Im] -
z[2, 2, Re])}, {(-I z[1, 2, Im] - z[1, 2, Re]) (-I z[2, 1, Im] +
z[2, 1, Re]) + (-I z[1, 1, Im] + z[1, 1, Re]) (I z[2, 2, Im] +
z[2, 2, Re]), (I z[1, 1, Im] + z[1, 1, Re]) (-I z[2, 1, Im] +
z[2, 1, Re]) + (-I z[1, 2, Im] + z[1, 2, Re]) (I z[2, 2, Im] + z[2, 2, Re])}}
It looks worse than it actually is, as we shall soon see. The strategy for the proof is to derive this matrix another way, which is intrinsically related to the angular parameter of SU(2). But first, let's check some properties of our hypothetical matrix.
The determinant is one, and the inverse is the conjugate transpose:
unitZeros = ReplaceAll[Conjugate[#] . # - 1 & /@ span,
Conjugate[x_] :> x];
PolynomialMod[Factor[Det[rotateMatrix]], unitZeros]
Out[] = 1
PolynomialMod[Expand[Dot[Transpose[rotateMatrix /. {I -> -I, -I -> I}],
rotateMatrix]], unitZeros]
Out[] ={{1, 0}, {0, 1}}
On the second one we wasted a bit of time needing to find a trick, because for some odd reason, the threading behavior doesn't work here:
Conjugate[a + b I]
Conjugate[a b + b c I]
Out[]= Conjugate[a] - I Conjugate[b]
Out[]= Conjugate[a b + I b c]
Oh well, whatever. These properties we expect to find for any rotation matrix, and also that $2 \cos(\theta) = Tr[M]$, which can easily be computed as:
Expand[Tr[rotateMatrix]]
Out[] = 2 z[1, 1, Im] z[2, 1, Im] + 2 z[1, 1, Re] z[2, 1, Re]
+ 2 z[1, 2, Im] z[2, 2, Im] + 2 z[1, 2, Re] z[2, 2, Re]
Look closely, and you can see something quite amazing: $\cos(\theta) = Re[u].Re[v] + Im[u].Im[v]$:
Plus[
Apply[Dot, span /. {z[_, _, Im] -> 0}],
Apply[Dot, span /. {z[_, _, Re] -> 0, I -> 1}]
]
Out[]= z[1, 1, Im] z[2, 1, Im] + z[1, 1, Re] z[2, 1, Re]
+ z[1, 2, Im] z[2, 2, Im] + z[1, 2, Re] z[2, 2, Re]
Now what's even better for the upcoming year of the water rabbit, is that we can extend the proof to get not only $\cos(\theta)$ but also $\sin(\theta)$. First we need to define a set of real, four-dimensional matrices, which effectively look like the Pauli matrices:
PauliMatrix[Range[0, 3]]
Out[]= {{{1, 0}, {0, 1}}, {{0, 1}, {1, 0}}, {{0, -I}, {I, 0}}, {{1,0}, {0, -1}}}
By induction (and after a round of refinement), we find that:
pauliMatrices4x4[
] := pauliMatrices4x4[
] = With[{
id2 = IdentityMatrix[2],
pl2 = I PauliMatrix[2]
},
ArrayFlatten[#] & /@ {
{{id2, 0}, {0, id2}},
{{0, pl2}, {pl2, 0}},
{{0, -id2}, {id2, 0}},
{{pl2, 0}, {0, -pl2}}
}
];
Out[]={
{{1, 0, 0, 0}, {0, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}},
{{0, 0, 0, 1}, {0, 0, -1, 0}, {0, 1, 0, 0}, {-1, 0, 0, 0}},
{{0, 0, -1, 0}, {0, 0, 0, -1}, {1, 0, 0, 0}, {0, 1, 0, 0}},
{{0, 1, 0, 0}, {-1, 0, 0, 0}, {0, 0, 0, -1}, {0, 0, 1, 0}}
}
These I've never seen before, but they turn out to be useful as follows:
fourvecSpan = Catenate@*ReIm /@ span /. {
Im[x_] :> 0, Re[x_] :> x
};
componentsAlt = Map[
Dot[fourvecSpan[[1]], #, fourvecSpan[[2]]] &,
pauliMatrices4x4[]];
rotateMatrixAlt = Dot[componentsAlt, Times[
PauliMatrix[Range[0, 3]],
{1, I, I, I}]];
PolynomialMod[componentsAlt . componentsAlt, unitZeros]
Out[] = 1
Expand[rotateMatrixAlt - rotateMatrix]
Out[ ] = {{0, 0}, {0, 0}}
The first truth value says that $\sin(\theta)$ is the norm of the last three components of the Pauli 4-vector, as it must be! The second set of truth values tells us that the formula $M = I \cos(\theta) + \hat{n}\cdot\hat{\sigma} \sin(\theta)$ can be evaluated using real-valued components of the complex-valued input spanning vectors. This is a nice fact to know, because if we just normalize the imaginary part of the Pauli 4-vector (it's last three components) we get $\hat{n}$, and can then obtain any unit vector in the unit circle of the complex plane defined by the input spanning vectors. This is equivalent to the promised usage:
RotationMatrix[ $\theta$, { $u$,$v$}]
(After a bit more work transforming between bases, and breaking more assumptions. Don't worry, if this memo is convincing enough, it will soon work great!)
Having the $\theta$ parameter is the continuous means to generate SU(2), and it should be good enough without extra rigor, but here it is anyways. The discrete means for generating SU(2) is to apply the addition rules for sine and cosine, which we don't have over the complexes. However, we can easily verify group composition in a numerical test case just by repeatedly dotting the same matrix with itself:
RotationMatrix2x2[span_] := Module[
{fourvecSpan, components},
fourvecSpan = Catenate@*ReIm /@ span /. {
Im[x_] :> 0, Re[x_] :> x
};
components = Map[Dot[fourvecSpan[[1]], #, fourvecSpan[[2]]] &,
pauliMatrices4x4[]];
Divide[Dot[components, Times[
PauliMatrix[Range[0, 3]],
{1, I, I, I}]],
Apply[Times, Norm /@ span]]
]
Table[With[{
test = (RandomInteger[{-5, 5}, {2, 2, 2}] . {1, I})},
Expand[Subtract[
2 (Tr[RotationMatrix2x2[test]]/2)^2 - 1,
Tr[RotationMatrix2x2[test] . RotationMatrix2x2[test]]/2
]]], 10]
Out[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
Or if numerical tests aren't good enough, we can refer to wise Bill Harter's PSDS Chapter 5, around equation 5.5.6, which says that dotting any two SU(2) matrices with the same $\hat{n}$ vector again produces an SU(2) matrix with the same direction $\hat{n}$. Other than smoothness, That is really the property we need to call $\theta$ a rotation. For smoothness, we can probably let $\theta \rightarrow \delta\theta$, but for now there's one more enticing question to look after:
Can we definie a simple function of the ReIm components of two complex 2-vectors $u$ and $v$ that computes the trigonometric addition of vectors $u$ and $v$ along the unit circle? Does this function have anything to do with induced $4 \times 4$ Pauli matrices we've already seen?
Perhaps one of the winter school students will have an answer --Brad
Let us . . . state, in view of the fact that all knowledge and every pursuit aims at some good, what it is that we say political science aims at and what is the highest of all goods achievable by action. Verbally there is very general agreement; for both the general run of men and people of superior refinement say that it is happiness, and identify living well and doing well with being happy; but with regard to what happiness is they differ, and the many do not give the same account as the wise.
-Aristotle, Nicomachean Ethics