# Question:Is there a strong mistake in the DifferentialGeometry Package?

## Question:Is there a strong mistake in the DifferentialGeometry Package?

Maple 2015

The procedure "ContractIndices" seems to produce wrong results. This is proved by the following source code, comparing the result of this procedure and a simple direct calculation:

with(DifferentialGeometry):with(Tensor):with(Tools):

DGsetup([x,y],P);
m:=nops(DGinfo("FrameBaseVectors"));
g:=evalDG(1/y^2*dx &t dx+1/y^2*dy &t dy);
CS:=Christoffel(g,"SecondKind");
R0:=CurvatureTensor(CS);
RFc:=ContractIndices(R0,g,[[1,1]]); # Maple Version 2015

# Out of the Help Page: ?Tensor[ContractIndices]
# Form the tensor product T &otimes; S and contract
# the 1st index of T against the 1st index of S.
# ContractIndices(T, S, [[1, 1]]);

# Only for comparison: g:=
# _DG([["tensor", P, [["cov_bas", "cov_bas"], []]], [[
# [1, 1], 1/y^2],
# [[2, 2], 1/y^2]]]);

# g in table form with all indices, including the zeros:
g1t:=
table([(1, 1) = 1/y^2, (2, 1) = 0, (1, 2) = 0, (2, 2) = 1/y^2]);

# Only fpr comparison:
# R0:=
# _DG([["tensor", P, [["con_bas", "cov_bas", "cov_bas", "cov_bas"],
# []]],
# [
# [[1, 2, 1, 2], -1/y^2],
# [[1, 2, 2, 1], 1/y^2],
# [[2, 1, 1, 2], 1/y^2],
# [[2, 1, 2, 1], -1/y^2]]
# ]);

# R0 in table form with all indices, including the zeros:
R01t:=
table([
(2, 1, 1, 2) = 1/y^2,
(2, 1, 1, 1) = 0,
(2, 2, 2, 1) = 0,
(2, 1, 2, 1) = -1/y^2,
(1, 1, 1, 2) = 0,
(1, 2, 2, 2) = 0,
(1, 2, 2, 1) = 1/y^2,
(2, 1, 2, 2) = 0,
(2, 2, 1, 2) = 0,
(2, 2, 2, 2) = 0,
(1, 1, 2, 1) = 0,
(1, 2, 1, 2) = -1/y^2,
(2, 2, 1, 1) = 0,
(1, 1, 2, 2) = 0,
(1, 1, 1, 1) = 0,
(1, 2, 1, 1) = 0
]);

# Only fpr comparison:
# RFc :=
# _DG([["tensor", P, [["cov_bas", "cov_bas", "cov_bas", "cov_bas"],
# []]],
# [
# [[1, 1, 2, 2], 1/y^4],
# [[1, 2, 1, 2], -1/y^4],
# [[2, 1, 2, 1], -1/y^4],
# [[2, 2, 1, 1], 1/y^4]]
# ]);

# RFc in table form with all indices, including the zeros:
RFc1t:=
table(
[(2, 1, 1, 2) = 0,
(2, 1, 1, 1) = 0,
(2, 2, 2, 1) = 0,
(2, 1, 2, 1) = -1/y^4,
(1, 1, 1, 2) = 0,
(1, 2, 2, 2) = 0,
(1, 2, 2, 1) = 0,
(2, 1, 2, 2) = 0,
(2, 2, 1, 2) = 0,
(2, 2, 2, 2) = 0,
(1, 1, 2, 1) = 0,
(1, 2, 1, 2) = -1/y^4,
(2, 2, 1, 1) = 1/y^4,
(1, 1, 2, 2) = 1/y^4,
(1, 1, 1, 1) = 0,
(1, 2, 1, 1) = 0
]);

TestContr:=proc()
description "Simple contraction";
local i,j,k,l;
global RR;
for i from 1 to m do
for j from 1 to m do
for k from 1 to m do
for l from 1 to m do
RR[i,j,k,l]:=add(R01t[r,j,k,l]*g1t[i,r],r=1..m)
od;
od;
od;
od;
print(`OK`)
end;

TestContr();

# Result of this:
# RR:=
# table(
# [(2, 1, 1, 2) = 1/y^4,
# (2, 1, 1, 1) = 0,
# (2, 2, 2, 1) = 0,
# (2, 1, 2, 1) = -1/y^4,
# (1, 1, 1, 2) = 0,
# (1, 2, 2, 2) = 0,
# (1, 2, 2, 1) = 1/y^4,
# (2, 1, 2, 2) = 0,
# (2, 2, 1, 2) = 0,
# (2, 2, 2, 2) = 0,
# (1, 1, 2, 1) = 0,
# (1, 2, 1, 2) = -1/y^4,
# (2, 2, 1, 1) = 0,
# (1, 1, 2, 2) = 0,
# (1, 1, 1, 1) = 0,
# (1, 2, 1, 1) = 0
# ]);

Testeq:=proc()
local i,j,k,l;
# global
for i from 1 to m do
for j from 1 to m do
for k from 1 to m do
for l from 1 to m do
if not (RFc1t[i,j,k,l] = RR[i,j,k,l]) then
print([i,j,k,l]) fi;
od;
od;
od;
od;
end;

Testeq();
# Result of this:
#                          [1, 1, 2, 2]
#                          [1, 2, 2, 1]
#                          [2, 1, 1, 2]
#                          [2, 2, 1, 1]

# No equality for these indices!

﻿