IsInjective( map )
IsInjective  returns  true  if  the  mapping  map is  injective and
false otherwise.  Signals an error if map is a multi valued mapping.
A mapping map is injective if for each element img of the range there is at most one element elm of the source that map maps to img.
    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> IsInjective( p4 );
    false
    gap> IsInjective( InverseMapping( p4 ) );
    Error, <map> must be a single valued mapping
    gap> p5 := MappingByFunction( g, g, x -> x^5 );
    MappingByFunction( g, g, function ( x )
        return x ^ 5;
    end )
    gap> IsInjective( p5 );
    true
    gap> IsInjective( InverseMapping( p5 ) );
    true    # 'p5' is a bijection 
IsInjective first tests if  the flag map.isInjective  is bound.  If
the   flag   is  bound,  it  returns   this value.   Otherwise   it calls
map.operations.isInjective( map ), remembers  the returned value in
map.isInjective, and returns  it. 
The default  function called this  way is MappingOps.IsInjective, which
compares  the sizes of the source and image of map, and  returns true
if they are equal (see Image).  Look  in  the index under IsInjective
to see for which mappings this function is overlaid.
GAP 3.4.4