Functional maps
A functional map in AbstractAlgebra is a map which can be applied by evaluating a Julia function or closure. It is represented by a map object that contains such a function/closure, usually in a field called image_fn.
All functional maps belong to the map class FunctionalMap.
A generic concrete type Generic.FunctionalMap is provided by the Generic module to implement a generic functional map type. This allows for functional maps that contain no extra data, other than a Julia function/closure.
Custom map types can also be defined which have map class FunctionalMap.
Functional map interface
All functional map types must define their supertypes as in the following example:
mutable struct MyFunctionalMap{D, C} <: Map{D, C, FunctionalMap, MyFunctionalMap}
# some fields
image_fn::Function
endOf course MyFunctionalMap need not be parameterised if the types D and C of the domain and codomain objects are known.
Required functions for functional maps
The following functions must be defined for all functional map types or classes:
AbstractAlgebra.image_fn — Function
image_fn(f::Map)Return the Julia function or closure that evaluates f. Only maps of class FunctionalMap are guaranteed to provide it.
This function only needs to be provided if the Julia function is not stored in an image_fn field of the MyFunctionalMap type.
Generic functional maps
The Generic module provides a concrete type FunctionalMap which merely keeps track of a Julia function/closure implementing the map.
Such maps can be constructed using the following function:
AbstractAlgebra.map_from_func — Method
map_from_func(image_fn::Function, domain, codomain)Construct the generic functional map with domain and codomain given by the parent objects $R$ and $S$ corresponding to the Julia function $f$.
Examples
julia> f = map_from_func(x -> x + 1, ZZ, ZZ)
Map defined by a Julia function
from integers
to integers
julia> f(ZZ(2))
3