Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Hi all.

I think I have found an answer, but it is not a "happy" one. The crucial issue was with the line transit_H_to_X = transit_Y_to_X * transit_H_to_Y which works but provides a result that depends on sin(θ) rather than fully simplifying and providing a result that depends on sin(θ_) (the θ_ variable is my name for the 'variable with a hat' θ_ = r*θ.

While that result is formally correct, it is insufficiently simplified, and the later plot command crashes because of this insufficient simplification.

Here is the full running code after manually introducing the transition rather than relying on SageMath to calculate the transition:

from sage. All import *
from IPython.display import display, Math, Latex

%display latex

M = Manifold(4, 'M', latex_name=r'\mathcal{M}', structure='Lorentzian')
X.<t,x,y,z> = M.chart()

U = M.open_subset('U', coord_def={X: (y!=0, x<0)})
X_U = X.restrict(U)
display(Latex(f'$X_U = {latex(X_U)}$'))
Y.<t,r,th,ph> = U.chart(r't:(-oo,+oo) r:(0,+oo) th:(0,+pi):\theta ph:(0,2*pi):\phi')
transit_Y_to_X = Y.transition_map(X, [
    t, r*sin(th)*cos(ph), r*sin(th)*sin(ph), r*cos(th)
])
transit_Y_to_X.set_inverse(
    t, sqrt(x^2+y^2+z^2), arccos(z/sqrt(x^2+y^2+z^2)), atan2(y,x)
)

H.<t,r,th_,ph_> = U.chart(r't:(-oo,+oo) r:(0,+oo) th_:(0,+oo):\hat{θ} ph_:(0,+oo):\hat{φ}')
transit_H_to_Y = H.transition_map(Y, [
    t, r, th_/r, ph_/(r*sin(th))
])
transit_Y_to_H = transit_H_to_Y.inverse()
transit_Y_to_H.display()

# transit_H_to_X = transit_Y_to_X * transit_H_to_Y

display((transit_Y_to_X * transit_H_to_Y).display())
transit_H_to_X = H.transition_map(X, [
    t,
    r*sin(th_/r)*cos(ph_/(r*sin(th_/r))),
    r*sin(th_/r)*sin(ph_/(r*sin(th_/r))),
    r*cos(th_/r),
])
display(transit_H_to_X)
display(transit_H_to_X.display())

transit_H_to_X.set_inverse(
    t,
    sqrt(x^2+y^2+z^2),
    sqrt(x^2+y^2+z^2)*arccos(z/sqrt(x^2+y^2+z^2)),
    sqrt(x^2+y^2+z^2)*sin(arccos(z/sqrt(x^2+y^2+z^2)))*atan2(y,x)
)
transit_X_to_H = transit_H_to_X.inverse()
display(transit_X_to_H)
display(transit_X_to_H.display())

H.plot(chart=X,
    ambient_coords=(x,y,z), fixed_coords={t:0},
    ranges={r:(1,1.1), th_:(1.1,1.2), ph_:(1.1,1.2)}, number_values=3,
)

Thanks for viewing and advice, especially @max_alekseyev.

GPN