1 | initial version |

First of all, I would recommend using `volume_form(contra=4)`

to get the volume form with all the indices raised up (see the documentation of volume_form). Guessing the form of your metric from the determinant you have given, the code could be

```
M = Manifold(4, 'M')
X.<t,r,th,ph> = M.chart(r't r:(0,+oo) th:(0,pi):\theta ph:\phi')
g = M.lorentzian_metric('g')
ff = function('f')(t)
aa = function('a')(t)
g[0,0] = ff
g[1,1] = aa^2
g[2,2] = aa^2*r^2
g[3,3] = aa^2*r^2*sin(th)^2
g.display()
```

output:

```
g = f(t) dt*dt + a(t)^2 dr*dr + r^2*a(t)^2 dth*dth + r^2*a(t)^2*sin(th)^2 dph*dph
```

`g.volume_form(4)`

returns a 4-vector, i.e. a fully antisymmetric type-(4,0) tensor, with the advantage of a compact display, using wedge products instead of tensor products:

```
print(g.volume_form(contra=4))
g.volume_form(contra=4).display()
```

output:

```
4-vector field on the 4-dimensional differentiable manifold M
sqrt(-f(t))*abs(a(t))^3/(r^2*a(t)^6*f(t)*sin(th)) d/dt/\d/dr/\d/dth/\d/dph
```

The totally upper symbol is then

```
epsilon_up = - g.volume_form(contra=4)*g.sqrt_abs_det()
print(epsilon_up)
epsilon_up.display()
```

output:

```
4-vector field on the 4-dimensional differentiable manifold M
abs(a(t))^6/a(t)^6 d/dt/\d/dr/\d/dth/\d/dph
```

As you pointed out, $|a(t)|$ is not simplified to $a(t)$. Unfortunately, `assume(a(t)>0)`

is of no help here (this is a known weakness of Sage: assumptions involving symbolic functions do not work). If you know that $a(t)>0$, the solution is to ask Sage to substitute $a(t)$ for $|a(t)|$:

```
epsilon_up[0,1,2,3] = epsilon_up[0,1,2,3].expr().substitute({abs(a(t)): a(t)})
epsilon_up.display()
```

output:

```
d/dt/\d/dr/\d/dth/\d/dph
```

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.