IsHomomorphism( map )
IsHomomorphism  returns true  if the mapping map is  a homomorphism
and false otherwise.  Signals  an  error  if map  is  a  multi valued
mapping.
A mapping map is a homomorphism if the source and the range are sources of the same category, and map respects the structure. For example, if both source and range are groups and for each x,y in the source (xy)^{map} = x^{map} y^{map}, then map is a homomorphism.
    gap> g := Group( (1,2,3,4), (2,4), (5,6,7) );;  g.name := "g";;
    gap> p4 := MappingByFunction( g, g, x -> x^4 );
    MappingByFunction( g, g, function ( x )
        return x ^ 4;
    end )
    gap> IsHomomorphism( p4 );
    true
    gap> p5 := MappingByFunction( g, g, x -> x^5 );
    MappingByFunction( g, g, function ( x )
        return x ^ 5;
    end )
    gap> IsHomomorphism( p5 );
    true
    gap> p6 := MappingByFunction( g, g, x -> x^6 );
    MappingByFunction( g, g, function ( x )
        return x ^ 6;
    end )
    gap> IsHomomorphism( p6 );
    false 
IsHomomorphism first tests if the flag map.isHomomorphism is bound.
If  the flag  is  bound,  it  returns  its  value.   Otherwise  it  calls
map.source.operations.IsHomomorphism( map ), remembers the returned
value in map.isHomomorphism, and returns it.
The functions  usually called this  way  are IsGroupHomomorphism if the
source  of map is a group  and  IsFieldHomomorphism  if the source of
map is a field (see IsGroupHomomorphism, IsFieldHomomorphism).
GAP 3.4.4