Skip to content

Commit

Permalink
Added monoidal structure to AdditiveClosure
Browse files Browse the repository at this point in the history
  • Loading branch information
damian-delafuente committed Sep 30, 2024
1 parent 6bbb7db commit f3e7e90
Showing 1 changed file with 262 additions and 0 deletions.
262 changes: 262 additions & 0 deletions FreydCategoriesForCAP/gap/AdditiveClosure.gi
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,12 @@ InstallMethod( ADDITIVE_CLOSURE,
fi;

fi;

if HasIsStrictMonoidalCategory( underlying_category ) and IsStrictMonoidalCategory( underlying_category ) then
SetIsStrictMonoidalCategory( category, true );
elif HasIsMonoidalCategory( underlying_category ) and IsMonoidalCategory( underlying_category ) then
SetIsMonoidalCategory( category, true );

Check warning on line 142 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L142

Added line #L142 was not covered by tests
fi;

INSTALL_FUNCTIONS_FOR_ADDITIVE_CLOSURE( category );

Expand Down Expand Up @@ -1356,6 +1362,262 @@ InstallGlobalFunction( INSTALL_FUNCTIONS_FOR_ADDITIVE_CLOSURE,

fi;

if HasIsMonoidalCategory( underlying_category ) and IsMonoidalCategory( underlying_category ) then

AddTensorUnit( category,
function( cat )
local underlying_category;

underlying_category := UnderlyingCategory( cat );

Check warning on line 1371 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1371

Added line #L1371 was not covered by tests

return ObjectConstructor( cat, [ TensorUnit ( underlying_category ) ] );

Check warning on line 1373 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1373

Added line #L1373 was not covered by tests

end );

AddTensorProductOnObjects( category,
function( cat, obj_1, obj_2 )
local underlying_category, objdat_1, objdat_2, len_1, len_2;

underlying_category := UnderlyingCategory( cat );
objdat_1 := ObjectDatum( cat, obj_1 );
objdat_2 := ObjectDatum( cat, obj_2 );
len_1 := Length( objdat_1 );
len_2 := Length( objdat_2 );

Check warning on line 1385 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1381-L1385

Added lines #L1381 - L1385 were not covered by tests

return ObjectConstructor( cat,
List( [ 0 .. len_1 * len_2 - 1 ], i ->
TensorProductOnObjects( underlying_category,
objdat_1[ QuoInt( i, len_2 ) + 1 ],
objdat_2[ RemInt( i, len_2 ) + 1 ] ) ) );

Check warning on line 1391 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1387-L1391

Added lines #L1387 - L1391 were not covered by tests

end );

AddTensorProductOnMorphismsWithGivenTensorProducts( category,
function( cat, source, morph_1, morph_2, target )
local underlying_category, source_list, target_list, source_1, source_2, target_1, target_2,
len_s1, len_s2, len_t1, len_t2, mat_1, mat_2, EntriesOfTensorProductMatrix;

underlying_category := UnderlyingCategory( cat );
source_list := ObjectDatum( cat, source );
target_list := ObjectDatum( cat, target );
source_1 := Source( morph_1 );
source_2 := Source( morph_2 );
target_1 := Target( morph_1 );
target_2 := Target( morph_2 );
len_s1 := Length( ObjectDatum( cat, source_1 ) );
len_s2 := Length( ObjectDatum( cat, source_2 ) );
len_t1 := Length( ObjectDatum( cat, target_1 ) );
len_t2 := Length( ObjectDatum( cat, target_2 ) );
mat_1 := MorphismDatum( cat, morph_1 );
mat_2 := MorphismDatum( cat, morph_2 );

Check warning on line 1412 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1400-L1412

Added lines #L1400 - L1412 were not covered by tests
EntriesOfTensorProductMatrix := function( i, j )
local underlyingmorph_1, underlyingmorph_2;

underlyingmorph_1 := mat_1[ QuoInt( i, len_s2 ) + 1 ][ QuoInt( j, len_t2 ) + 1 ];
underlyingmorph_2 := mat_2[ RemInt( i, len_s2 ) + 1 ][ RemInt( j, len_t2 ) + 1 ];

Check warning on line 1417 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1416-L1417

Added lines #L1416 - L1417 were not covered by tests

return TensorProductOnMorphismsWithGivenTensorProducts( underlying_category,
source_list[1 + len_s2 * QuoInt( i, len_s2 ) + RemInt( i, len_s2 )],

Check warning on line 1420 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1419-L1420

Added lines #L1419 - L1420 were not covered by tests
underlyingmorph_1,
underlyingmorph_2,
target_list[1 + len_t2 * QuoInt( j, len_t2 ) + RemInt( j, len_t2 )] );
end;

Check warning on line 1424 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1423-L1424

Added lines #L1423 - L1424 were not covered by tests

return MorphismConstructor( cat,

Check warning on line 1426 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1426

Added line #L1426 was not covered by tests
source,
List( [ 0 .. len_s1 * len_s2 - 1 ], i ->
List( [ 0 .. len_t1 * len_t2 - 1 ], j ->
EntriesOfTensorProductMatrix( i, j ) ) ),
target );

Check warning on line 1431 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1428-L1431

Added lines #L1428 - L1431 were not covered by tests
end );

if not ( HasIsStrictMonoidalCategory( underlying_category ) and IsStrictMonoidalCategory( underlying_category ) ) then


AddLeftUnitorWithGivenTensorProduct( category,

Check warning on line 1437 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1437

Added line #L1437 was not covered by tests
function( cat, obj, unit_tensor_obj )
local underlying_category, unit_tensor_obj_list, obj_list, rank, source_diagram, target_diagram;

underlying_category := UnderlyingCategory( cat );
unit_tensor_obj_list := ObjectDatum( cat, unit_tensor_obj );
obj_list := ObjectDatum( cat, obj );
rank := Length( obj_list );
source_diagram := List( [ 1 .. rank ], o -> ObjectConstructor( cat, [ unit_tensor_obj_list[ o ] ] ) );
target_diagram := List( [ 1 .. rank ], o -> ObjectConstructor( cat, [ obj_list[ o ] ] ) );

Check warning on line 1446 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1441-L1446

Added lines #L1441 - L1446 were not covered by tests

return DirectSumFunctorialWithGivenDirectSums( cat,

Check warning on line 1448 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1448

Added line #L1448 was not covered by tests
unit_tensor_obj,
source_diagram,
List( [ 1 .. rank ], o ->
MorphismConstructor( cat,
source_diagram[ o ],
[ [ LeftUnitorWithGivenTensorProduct( underlying_category,
obj_list[ o ],
unit_tensor_obj_list[ o ] ) ] ],
target_diagram[ o ] ) ),

Check warning on line 1457 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1451-L1457

Added lines #L1451 - L1457 were not covered by tests
target_diagram,
obj );

Check warning on line 1459 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1459

Added line #L1459 was not covered by tests

end );

Check warning on line 1461 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1461

Added line #L1461 was not covered by tests

AddLeftUnitorInverseWithGivenTensorProduct( category,

Check warning on line 1463 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1463

Added line #L1463 was not covered by tests
function( cat, obj, unit_tensor_obj )
local underlying_category, unit_tensor_obj_list, obj_list, rank, source_diagram, target_diagram;

underlying_category := UnderlyingCategory( cat );
unit_tensor_obj_list := ObjectDatum( cat, unit_tensor_obj );
obj_list := ObjectDatum( cat, obj );
rank := Length( obj_list );
source_diagram := List( [ 1 .. rank ], o -> ObjectConstructor( cat, [ obj_list[ o ] ] ) );
target_diagram := List( [ 1 .. rank ], o -> ObjectConstructor( cat, [ unit_tensor_obj_list[ o ] ] ) );

Check warning on line 1472 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1467-L1472

Added lines #L1467 - L1472 were not covered by tests

return DirectSumFunctorialWithGivenDirectSums( cat,

Check warning on line 1474 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1474

Added line #L1474 was not covered by tests
obj,
source_diagram,
List( [ 1 .. rank ], o ->
MorphismConstructor( cat,
source_diagram[ o ],
[ [ LeftUnitorInverseWithGivenTensorProduct( underlying_category,
obj_list[ o ],
unit_tensor_obj_list[ o ] ) ] ],
target_diagram[ o ] ) ),

Check warning on line 1483 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1477-L1483

Added lines #L1477 - L1483 were not covered by tests
target_diagram,
unit_tensor_obj );

Check warning on line 1485 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1485

Added line #L1485 was not covered by tests

end );

Check warning on line 1487 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1487

Added line #L1487 was not covered by tests

AddRightUnitorWithGivenTensorProduct( category,

Check warning on line 1489 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1489

Added line #L1489 was not covered by tests
function( cat, obj, obj_tensor_unit )
local underlying_category, obj_tensor_unit_list, obj_list, rank, source_diagram, target_diagram;

underlying_category := UnderlyingCategory( cat );
obj_tensor_unit_list := ObjectDatum( cat, obj_tensor_unit );
obj_list := ObjectDatum( cat, obj );
rank := Length( obj_list );
source_diagram := List( [ 1 .. rank ], o -> ObjectConstructor( cat, [ obj_tensor_unit_list[ o ] ] ) );
target_diagram := List( [ 1 .. rank ], o -> ObjectConstructor( cat, [ obj_list[ o ] ] ) );

Check warning on line 1498 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1493-L1498

Added lines #L1493 - L1498 were not covered by tests

return DirectSumFunctorialWithGivenDirectSums( cat,

Check warning on line 1500 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1500

Added line #L1500 was not covered by tests
obj_tensor_unit,
source_diagram,
List( [ 1 .. rank ], o ->
MorphismConstructor( cat,
source_diagram[ o ],
[ [ RightUnitorWithGivenTensorProduct( underlying_category,
obj_tensor_unit_list[ o ],
obj_list[ o ] ) ] ],
target_diagram[ o ] ) ),

Check warning on line 1509 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1503-L1509

Added lines #L1503 - L1509 were not covered by tests
target_diagram,
obj );

Check warning on line 1511 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1511

Added line #L1511 was not covered by tests

end );

Check warning on line 1513 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1513

Added line #L1513 was not covered by tests

AddRightUnitorInverseWithGivenTensorProduct( category,

Check warning on line 1515 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1515

Added line #L1515 was not covered by tests
function( cat, obj, obj_tensor_unit )
local underlying_category, obj_tensor_unit_list, obj_list, rank, source_diagram, target_diagram;

underlying_category := UnderlyingCategory( cat );
obj_tensor_unit_list := ObjectDatum( cat, obj_tensor_unit );
obj_list := ObjectDatum( cat, obj );
rank := Length( obj_list );
source_diagram := List( [ 1 .. rank ], o -> ObjectConstructor( cat, [ obj_list[ o ] ] ) );
target_diagram := List( [ 1 .. rank ], o -> ObjectConstructor( cat, [ obj_tensor_unit_list[ o ] ] ) );

Check warning on line 1524 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1519-L1524

Added lines #L1519 - L1524 were not covered by tests

return DirectSumFunctorialWithGivenDirectSums( cat,

Check warning on line 1526 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1526

Added line #L1526 was not covered by tests
obj,
source_diagram,
List( [ 1 .. rank ], o ->
MorphismConstructor( cat,
source_diagram[ o ],
[ [ RightUnitorInverseWithGivenTensorProduct( underlying_category,
obj_list[ o ],
obj_tensor_unit_list[ o ] ) ] ],
target_diagram[ o ] ) ),

Check warning on line 1535 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1529-L1535

Added lines #L1529 - L1535 were not covered by tests
target_diagram,
obj_tensor_unit );

Check warning on line 1537 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1537

Added line #L1537 was not covered by tests

end );

Check warning on line 1539 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1539

Added line #L1539 was not covered by tests

AddAssociatorLeftToRightWithGivenTensorProducts( category,

Check warning on line 1541 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1541

Added line #L1541 was not covered by tests
function( cat, source, obj_1, obj_2, obj_3, target )
local underlying_category, source_list, target_list, obj_list_1, obj_list_2, obj_list_3, len_1,
len_2, len_3, rank, source_diagram, target_diagram;

underlying_category := UnderlyingCategory( cat );
source_list := ObjectDatum( cat, source );
target_list := ObjectDatum( cat, target );
obj_list_1 := ObjectDatum( cat, obj_1 );
obj_list_2 := ObjectDatum( cat, obj_2 );
obj_list_3 := ObjectDatum( cat, obj_3 );
len_1 := Length( obj_list_1 );
len_2 := Length( obj_list_2 );
len_3 := Length( obj_list_3 );
rank := len_1 * len_2 * len_3;
source_diagram := List( [ 1 .. rank ], o ->
ObjectConstructor( cat, [ source_list[ o ] ] ) );
target_diagram := List( [ 1 .. rank ], o ->
ObjectConstructor( cat, [ target_list[ o ] ] ) );

Check warning on line 1559 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1546-L1559

Added lines #L1546 - L1559 were not covered by tests

return DirectSumFunctorialWithGivenDirectSums( cat,

Check warning on line 1561 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1561

Added line #L1561 was not covered by tests
source,
source_diagram,
List( [ 0 .. rank - 1 ], o ->
MorphismConstructor( cat,
source_diagram[1 + o],
[ [ AssociatorLeftToRightWithGivenTensorProducts( underlying_category,
source_list[1 + o],
obj_list_1[1 + QuoInt( o, len_2 * len_3 )],
obj_list_2[1 + RemInt( QuoInt( o, len_3 ), len_2 )],
obj_list_3[1 + RemInt( o, len_3 )],
target_list[1 + o] ) ] ],
target_diagram[1 + o] ) ),

Check warning on line 1573 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1564-L1573

Added lines #L1564 - L1573 were not covered by tests
target_diagram,
target );

Check warning on line 1575 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1575

Added line #L1575 was not covered by tests

end );

Check warning on line 1577 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1577

Added line #L1577 was not covered by tests

AddAssociatorRightToLeftWithGivenTensorProducts( category,

Check warning on line 1579 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1579

Added line #L1579 was not covered by tests
function( cat, source, obj_1, obj_2, obj_3, target )
local underlying_category, source_list, target_list, obj_list_1, obj_list_2, obj_list_3, len_1,
len_2, len_3, rank, source_diagram, target_diagram;

underlying_category := UnderlyingCategory( cat );
source_list := ObjectDatum( cat, source );
target_list := ObjectDatum( cat, target );
obj_list_1 := ObjectDatum( cat, obj_1 );
obj_list_2 := ObjectDatum( cat, obj_2 );
obj_list_3 := ObjectDatum( cat, obj_3 );
len_1 := Length( obj_list_1 );
len_2 := Length( obj_list_2 );
len_3 := Length( obj_list_3 );
rank := len_1 * len_2 * len_3;
source_diagram := List( [ 1 .. rank ], o ->
ObjectConstructor( cat, [ source_list[ o ] ] ) );
target_diagram := List( [ 1 .. rank ], o ->
ObjectConstructor( cat, [ target_list[ o ] ] ) );

Check warning on line 1597 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1584-L1597

Added lines #L1584 - L1597 were not covered by tests

return DirectSumFunctorialWithGivenDirectSums( cat,

Check warning on line 1599 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1599

Added line #L1599 was not covered by tests
source,
source_diagram,
List( [ 0 .. rank - 1 ], o ->
MorphismConstructor( cat,
source_diagram[1 + o],
[ [ AssociatorRightToLeftWithGivenTensorProducts( underlying_category,
source_list[1 + o],
obj_list_1[1 + QuoInt( o, len_2 * len_3 )],
obj_list_2[1 + RemInt( QuoInt( o, len_3 ), len_2 )],
obj_list_3[1 + RemInt( o, len_3 )],
target_list[1 + o] ) ] ],
target_diagram[1 + o] ) ),

Check warning on line 1611 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1602-L1611

Added lines #L1602 - L1611 were not covered by tests
target_diagram,
target );

Check warning on line 1613 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1613

Added line #L1613 was not covered by tests

end );

Check warning on line 1615 in FreydCategoriesForCAP/gap/AdditiveClosure.gi

View check run for this annotation

Codecov / codecov/patch

FreydCategoriesForCAP/gap/AdditiveClosure.gi#L1615

Added line #L1615 was not covered by tests

fi;

fi;

INSTALL_FUNCTIONS_OF_RANDOM_METHODS_FOR_ADDITIVE_CLOSURE( category );

end );
Expand Down

0 comments on commit f3e7e90

Please sign in to comment.