IsEpimorphism( map )
IsEpimorphism returns true if the mapping map is an epimorphism and
false otherwise.  Signals an error if map is a multi valued mapping.
A mapping is an epimorphism if it is an surjective homomorphism (see IsSurjective, IsHomomorphism).
    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> IsEpimorphism( p4 );
    false
    gap> p5 := MappingByFunction( g, g, x -> x^5 );
    MappingByFunction( g, g, function ( x )
        return x ^ 5;
    end )
    gap> IsEpimorphism( p5 );
    true 
IsEpimorphism first test if the  flag map.isEpimorphism  is  bound.
If  the  flag  is  bound,  it  returns this  value.  Otherwise  it  calls
map.operations.IsEpimorphism( map ),  remembers the  returned value
in map.isEpimorphism, and returns it.
The default function called this way is MappingOps.IsEpimorphism, which
calls the functions  IsSurjective and IsHomomorphism, and returns the
logical and of the results.  This function is seldom  overlaid, because
all the interesting work is done in IsSurjective and IsHomomorphism.
GAP 3.4.4