Sunday, 7 January 2018

One of my greatest fears is that one day I'll wake up in a gridlock I predicted ages ago

Einstein field equations (EFE)



describe the four dimensional geometry g associated with the points of spacetime and corresponding stress-energy tensor T. The differential terms are a function of the metric as described below.


Variable g with upper indices (contravariant) is the inverse of the (covariant) metric.


T describes flux of four momentum between different dimensions, including time. The first term (with upper indices tt) is simply the invariant mass-energy. For a single isolated particle the following (in natural units) applies (v is 4-dimensional velocity vector).


Contravariant stress-energy tensor can be converted into covariant form by the following.


EFE are a kind of generalization of Newtons gravitational potential (Poisson equation).


EFE describe a kind of 4-dimensional array of matrices (in naive numerical sense) corresponding to the structure of such spacetime. This sort of block universe can be seen as static. Theoretically it's possible that in this sort of block there could exist "flows" and geometries that form a closed loop in what we would normally call time (allowing a kind of time travel into the past). The naive interpretation of EFE would suggest that if such loops exist, they ought to form consistent spacetime. That is to say in order for them to be a solution to the equations, no grandfather paradoxes can form. You will (for one reason or another) only do such things in the "past" that are consistent with the block as a whole. Quantum mechanics may significantly complicate the situation if something along the lines of these loops are possible, but instead lead to alternative realities. The block of all universes must still be consistent as a whole, but as there are now several alternative realities and bridges between them, the consistency requirement can still apply and allow some particular futures to be consistent with time traveller "causing" them.

How to actually compute a solution to some practical problem with EFE is a topic for some other time.
--
The end justifies the means as long as the means are factored into the end.

If you could actually rationalize your opinion, it wouldn't be an opinion.

I don't really care about subjective changes all that much, it's the objective ones that I find interesting.

Every January I remember my mortality, but then I forget it for a while again.

Sometimes I consider will a flaw.

What to do when you reach a conclusion that is highly likely to be sound, yet highly undesirable?

...it's just not in my nature.

A true explanation must come to an end where no further explanations are required and none can exist, but can it be?
--
BTW. The Great Philosophers by Stephen Law is pretty nice and compact book about philosophy.
--
double g[4][4][N*N*N*N]; /* spacetime metric tensors */
double T[4][4][N*N*N*N]; /* spacetime stress-energy tensors */

int npow(int i) {
  int val = 1;
  for(int j=0; j<i; j++)
    val = val*N;
  return val;
}

/* computes values of individual Christoffel symbols */
double christoffel(int i, int j, int l, int loc) {
  double val = 0.0, d;
  for(int k=0; k<4; k++) {
    d = \
      (g[k][i][loc + npow(j)] - g[k][i][loc - npow(j)]) +  \
      (g[k][j][loc + npow(i)] - g[k][j][loc - npow(i)]) -  \
      (g[i][j][loc + npow(k)] - g[i][j][loc - npow(k)]);
    val = val + g[l][k][loc]*d;
  }
  return 0.5*val;
}

/* computes values of individual components of Ricci curvature tensor */
double ricci(int i, int j, int loc) {
  double val = 0.0;
  double a = 0.0, b = 0.0;
  for(int l=0; l<4; l++) val += \
    christoffel(i, j, l, loc + npow(l)) - christoffel(i, j, l, loc - npow(l));
  for(int l=0; l<4; l++) val -= \
    christoffel(i, l, l, loc + npow(j)) - christoffel(i, j, l, loc - npow(j));
  for(int m=0; m<4; m++)
    for(int l=0; l<4; l++) val += \
      christoffel(i, j, m, loc)*christoffel(m, l, l, loc);
  for(int m=0; m<4; m++)
    for(int l=0; l<4; l++) val -= \
      christoffel(i, l, m, loc)*christoffel(m, j, l, loc);
  return val;
}

/* computes scalar curvature */
double scalar_curvature(int i, int j, int loc) {
  double gi[4][4], A[4][4], val = 0.0;
  double A2[4][4], A3[4][4], trA, trA2, trA3, det = 0.0;

  /* find metric tensor and initialize gi to zero */
  for(int i=0; i<4; i++)
    for(int j=0; j<4; j++) {
      A[i][j] = g[i][j][loc];
      gi[i][j] = 0.0;
    }

  /* compute g^2 and g^3 */
  for(int i=0; i<4; i++)
    for(int j=0; j<4; j++)
      for(int k=0; k<4; k++)
A2[i][j] += A[i][k]*A[k][j]; 
  for(int i=0; i<4; i++)
    for(int j=0; j<4; j++)
      for(int k=0; k<4; k++)
A3[i][j] += A2[i][k]*A[k][j]; 

  /* use Cayley-Hamilton method to compute inverse of g */
  trA  =  A[0][0] +  A[1][1] +  A[2][2] +  A[3][3];
  trA2 = A2[0][0] + A2[1][1] + A2[2][2] + A2[3][3];
  trA3 = A3[0][0] + A3[1][1] + A3[2][2] + A3[3][3];
  for(int i=0; i<4; i++) {
    gi[i][i] = (trA*trA*trA - 3*trA*trA2 + 2*trA3)/6.0;
    for(int j=0; j<4; j++)
      gi[i][j] += A2[i][j]*trA - A3[i][j] - 0.5*A[i][j]*(trA*trA-trA2);
  }

  /* division of gi such that (g*gi)_{00} = 1 */
  for(int k=0; k<4; k++)
    det += A[0][k]*gi[k][0];
  for(int i=0; i<4; i++)
    for(int j=0; j<4; j++)
      gi[i][j] /= det;

  /* compute Ricci scalar */
  for(int i=0; i<4; i++)
    for(int j=0; j<4; j++)
      val += gi[i][j]*ricci(i, j, loc);

  return val;
}