@@ -11,6 +11,7 @@ InstallValue( LOOP_INTEGRALS,
1111 DualSymbol := " z" ,
1212 Dimension := 1 ,
1313 DimensionSymbol := " d" ,
14+ DimensionShiftSymbol := " D" ,
1415 PropagatorSymbol := " D" ,
1516 NumeratorSymbol := " N" ,
1617 ExponentSymbol := " a" ,
@@ -851,6 +852,52 @@ InstallMethod( RingOfLoopDiagram,
851852
852853end );
853854
855+ # #
856+ InstallMethod( RingOfLoopDiagramWithDimensionShift,
857+ [ IsLoopDiagram and HasRelationsOfExternalMomenta and HasPropagators and HasNumerators and HasExtraLorentzInvariants ] ,
858+
859+ function ( LD )
860+ local K, D, Z, R, indets, invariants, propagators, numerators, masses, S;
861+
862+ K := ExtraLorentzInvariants( LD );
863+ D := Propagators( LD );
864+ Z := Numerators( LD );
865+
866+ R := RingOfPropagatorsAndNumeratorsAndExtraLorentzInvariants( LD );
867+
868+ indets := Indeterminates( R );
869+ indets := List( indets, String );
870+
871+ invariants := indets{[ 1 .. Length( K ) ]} ;
872+ propagators := indets{[ Length( K ) + 1 .. Length( K ) + Length( D ) ]} ;
873+ numerators := indets{[ Length( K ) + Length( D ) + 1 .. Length( indets ) ]} ;
874+
875+ indets := Concatenation( propagators, numerators );
876+
877+ masses := List( LD!. masses, String );
878+
879+ invariants := Concatenation( masses, invariants );
880+
881+ if LD!. rational then
882+
883+ invariants := JoinStringsWithSeparator( invariants );
884+
885+ S := LOOP_INTEGRALS.ConstructorOfDefaultField( invariants, R );
886+
887+ S := S * indets;
888+
889+ else
890+
891+ S := LOOP_INTEGRALS.ConstructorOfDefaultField( R ) * invariants;
892+
893+ S := S * indets;
894+
895+ fi ;
896+
897+ return S;
898+
899+ end );
900+
854901# #
855902InstallMethod( ReductionMatrixOfPropagatorsAndNumeratorsAndExtraLorentzInvariants,
856903 [ IsLoopDiagram and HasRelationsOfExternalMomenta and HasPropagators and HasNumerators and HasExtraLorentzInvariants ] ,
@@ -1085,12 +1132,63 @@ InstallMethod( DoubleShiftAlgebra,
10851132
10861133end );
10871134
1135+ # #
1136+ InstallMethod( DoubleShiftAlgebraWithDimensionShift,
1137+ [ IsHomalgRing ] ,
1138+
1139+ function ( R )
1140+ local Ds, c, D_s, exponents, B, A, shifts, pairs, Y;
1141+
1142+ if IsBound ( R!. DoubleShiftAlgebraWithDimensionShift ) then
1143+ return R!. DoubleShiftAlgebraWithDimensionShift;
1144+ fi ;
1145+
1146+ Ds := RelativeIndeterminatesOfPolynomialRing( R );
1147+
1148+ c := Length( Ds );
1149+
1150+ Ds := List( Ds, String );
1151+
1152+ Ds := Concatenation( [ LOOP_INTEGRALS!. DimensionShiftSymbol ] , Ds );
1153+
1154+ D_s := List( Ds, D -> Concatenation( D, " _" ) );
1155+
1156+ exponents := List( [ 1 .. c ] , i -> Concatenation( LOOP_INTEGRALS.ExponentSymbol, String( i ) ) );
1157+
1158+ exponents := Concatenation( [ LOOP_INTEGRALS!. DimensionSymbol ] , exponents );
1159+
1160+ B := BaseRing( R );
1161+
1162+ A := B * JoinStringsWithSeparator( exponents );
1163+
1164+ if IsIdenticalObj( ValueOption( " pairs" ), false ) then
1165+ shifts := Concatenation( Ds, D_s );
1166+ pairs := false ;
1167+ else
1168+ shifts := Concatenation( ListN( Ds, D_s, { d, d_} -> [ d, d_ ] ) );
1169+ pairs := true ;
1170+ fi ;
1171+
1172+ Y := DoubleShiftAlgebra( A, shifts : steps := - 1 , pairs := pairs );
1173+
1174+ Y!. Ds := Ds;
1175+ Y!. D_s := D_s;
1176+
1177+ AmbientRing( Y )!. Ds := Ds;
1178+ AmbientRing( Y )!. D_s := D_s;
1179+
1180+ R!. DoubleShiftAlgebraWithDimensionShift := Y;
1181+
1182+ return Y;
1183+
1184+ end );
1185+
10881186# #
10891187InstallMethod( RationalDoubleShiftAlgebra,
10901188 [ IsHomalgRing ] ,
10911189
10921190 function ( R )
1093- local Q, r, Ds, D_s, c, exponents, B, A, shifts, pairs, Y;
1191+ local Q, Ds, D_s, c, exponents, B, A, shifts, pairs, Y;
10941192
10951193 if IsBound ( R!. RationalDoubleShiftAlgebra ) then
10961194 return R!. RationalDoubleShiftAlgebra;
@@ -1134,6 +1232,59 @@ InstallMethod( RationalDoubleShiftAlgebra,
11341232
11351233end );
11361234
1235+ # #
1236+ InstallMethod( RationalDoubleShiftAlgebraWithDimensionShift,
1237+ [ IsHomalgRing ] ,
1238+
1239+ function ( R )
1240+ local Q, Ds, c, D_s, exponents, B, A, shifts, pairs, Y;
1241+
1242+ if IsBound ( R!. RationalDoubleShiftAlgebraWithDimensionShift ) then
1243+ return R!. RationalDoubleShiftAlgebraWithDimensionShift;
1244+ fi ;
1245+
1246+ Q := HomalgFieldOfRationalsInMaple();
1247+
1248+ B := Q * List( Indeterminates( BaseRing( R ) ), String );
1249+
1250+ Ds := RelativeIndeterminatesOfPolynomialRing( R );
1251+
1252+ c := Length( Ds );
1253+
1254+ Ds := List( Ds, String );
1255+
1256+ Ds := Concatenation( [ LOOP_INTEGRALS!. DimensionShiftSymbol ] , Ds );
1257+
1258+ D_s := List( Ds, D -> Concatenation( D, " _" ) );
1259+
1260+ exponents := List( [ 1 .. c ] , i -> Concatenation( LOOP_INTEGRALS.ExponentSymbol, String( i ) ) );
1261+
1262+ exponents := Concatenation( [ LOOP_INTEGRALS!. DimensionSymbol ] , exponents );
1263+
1264+ A := B * JoinStringsWithSeparator( exponents );
1265+
1266+ if IsIdenticalObj( ValueOption( " pairs" ), false ) then
1267+ shifts := Concatenation( Ds, D_s );
1268+ pairs := false ;
1269+ else
1270+ shifts := Concatenation( ListN( Ds, D_s, { d, d_} -> [ d, d_ ] ) );
1271+ pairs := true ;
1272+ fi ;
1273+
1274+ Y := RationalDoubleShiftAlgebra( A, shifts : steps := - 1 , pairs := pairs );
1275+
1276+ Y!. Ds := Ds;
1277+ Y!. D_s := D_s;
1278+
1279+ AmbientRing( Y )!. Ds := Ds;
1280+ AmbientRing( Y )!. D_s := D_s;
1281+
1282+ R!. RationalDoubleShiftAlgebraWithDimensionShift := Y;
1283+
1284+ return Y;
1285+
1286+ end );
1287+
11371288# #
11381289InstallMethod( AssociatedWeylAlgebra,
11391290 [ IsLoopDiagram and HasRelationsOfExternalMomenta and HasPropagators and HasNumerators and HasExtraLorentzInvariants ] ,
@@ -1278,6 +1429,50 @@ InstallMethod( MatrixOfIBPRelations,
12781429
12791430end );
12801431
1432+ # #
1433+ InstallMethod( MatrixOfIBPRelationsWithDimensionShift,
1434+ [ IsLoopDiagram and HasRelationsOfExternalMomenta and HasPropagators and HasNumerators and HasExtraLorentzInvariants ] ,
1435+
1436+ function ( LD )
1437+ local R, Y, exponents, c, D_s, oper, k, T, U, S, map, ibps, YDpol, relation;
1438+
1439+ R := RingOfLoopDiagram( LD );
1440+
1441+ Y := DoubleShiftAlgebra( R );
1442+
1443+ # # [ "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9" ]
1444+ exponents := RelativeIndeterminatesOfPolynomialRing( BaseRing( Y ) );
1445+ exponents := List( exponents, String );
1446+
1447+ # # n + z
1448+ c := Length( exponents );
1449+
1450+ # # [ "D1_", "D2_", "D3_", "D4_", "D5_", "D6_", "D7_", "N8_", "N9_" ]
1451+ D_s := IndeterminateShiftsOfDoubleShiftAlgebra( Y ){ List( [ 1 .. c ] , i -> 2 * i )} ;
1452+ D_s := List( D_s, String );
1453+
1454+ oper := List( [ 1 .. c ] , i -> Concatenation( exponents[ i] , " *" , D_s[ i] ) );
1455+
1456+ oper := List( [ 1 .. c ] , i -> oper[ i] / Y );
1457+
1458+ k := CoefficientsRing( R );
1459+
1460+ U := SymanzikPolynomials( LD )[ 1 ] ;
1461+
1462+ S := k * List( RelativeIndeterminatesOfPolynomialRing( HomalgRing( U ) ), String );
1463+
1464+ map := RingMap( List( oper, D -> D / Y ), S, Y );
1465+
1466+ YDpol := DoubleShiftAlgebraWithDimensionShift( RingOfLoopDiagramWithDimensionShift( LD ) );
1467+
1468+ relation := ( LOOP_INTEGRALS!. DimensionShiftSymbol / YDpol ) ^ 2 - Pullback( map, U ) / YDpol;
1469+
1470+ ibps := MatrixOfIBPRelations( LD );
1471+
1472+ return UnionOfRows( YDpol * ibps, HomalgMatrix( [ relation ] , 1 , 1 , YDpol ) );
1473+
1474+ end );
1475+
12811476# #
12821477InstallMethod( MatrixOfIBPRelations,
12831478 [ IsLoopDiagram and HasRelationsOfExternalMomenta and HasPropagators and HasNumerators and HasExtraLorentzInvariants, IsList ] ,
0 commit comments