Skip to content

Commit 674f359

Browse files
Update to ModulePresentationsForCAP v2025.06-01
1 parent 6e01081 commit 674f359

File tree

2 files changed

+36
-119
lines changed

2 files changed

+36
-119
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ authors = [
55
"Sebastian Posur <[email protected]>",
66
"Fabian Zickgraf <[email protected]>",
77
]
8-
version = "0.1.6"
8+
version = "0.1.7"
99

1010
[deps]
1111
MatricesForHomalg = "29b9b1b6-efa6-450e-8188-a5a2c25df071"

src/gap/ModulePresentationsForCAP.gi.autogen.jl

Lines changed: 35 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,7 +1057,7 @@ end );
10571057

10581058
end );
10591059

1060-
@InstallGlobalFunction( ADD_LIFT_AND_COLIFT_LEFT,
1060+
@InstallGlobalFunction( ADD_LIFT_AND_COLIFT_LEFT,
10611061

10621062
function( category )
10631063
local homalg_ring, lift_via_compiled_linear_system_func, colift_via_compiled_linear_system_func;
@@ -1088,20 +1088,11 @@ end );
10881088
M = UnderlyingMatrix( Source( morphism_2 ) );
10891089

10901090
v = NrColumns( M );
1091-
1091+
10921092
s = NrColumns( P );
10931093

10941094
N = UnderlyingMatrix( Range( morphism_1 ) );
10951095

1096-
# NrColumns( N ) == 0 implies coker(N)=0 and s == 0 implies coker(P)=0, hence morphism_1 is zero, and the zero morphism can always be lifted.
1097-
if (NrColumns( N ) == 0 || s == 0)
1098-
return ZeroMorphism( Source( morphism_1 ), Source( morphism_2 ) );
1099-
end;
1100-
1101-
# if NrColumns(M)=0 then M is zero, hence lift exists iff morphism_1 is zero.
1102-
if (NrColumns( M ) == 0 && IsZeroForMorphisms( morphism_1 ))
1103-
return ZeroMorphism( Source( morphism_1 ), Source( morphism_2 ) );
1104-
end;
11051096
A = UnderlyingMatrix( morphism_1 );
11061097

11071098
B = UnderlyingMatrix( morphism_2 );
@@ -1110,31 +1101,23 @@ end );
11101101

11111102
N_tr_I = KroneckerMat( TransposedMatrix( N ), HomalgIdentityMatrix( NrColumns( P ) ,homalg_ring ) );
11121103

1113-
zero_1 = HomalgZeroMatrix( NrRows( A )*NrColumns( A ), NrRows( P )*NrRows( M ), homalg_ring );
1104+
zero_1 = HomalgZeroMatrix( NrRows( A ) * NrColumns( A ), NrRows( P ) * NrRows( M ), homalg_ring );
11141105

11151106
mat1 = UnionOfColumns( B_tr_I, N_tr_I, zero_1 );
11161107

11171108
I_P = KroneckerMat( HomalgIdentityMatrix( NrColumns( M ) ,homalg_ring ), P );
11181109

1119-
zero_2 = HomalgZeroMatrix( NrRows( P )*NrColumns( M ), NrRows( A )*NrRows( N ), homalg_ring );
1110+
zero_2 = HomalgZeroMatrix( NrRows( P ) * NrColumns( M ), NrRows( A ) * NrRows( N ), homalg_ring );
11201111

1121-
M_tr_I = KroneckerMat( TransposedMatrix( M ), HomalgIdentityMatrix( NrRows( P ) ,homalg_ring ) );
1112+
M_tr_I = KroneckerMat( TransposedMatrix( M ), HomalgIdentityMatrix( NrRows( P ), homalg_ring ) );
11221113

11231114
mat2 = UnionOfColumns( I_P, zero_2, M_tr_I );
11241115

11251116
mat = UnionOfRows( mat1, mat2 );
11261117

1127-
if (NrColumns( A ) <= 1)
1128-
1129-
vec_A = A;
1130-
1131-
else
1132-
1133-
vec_A = UnionOfRows( List( (1):(NrColumns( A )), i-> CertainColumns( A, [ i ] ) ) );
1134-
1135-
end;
1118+
vec_A = ConvertMatrixToColumn( A );
11361119

1137-
vec_zero = HomalgZeroMatrix( NrRows( P )*NrColumns( M ), 1, homalg_ring );
1120+
vec_zero = HomalgZeroMatrix( NrRows( P ) * NrColumns( M ), NrColumns( vec_A ), homalg_ring );
11381121

11391122
vec = UnionOfRows( vec_A, vec_zero );
11401123

@@ -1155,11 +1138,7 @@ end );
11551138

11561139
sol = CallFuncList( LeftDivide, lift_via_compiled_linear_system_func( morphism_1, morphism_2 ) );
11571140

1158-
if (v <= 1)
1159-
XX = CertainRows( sol, [ 1.. s ] );
1160-
else
1161-
XX = UnionOfColumns( List( (1):(v), i-> CertainRows( sol, [ (i-1)*s+1.. i*s ] ) ) );
1162-
end;
1141+
XX = ConvertColumnToMatrix( CertainRows( sol, (1):(s * v) ), s, v );
11631142

11641143
return PresentationMorphism( cat, Source( morphism_1 ), XX, Source( morphism_2 ) );
11651144

@@ -1195,21 +1174,11 @@ end );
11951174
M = UnderlyingMatrix( Range( morphism_1 ) );
11961175

11971176
v = NrColumns( M );
1198-
1177+
11991178
s = NrColumns( I );
12001179

12011180
N = UnderlyingMatrix( Source( morphism_1 ) );
12021181

1203-
# NrColumns( N ) == 0 implies coker(N)=0 and s == 0 implies coker(I)=0, hence morphism_2 is zero, and the zero morphism can always be colifted.
1204-
if (NrColumns( N ) == 0 || s == 0)
1205-
return ZeroMorphism( Range( morphism_1 ), Range( morphism_2 ) );
1206-
end;
1207-
1208-
# if NrColumns(M)=0 then M is zero, hence colift exists iff morphism_2 is zero.
1209-
if (NrColumns( M ) == 0 && IsZeroForMorphisms( morphism_2 ))
1210-
return ZeroMorphism( Range( morphism_1 ), Range( morphism_2 ) );
1211-
end;
1212-
12131182
B = UnderlyingMatrix( morphism_1 );
12141183

12151184
A = UnderlyingMatrix( morphism_2 );
@@ -1226,12 +1195,8 @@ end );
12261195

12271196
A_over_zero = UnionOfRows( A, zero_mat );
12281197

1229-
if (NrColumns( A ) <= 1)
1230-
vec = A_over_zero;
1231-
else
1232-
vec = UnionOfRows( List( (1):(NrColumns( A )), i-> CertainColumns( A_over_zero, [ i ] ) ) );
1233-
end;
1234-
1198+
vec = ConvertMatrixToColumn( A_over_zero );
1199+
12351200
return [ mat, vec ];
12361201

12371202
end;
@@ -1249,15 +1214,7 @@ end );
12491214

12501215
sol = CallFuncList( LeftDivide, colift_via_compiled_linear_system_func( morphism_1, morphism_2 ) );
12511216

1252-
v = NrColumns( M );
1253-
1254-
s = NrColumns( I );
1255-
1256-
if (s <= 1)
1257-
XX = CertainRows( sol, [ 1.. v ] );
1258-
else
1259-
XX = UnionOfColumns( List( (1):(s), i-> CertainRows( sol, [ (i-1)*v+1.. i*v ] ) ) );
1260-
end;
1217+
XX = ConvertColumnToMatrix( CertainRows( sol, (1):(v * s) ), v, s );
12611218

12621219
return PresentationMorphism( cat, Range( morphism_1 ), XX, Range( morphism_2 ) );
12631220

@@ -1272,21 +1229,21 @@ end );
12721229
end );
12731230

12741231
##
1275-
@InstallGlobalFunction( ADD_LIFT_AND_COLIFT_RIGHT,
1232+
@InstallGlobalFunction( ADD_LIFT_AND_COLIFT_RIGHT,
12761233

12771234
function( category )
12781235
local homalg_ring, lift_via_compiled_linear_system_func, colift_via_compiled_linear_system_func;
12791236

12801237
homalg_ring = category.ring_for_representation_category;
12811238

12821239
lift_via_compiled_linear_system_func = function( morphism_1, morphism_2 )
1283-
local Pt, Nt, Mt, At, Bt, B_tr_I, N_tr_I, zero_1,
1240+
local Pt, Nt, Mt, At, Bt, B_tr_I, N_tr_I, zero_1,
12841241
mat1, mat2, I_P, zero_2, M_tr_I, mat, vec_A, vec_zero, vec, v, s;
12851242
# rxs
12861243
# P
12871244
# |
1288-
# uxr | mxr
1289-
# X (A)
1245+
# uxr | mxr
1246+
# X (A)
12901247
# |
12911248
# V
12921249
# uxv mxu mxn
@@ -1296,10 +1253,10 @@ end );
12961253
# We need to solve the system
12971254
# B*X == A mod N
12981255
# X*P + M*Y == 0
1299-
# I.e., looking for X, Y, Z such that
1256+
# I.e., looking for X, Y, Z such that
13001257
# B*X + N*Y == A
13011258
# X*P + M*Z == 0
1302-
# which is equivalent to
1259+
# which is equivalent to
13031260
# XX*B^t + YY*N^t == A^t
13041261
# P^t*XX + ZZ*M^t == 0
13051262
# which can be solved exactly as Lift in left presentations case.
@@ -1314,47 +1271,31 @@ end );
13141271

13151272
Nt = TransposedMatrix( UnderlyingMatrix( Range( morphism_1 ) ) );
13161273

1317-
if (NrRows( Nt ) == 0 || s == 0)
1318-
return ZeroMorphism( Source( morphism_1 ), Source( morphism_2 ) );
1319-
end;
1320-
1321-
if (NrRows( Mt ) == 0 && IsZeroForMorphisms( morphism_1 ))
1322-
return ZeroMorphism( Source( morphism_1 ), Source( morphism_2 ) );
1323-
end;
1324-
13251274
At = TransposedMatrix( UnderlyingMatrix( morphism_1 ) );
13261275

13271276
Bt = TransposedMatrix( UnderlyingMatrix( morphism_2 ) );
13281277

13291278
B_tr_I = KroneckerMat( TransposedMatrix( Bt ), HomalgIdentityMatrix( NrColumns( Pt ), homalg_ring ) );
13301279

1331-
N_tr_I = KroneckerMat( TransposedMatrix( Nt ), HomalgIdentityMatrix( NrColumns( Pt ) ,homalg_ring ) );
1280+
N_tr_I = KroneckerMat( TransposedMatrix( Nt ), HomalgIdentityMatrix( NrColumns( Pt ), homalg_ring ) );
13321281

1333-
zero_1 = HomalgZeroMatrix( NrRows( At )*NrColumns( At ), NrRows( Pt )*NrRows( Mt ), homalg_ring );
1282+
zero_1 = HomalgZeroMatrix( NrRows( At ) * NrColumns( At ), NrRows( Pt ) * NrRows( Mt ), homalg_ring );
13341283

13351284
mat1 = UnionOfColumns( B_tr_I, N_tr_I, zero_1 );
13361285

1337-
I_P = KroneckerMat( HomalgIdentityMatrix( NrColumns( Mt ) ,homalg_ring ), Pt );
1286+
I_P = KroneckerMat( HomalgIdentityMatrix( NrColumns( Mt ), homalg_ring ), Pt );
13381287

1339-
zero_2 = HomalgZeroMatrix( NrRows( Pt )*NrColumns( Mt ), NrRows( At )*NrRows( Nt ), homalg_ring );
1288+
zero_2 = HomalgZeroMatrix( NrRows( Pt ) * NrColumns( Mt ), NrRows( At ) * NrRows( Nt ), homalg_ring );
13401289

1341-
M_tr_I = KroneckerMat( TransposedMatrix( Mt ), HomalgIdentityMatrix( NrRows( Pt ) ,homalg_ring ) );
1290+
M_tr_I = KroneckerMat( TransposedMatrix( Mt ), HomalgIdentityMatrix( NrRows( Pt ), homalg_ring ) );
13421291

13431292
mat2 = UnionOfColumns( I_P, zero_2, M_tr_I );
13441293

13451294
mat = UnionOfRows( mat1, mat2 );
13461295

1347-
if (NrColumns( At ) <= 1)
1348-
1349-
vec_A = At;
1350-
1351-
else
1352-
1353-
vec_A = UnionOfRows( List( (1):(NrColumns( At )), i-> CertainColumns( At, [ i ] ) ) );
1354-
1355-
end;
1296+
vec_A = ConvertMatrixToColumn( At );
13561297

1357-
vec_zero = HomalgZeroMatrix( NrRows( Pt )*NrColumns( Mt ), 1, homalg_ring );
1298+
vec_zero = HomalgZeroMatrix( NrRows( Pt ) * NrColumns( Mt ), NrColumns( vec_A ), homalg_ring );
13581299

13591300
vec = UnionOfRows( vec_A, vec_zero );
13601301

@@ -1363,7 +1304,7 @@ end );
13631304
end;
13641305

13651306
AddLift( category, function( cat, morphism_1, morphism_2 )
1366-
local Pt, Mt, v, s, sol, XX;
1307+
local Pt, Mt, v, s, sol, XX_tr;
13671308

13681309
Pt = TransposedMatrix( UnderlyingMatrix( Source( morphism_1 ) ) );
13691310
Mt = TransposedMatrix( UnderlyingMatrix( Source( morphism_2 ) ) );
@@ -1374,13 +1315,9 @@ end );
13741315

13751316
sol = CallFuncList( LeftDivide, lift_via_compiled_linear_system_func( morphism_1, morphism_2 ) );
13761317

1377-
if (v <= 1)
1378-
XX = TransposedMatrix( CertainRows( sol, [ 1.. s ] ) );
1379-
else
1380-
XX = TransposedMatrix( UnionOfColumns( List( (1):(v), i-> CertainRows( sol, [ (i-1)*s+1.. i*s ] ) ) ) );
1381-
end;
1318+
XX_tr = ConvertColumnToMatrix( CertainRows( sol, (1):(s * v) ), s, v );
13821319

1383-
return PresentationMorphism( cat, Source( morphism_1 ), XX, Source( morphism_2 ) );
1320+
return PresentationMorphism( cat, Source( morphism_1 ), TransposedMatrix( XX_tr ), Source( morphism_2 ) );
13841321

13851322
end );
13861323

@@ -1398,19 +1335,11 @@ end );
13981335
Mt = TransposedMatrix( UnderlyingMatrix( Range( morphism_1 ) ) );
13991336

14001337
v = NrColumns( Mt );
1401-
1338+
14021339
s = NrColumns( It );
1403-
1404-
Nt = TransposedMatrix( UnderlyingMatrix( Source( morphism_1 ) ) );
14051340

1406-
if (NrRows( Nt ) == 0 || s == 0)
1407-
return ZeroMorphism( Range( morphism_1 ), Range( morphism_2 ) );
1408-
end;
1341+
Nt = TransposedMatrix( UnderlyingMatrix( Source( morphism_1 ) ) );
14091342

1410-
if (NrRows( Mt ) == 0 && IsZeroForMorphisms( morphism_2 ))
1411-
return ZeroMorphism( Range( morphism_1 ), Range( morphism_2 ) );
1412-
end;
1413-
14141343
Bt = TransposedMatrix( UnderlyingMatrix( morphism_1 ) );
14151344

14161345
At = TransposedMatrix( UnderlyingMatrix( morphism_2 ) );
@@ -1427,18 +1356,14 @@ end );
14271356

14281357
A_over_zero = UnionOfRows( At, zero_mat );
14291358

1430-
if (NrColumns( At ) <= 1)
1431-
vec = A_over_zero;
1432-
else
1433-
vec = UnionOfRows( List( (1):(NrColumns( At )), i-> CertainColumns( A_over_zero, [ i ] ) ) );
1434-
end;
1435-
1359+
vec = ConvertMatrixToColumn( A_over_zero );
1360+
14361361
return [ mat, vec ];
14371362

14381363
end;
14391364

14401365
AddColift( category, function( cat, morphism_1, morphism_2 )
1441-
local It, Mt, v, s, sol, XX;
1366+
local It, Mt, v, s, sol, XX_tr;
14421367

14431368
It = TransposedMatrix( UnderlyingMatrix( Range( morphism_2 ) ) );
14441369

@@ -1450,17 +1375,9 @@ end );
14501375

14511376
sol = CallFuncList( LeftDivide, colift_via_compiled_linear_system_func( morphism_1, morphism_2 ) );
14521377

1453-
v = NrColumns( Mt );
1454-
1455-
s = NrColumns( It );
1456-
1457-
if (s <= 1)
1458-
XX = TransposedMatrix( CertainRows( sol, [ 1.. v ] ) );
1459-
else
1460-
XX = TransposedMatrix( UnionOfColumns( List( (1):(s), i-> CertainRows( sol, [ (i-1)*v+1.. i*v ] ) ) ) );
1461-
end;
1378+
XX_tr = ConvertColumnToMatrix( CertainRows( sol, (1):(v * s) ), v, s );
14621379

1463-
return PresentationMorphism( cat, Range( morphism_1 ), XX, Range( morphism_2 ) );
1380+
return PresentationMorphism( cat, Range( morphism_1 ), TransposedMatrix( XX_tr ), Range( morphism_2 ) );
14641381

14651382
end, 1000 );
14661383

0 commit comments

Comments
 (0)