This is a report on what I have been doing elsewhere, just for your information, and not requesting any changes to QPA. On finding I needed a pullback function for group homomorphisms in XMod, I did a "gap> ?Pullback" and found only the PullBack function in QPA. Although the QPA manual states "Arguments: f,g - two homomorphisms with a common range", the declaration is:
so it was apparent that PullBack would not suit my purposes.
Because the notion of pullback could have wider application, I have added a Pullback function to Utils (version 0.61 released today) rather than to XMod. This operation currently takes two group homomorphisms with a common range as input. Following the examples of DirectProduct and SemidirectProduct, Pullback returns the pullback group (which is the subgroup of a direct product rather than a direct sum) and this group P has an attribute given by "info := PullbackInfo(P)", a record with fields info!.directProduct and info!.projections. (QPA's PullBack returns the two projections.)
This addition to Utils is somewhat experimental, and any suggestions would be very welcome.
For a more comprehensive implementation, one could envisage a global function Pullback which could call operations PullbackForGroups; PullbackForModules; etc., but the demand is probably not there at the moment, and PullBack/Pullback can coexist quite happily.
This is a report on what I have been doing elsewhere, just for your information, and not requesting any changes to QPA. On finding I needed a pullback function for group homomorphisms in XMod, I did a "gap> ?Pullback" and found only the PullBack function in QPA. Although the QPA manual states "Arguments: f,g - two homomorphisms with a common range", the declaration is:
and the implementation uses:
so it was apparent that PullBack would not suit my purposes. Because the notion of pullback could have wider application, I have added a Pullback function to Utils (version 0.61 released today) rather than to XMod. This operation currently takes two group homomorphisms with a common range as input. Following the examples of DirectProduct and SemidirectProduct, Pullback returns the pullback group (which is the subgroup of a direct product rather than a direct sum) and this group P has an attribute given by "info := PullbackInfo(P)", a record with fields info!.directProduct and info!.projections. (QPA's PullBack returns the two projections.) This addition to Utils is somewhat experimental, and any suggestions would be very welcome. For a more comprehensive implementation, one could envisage a global function Pullback which could call operations PullbackForGroups; PullbackForModules; etc., but the demand is probably not there at the moment, and PullBack/Pullback can coexist quite happily.