AUG 1 MODEDECLARE(I,INTEGER,J,INTEGER,K,INTEGER,L,INTEGER)$ MODEDECLARE(RICCISCALEQ,BOOLEAN,INVERTED,BOOLEAN,R,INTEGER)$ INVERTED:FALSE$ CHR1[I,J,K]:=IF I>=J THEN RATSIMP((1/2)*(DIFF(G[I,K],X[J])+DIFF(G[J,K],X[I])-DIFF(G[I,J],X[K]))) ELSE CHR1[J,I,K]$ CHR2[I,J,L]:=IF I>=J THEN BLOCK([ANS],ANS:0, IF NOT INVERTED THEN [INVERTED:TRUE,H:G^^-1], FOR K:1 THRU 4 DO ANS:ANS+CHR1[I,J,K]*H[K,L], RATSIMP(ANS) ) ELSE CHR2[J,I,K]$ RIEMANN[I,J,K,L]:=IF (I=J) OR (L=K) THEN 0 ELSE IF I=J THEN DIFF(CHR1[I,J,K],X[L]) ELSE RIE1(J,I,K,L)$ RICCI[I,J]:=IF I>=J THEN BLOCK([ANS], ANS:0, IF NOT INVERTED THEN [INVERTED:TRUE,H:G^^-1], FOR K:1 THRU 4 DO FOR L:1 THRU 4 DO ANS:ANS+RIEMANN[I,K,J,L]*H[K,L], RATSIMP(ANS)) ELSE RICCI[J,I]$ RICCISCALEQ:FALSE$ CALSCAL():=(RICCISCALAR:0, IF NOT INVERTED THEN [INVERTED:TRUE,H:G^^-1], RICCISCALEQ:TRUE, FOR I:1 THRU 4 DO FOR J:1 THRU 4 DO RICCISCALAR:RICCISCALAR+RICCI[I,J]*H[I,J], RICCISCALAR:RATSIMP(RICCISCALAR))$ EINSTEIN[I,J]:=IF I>=J THEN BLOCK( IF NOT RICCISCALEQ THEN CALSCAL(), RATSIMP(RICCI[I,J]-(1/2)*RICCISCALAR*G[I,J])) ELSE EINSTEIN[J,I]$ WEYL[I,J,K,L]:=IF (I=J) OR (K=L) THEN 0 ELSE IF I