[xTerior] Issue with Diff@Hodge in 10D → 4+6 reduction

42 views
Skip to first unread message

Nils Marion

unread,
Apr 3, 2026, 10:56:21 AM (2 days ago) Apr 3
to xAct Tensor Computer Algebra
Dear xAct community,
I am currently working on the dimensionnal reduction of  the bosonic sector of 10d Supergravities compactified on a Calabi-Yau three-fold (6 reals dimensions).
I am studying a warped geometry M10 = M4 x CY3 of the form:
Capture d’écran 2026-04-03 à 16.22.51.png
such that
Capture d’écran 2026-04-03 à 16.49.09.png

For the most part, the code behaves as expected. However, after expanding the 10D fields into wedge products of 4D and 6D forms, expressions of the form

Diff @ Hodge[g10][...]

appear, and in this situation my replacement rule for the Hodge star is no longer applied consistently.

As a result, I am unable to enforce the factorized Hodge star on all terms. In addition, I encounter the following error message :

DimOfManifold::unknown: Unknown manifold AnyDependencies.
I want to stress out that this error message appears only when I encounter 
Diff @ Hodge[g10][...].

I think it comes from 

HoldPattern[xAct`xTerior`Diff[Pattern[xAct`xTerior`Private`expr, ], xAct`xTensor`PD]] :=
 0 /; 1 +
    Plus @@ (Grade[#1, Wedge] &) /@ {xAct`xTerior`Private`expr} >
   Plus @@ DimOfManifold /@ DependenciesOf[xAct`xTerior`Private`expr]
in the definition of Diff.

I would appreciate any suggestions on how to address this issue.

Sincerely,
Nils

MWE-xTerior-Truncation.nb

Juan Margalef

unread,
Apr 3, 2026, 11:29:31 AM (2 days ago) Apr 3
to xAct Tensor Computer Algebra
Hi Nils,

First notice that you included a lot of commands that are unnecessary:

SlotsOfTensor@epsilongg10 ^= {-TangentM, -TangentM, -TangentM, -TangentM, \-TangentM, -TangentM, -TangentM, -TangentM, -TangentM, -TangentM};
SymmetryGroupOfTensor@epsilongg10[a_, b_, c_, d_, e_, f_, g_, h_, i_, j_] ^=Antisymmetric[{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, Cycles];
SignatureOfMetric@gg4 ^= {3, 1, 0};
SignatureOfMetric@gg10 ^= {9, 1, 0};
SlotsOfTensor@epsilongg4 ^= {-TangentM4, -TangentM4, -TangentM4, -TangentM4};
SymmetryGroupOfTensor@epsilongg4 ^=Antisymmetric[{1, 2, 3, 4}, Cycles];
SymmetryGroupOfTensor@epsilongg4[\[Mu]_, \[Nu]_, \[Rho]_, \[Sigma]_] ^=Antisymmetric[{1, 2, 3, 4}, Cycles];
SignatureOfMetric@gg6 ^= {6, 0, 0};
SlotsOfTensor@epsilongg6 ^= {-TangentCY3, -TangentCY3, -TangentCY3, -TangentCY3, \-TangentCY3, -TangentCY3};
SymmetryGroupOfTensor@epsilongg6[A_, B_, F_, G_, H_, L_] ^=Antisymmetric[{1, 2, 3, 4, 5, 6}, Cycles];

These are automatically assigned once you run SignatureOfMetric@gg10 ^= {9, 1, 0} (you can check it!).

In any case, your problem comes from HodgeRuleM10. In the last line, you used the letter "ρ" instead of the name rho. Moreover, your forgot the brackets. It should be:

signPerm*(-1)^((4 - p) q)*Exp[(2 - p) \[Alpha] rho[] + (3 - q) \[Beta] rho[]]*Wedge[Hodge[gg4][w4], Hodge[gg6][w6]]];

The function UseDimensionStart[] was trying to figure out if your expression had degree higher than the dimension. It found the symbol ρ and tried to figure out to which manifold it belonged, hence it used DependenciesOf[ρ]. As it is not defined, it found nothing (AnyDependencies). With the changed I mentioned, it uses DependenciesOf[rho[]], which returns M4.

Side note: you wrote If[m4 === {} || cy3 === {}, Return[Hodge[gg10][expr]]]; but it should be If[m4 === {} || cy3 === {}, Hodge[gg10][expr]];

Best,
Juan

Nils Marion

unread,
Apr 3, 2026, 12:31:26 PM (2 days ago) Apr 3
to xAct Tensor Computer Algebra

Dear Juan,

It works! Thank you very much for your help. I had no idea setting the signature of the product metric was enough. The more I learn, the more I'm impressed with xAct.

I have one last question. Suppose I end up with expressions of the form
(expr on M4) ^ omega + (expr' on M4) ^ omega ^ omega + ...

How can I extract or collect the coefficients that live purely on M4?

Using IndexCoefficient[expr, omega[]] does not seem to work in this case.

Thanks again for your help, and I wish you an excellent weekend.

Best regards,
Nils

Juan Margalef

unread,
Apr 3, 2026, 1:25:27 PM (2 days ago) Apr 3
to xAct Tensor Computer Algebra
Glad it worked!

As for your new question, I am afraid that IndexCoefficient is not adapted to work with Wedge (in xCPS there is an adaptation but it's quite tricky). A quick way to obtain something similar (not the most elegant though) is the following:

CY3Q[x_] := DependenciesOf[x] == {CY3}
coeffM4=If[Head[expr//Expand] === Plus, List @@ (expr//Expand), {expr}] /. {x_?CY3Q -> 1}

This converts your expression into a list (otherwise you might end up with addition of terms with different indices) and removes those factors whose DependenciesOf is CY3. If you want to keep track of the other part (hodge omega, omega, omega wedge omega...) you can use

M4Q[x_] := DependenciesOf[x] === {M4} || DependenciesOf[x] === {}
coeffCY3 = If[Head[expr // Expand] === Plus, List @@ (expr // Expand), {expr}] /. {x_?M4Q -> 1}


You have to be careful because this code doesn't take into account the superconmutativity of the Wedge. For instance, applying all this to expr = Diff[phiL[]]~Wedge~Diff[omega[]] and to expr2 = expr // ToCanonical gives the same up to a sign as you can check with

Inner[Wedge, coeffM4, coeffCY3] - expr // Simplification

The first one is zero, the second one is 2*expr. But up to these caveat (and something else I might miss), it returns a list of coefficients living purely on M4.

Best,
Juan

Nils Marion

unread,
Apr 4, 2026, 5:02:54 PM (yesterday) Apr 4
to xAct Tensor Computer Algebra

Dear Juan,

Thank you again for your help.

I have one last question. By trial and error, I noticed that applying UxSort@xSort to an expression involving wedge products seems to reorder the factors so that forms on Manifold1 appear on the left and those on Manifold2 on the right.

Is there a way to sort systematically a given product (in this case the wedge product) under some given criteria with these functions?

I wish you a beautiful weekend.

Cheers,
Nils

Juan Margalef

unread,
12:19 PM (10 hours ago) 12:19 PM
to xAct Tensor Computer Algebra
I don't know those commands well enough, but I think they are used to write the expressions in a canonical form (I guess using the lexicographical order of the names of the manifolds). Thus, I don't think they can be used for what you want without important changes and I cannot think an easy way to achieve this. I would recomend that once you have your results, you massage them by hand until you obtain the desired form and then check that

"your changed expression" - "the original result from  xAct" // ToCanonical

is zero.
Reply all
Reply to author
Forward
0 new messages