Skip to content

a little bit better documentation for nice monomorphisms#6211

Merged
ThomasBreuer merged 2 commits intogap-system:masterfrom
ThomasBreuer:TB_nice_monomorphism_conditions
Jan 29, 2026
Merged

a little bit better documentation for nice monomorphisms#6211
ThomasBreuer merged 2 commits intogap-system:masterfrom
ThomasBreuer:TB_nice_monomorphism_conditions

Conversation

@ThomasBreuer
Copy link
Contributor

Describe technical conditions for setting a given map as nice monomorphism.
In particular, describe why the example from #6209 does not work.

Describe technical conditions for setting a given map as nice monomorphism.
@ThomasBreuer ThomasBreuer added kind: enhancement Label for issues suggesting enhancements; and for pull requests implementing enhancements topic: documentation Issues and PRs related to documentation release notes: not needed PRs introducing changes that are wholly irrelevant to the release notes labels Jan 27, 2026
<P/>
<List>
<Item>
<C>G</C> does not store a nice monomorphism yet.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<C>G</C> does not store a nice monomorphism yet.
<C>G</C> does not store a nice monomorphism already (i.e. <C>HasNiceMonomorphism(G)</C> returns <K>false</K>).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O.k.

overhead of the test, by calling <C>SetIsInjective( map, true )</C>.
Note that the <C>IsInjective</C> call for <C>map</C> may compute and store
some different nice monomorphism in the source of <C>map</C>,
which is probably <C>G</C>.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So calling IsInjective may mean that you cannot call SetNiceMonomorphism after?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can call SetNiceMonomorphism for an object which has already a NiceMonomorphism stored, but this call has no effect, and you get no warning about this. (We do not check whether a second call of an attribute setter tries to set a different value, in the sense of =. First of all, this could be expensive. And there might also be logical problems; sometimes, equality would not be the right comparison because actually one needs object identity.)

An example where IsInjective actually sets a nice monomorphism is discussed in #6209.

</Item>
<Item>
<C>map</C> knows that it is a group homomorphism,
calling <Ref Oper="ImagesSet"/> with <C>map</C> and a subgroup of <C>G</C>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a way to check if this condition holds?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do not know an easy way, so I wanted to be careful with promises.

Initially I had thought that we can write that at least IsSPGeneralMapping is necessary for a nice monomorphism, but one might construct some map by hand, with its individual methods, where this does not hold but still it can be used as a nice monomorphism.

Usually something that makes sense as a nice monomorphism will be in IsGroupHomomorphism and IsInjective, but up to now we did not formally require this.
Technically, the point is that the images and preimages of group objects are again group objects, because this is assumed in the methods that transfer information along the mapping.

@james-d-mitchell
Copy link
Contributor

I think this is a good improvement, I suggested a couple of tweaks, please feel free to take or leave them.

Copy link
Member

@fingolfin fingolfin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clearly an improvement.

@ThomasBreuer ThomasBreuer merged commit 8c801fb into gap-system:master Jan 29, 2026
32 checks passed
@ThomasBreuer ThomasBreuer deleted the TB_nice_monomorphism_conditions branch January 29, 2026 15:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

kind: enhancement Label for issues suggesting enhancements; and for pull requests implementing enhancements release notes: not needed PRs introducing changes that are wholly irrelevant to the release notes topic: documentation Issues and PRs related to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants