@@ -1093,15 +1093,6 @@ InstallGlobalFunction( ADD_LIFT_AND_COLIFT_LEFT,
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 or s = 0 then
1098- return ZeroMorphism( Source( morphism_1 ), Source( morphism_2 ) );
1099- fi ;
1100-
1101- # if NrColumns(M)=0 then M is zero, hence lift exists iff morphism_1 is zero.
1102- if NrColumns( M ) = 0 and IsZeroForMorphisms( morphism_1 ) then
1103- return ZeroMorphism( Source( morphism_1 ), Source( morphism_2 ) );
1104- fi ;
11051096 A := UnderlyingMatrix( morphism_1 );
11061097
11071098 B := UnderlyingMatrix( morphism_2 );
@@ -1124,15 +1115,7 @@ InstallGlobalFunction( ADD_LIFT_AND_COLIFT_LEFT,
11241115
11251116 mat := UnionOfRows( mat1, mat2 );
11261117
1127- if NrColumns( A ) <= 1 then
1128-
1129- vec_A := A;
1130-
1131- else
1132-
1133- vec_A := UnionOfRows( List( [ 1 .. NrColumns( A ) ] , i-> CertainColumns( A, [ i ] ) ) );
1134-
1135- fi ;
1118+ vec_A := ConvertMatrixToColumn( A );
11361119
11371120 vec_zero := HomalgZeroMatrix( NrRows( P ) * NrColumns( M ), NrColumns( vec_A ), homalg_ring );
11381121
@@ -1155,11 +1138,7 @@ InstallGlobalFunction( ADD_LIFT_AND_COLIFT_LEFT,
11551138
11561139 sol := CallFuncList( LeftDivide, lift_via_compiled_linear_system_func( morphism_1, morphism_2 ) );
11571140
1158- if v <= 1 then
1159- XX := CertainRows( sol, [ 1 .. s ] );
1160- else
1161- XX := UnionOfColumns( List( [ 1 .. v ] , i-> CertainRows( sol, [ (i- 1 )* s+ 1 .. i* s ] ) ) );
1162- fi ;
1141+ XX := ConvertColumnToMatrix( CertainRows( sol, [ 1 .. s * v ] ), s, v );
11631142
11641143 return PresentationMorphism( cat, Source( morphism_1 ), XX, Source( morphism_2 ) );
11651144
@@ -1200,16 +1179,6 @@ InstallGlobalFunction( ADD_LIFT_AND_COLIFT_LEFT,
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 or s = 0 then
1205- return ZeroMorphism( Range( morphism_1 ), Range( morphism_2 ) );
1206- fi ;
1207-
1208- # if NrColumns(M)=0 then M is zero, hence colift exists iff morphism_2 is zero.
1209- if NrColumns( M ) = 0 and IsZeroForMorphisms( morphism_2 ) then
1210- return ZeroMorphism( Range( morphism_1 ), Range( morphism_2 ) );
1211- fi ;
1212-
12131182 B := UnderlyingMatrix( morphism_1 );
12141183
12151184 A := UnderlyingMatrix( morphism_2 );
@@ -1226,12 +1195,8 @@ InstallGlobalFunction( ADD_LIFT_AND_COLIFT_LEFT,
12261195
12271196 A_over_zero := UnionOfRows( A, zero_mat );
12281197
1229- if NrColumns( A ) <= 1 then
1230- vec := A_over_zero;
1231- else
1232- vec := UnionOfRows( List( [ 1 .. NrColumns( A ) ] , i-> CertainColumns( A_over_zero, [ i ] ) ) );
1233- fi ;
1234-
1198+ vec := ConvertMatrixToColumn( A_over_zero );
1199+
12351200 return [ mat, vec ] ;
12361201
12371202 end ;
@@ -1249,15 +1214,7 @@ InstallGlobalFunction( ADD_LIFT_AND_COLIFT_LEFT,
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 then
1257- XX := CertainRows( sol, [ 1 .. v ] );
1258- else
1259- XX := UnionOfColumns( List( [ 1 .. s ] , i-> CertainRows( sol, [ (i- 1 )* v+ 1 .. i* v ] ) ) );
1260- fi ;
1217+ XX := ConvertColumnToMatrix( CertainRows( sol, [ 1 .. v * s ] ), v, s );
12611218
12621219 return PresentationMorphism( cat, Range( morphism_1 ), XX, Range( morphism_2 ) );
12631220
@@ -1314,14 +1271,6 @@ InstallGlobalFunction( ADD_LIFT_AND_COLIFT_RIGHT,
13141271
13151272 Nt := TransposedMatrix( UnderlyingMatrix( Range( morphism_1 ) ) );
13161273
1317- if NrRows( Nt ) = 0 or s = 0 then
1318- return ZeroMorphism( Source( morphism_1 ), Source( morphism_2 ) );
1319- fi ;
1320-
1321- if NrRows( Mt ) = 0 and IsZeroForMorphisms( morphism_1 ) then
1322- return ZeroMorphism( Source( morphism_1 ), Source( morphism_2 ) );
1323- fi ;
1324-
13251274 At := TransposedMatrix( UnderlyingMatrix( morphism_1 ) );
13261275
13271276 Bt := TransposedMatrix( UnderlyingMatrix( morphism_2 ) );
@@ -1344,15 +1293,7 @@ InstallGlobalFunction( ADD_LIFT_AND_COLIFT_RIGHT,
13441293
13451294 mat := UnionOfRows( mat1, mat2 );
13461295
1347- if NrColumns( At ) <= 1 then
1348-
1349- vec_A := At;
1350-
1351- else
1352-
1353- vec_A := UnionOfRows( List( [ 1 .. NrColumns( At ) ] , i-> CertainColumns( At, [ i ] ) ) );
1354-
1355- fi ;
1296+ vec_A := ConvertMatrixToColumn( At );
13561297
13571298 vec_zero := HomalgZeroMatrix( NrRows( Pt ) * NrColumns( Mt ), NrColumns( vec_A ), homalg_ring );
13581299
@@ -1363,7 +1304,7 @@ InstallGlobalFunction( ADD_LIFT_AND_COLIFT_RIGHT,
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 @@ InstallGlobalFunction( ADD_LIFT_AND_COLIFT_RIGHT,
13741315
13751316 sol := CallFuncList( LeftDivide, lift_via_compiled_linear_system_func( morphism_1, morphism_2 ) );
13761317
1377- if v <= 1 then
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- fi ;
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 @@ InstallGlobalFunction( ADD_LIFT_AND_COLIFT_RIGHT,
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 or s = 0 then
1407- return ZeroMorphism( Range( morphism_1 ), Range( morphism_2 ) );
1408- fi ;
1341+ Nt := TransposedMatrix( UnderlyingMatrix( Source( morphism_1 ) ) );
14091342
1410- if NrRows( Mt ) = 0 and IsZeroForMorphisms( morphism_2 ) then
1411- return ZeroMorphism( Range( morphism_1 ), Range( morphism_2 ) );
1412- fi ;
1413-
14141343 Bt := TransposedMatrix( UnderlyingMatrix( morphism_1 ) );
14151344
14161345 At := TransposedMatrix( UnderlyingMatrix( morphism_2 ) );
@@ -1427,18 +1356,14 @@ InstallGlobalFunction( ADD_LIFT_AND_COLIFT_RIGHT,
14271356
14281357 A_over_zero := UnionOfRows( At, zero_mat );
14291358
1430- if NrColumns( At ) <= 1 then
1431- vec := A_over_zero;
1432- else
1433- vec := UnionOfRows( List( [ 1 .. NrColumns( At ) ] , i-> CertainColumns( A_over_zero, [ i ] ) ) );
1434- fi ;
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 @@ InstallGlobalFunction( ADD_LIFT_AND_COLIFT_RIGHT,
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 then
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- fi ;
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