# FunctionGraph S¶

- S: SetCategory

allows us to model graph theory

- *: (%, %) -> FunctionGraph Product(S, S)
- tensor product : the tensor product
`G*H`

of graphs`G`

and`H`

is a graph such that the vertex set of`G*H`

is the Cartesian product`V`

(`G`

) times`V`

(`H`

); and any two vertices (`u`

, u’) and (`v`

,`v'`

) are adjacent in`G`

times`H`

if and only if u’ is adjacent with`v'`

and`u`

is adjacent with`v`

. Cartesian product does apply to function graph produces two arrows out of every node - +: (%, %) -> %
- from FiniteGraph S
- =: (%, %) -> Boolean
- from BasicType
- ~=: (%, %) -> Boolean
- from BasicType
- addArrow!: (%, Record(name: String, arrType: NonNegativeInteger, fromOb: NonNegativeInteger, toOb: NonNegativeInteger, xOffset: Integer, yOffset: Integer, map: List NonNegativeInteger)) -> %
- from FiniteGraph S
- addArrow!: (%, String, NonNegativeInteger, NonNegativeInteger) -> %
- from FiniteGraph S
- addArrow!: (%, String, NonNegativeInteger, NonNegativeInteger, List NonNegativeInteger) -> %
- from FiniteGraph S
- addArrow!: (%, String, S, S) -> %
- from FiniteGraph S
- addObject!: (%, Record(value: S, posX: NonNegativeInteger, posY: NonNegativeInteger)) -> %
- from FiniteGraph S
- addObject!: (%, S) -> %
- from FiniteGraph S
- adjacencyMatrix: % -> Matrix NonNegativeInteger
- from FiniteGraph S

- apply: (%, NonNegativeInteger) -> NonNegativeInteger
`apply '`

function’ represented by this graph to vertex index ‘a’- arrowName: (%, NonNegativeInteger, NonNegativeInteger) -> String
- from FiniteGraph S
- arrowsFromArrow: (%, NonNegativeInteger) -> List NonNegativeInteger
- from FiniteGraph S
- arrowsFromNode: (%, NonNegativeInteger) -> List NonNegativeInteger
- from FiniteGraph S
- arrowsToArrow: (%, NonNegativeInteger) -> List NonNegativeInteger
- from FiniteGraph S
- arrowsToNode: (%, NonNegativeInteger) -> List NonNegativeInteger
- from FiniteGraph S

- closedTensor: (%, %, (S, S) -> S) -> %
- as tensor product but returns %. Cartesian product does apply to function graph produces two arrows out of every node

- coAdjoint: (%, List NonNegativeInteger) -> Union(List NonNegativeInteger, failed)
- given a mapping from this graph this function tries to calculate a unique reverse mapping back to this graph
- coerce: % -> OutputForm
- from CoercibleTo OutputForm

- contraAdjoint: (%, List NonNegativeInteger) -> Union(List NonNegativeInteger, failed)
- given a mapping from this graph this function tries to calculate a unique reverse mapping back to this graph
- createWidth: NonNegativeInteger -> NonNegativeInteger
- from FiniteGraph S
- createX: (NonNegativeInteger, NonNegativeInteger) -> NonNegativeInteger
- from FiniteGraph S
- createY: (NonNegativeInteger, NonNegativeInteger) -> NonNegativeInteger
- from FiniteGraph S
- cycleClosed: (List S, String) -> %
- from FiniteGraph S
- cycleOpen: (List S, String) -> %
- from FiniteGraph S
- deepDiagramSvg: (String, %, Boolean) -> Void
- from FiniteGraph S
- diagramHeight: % -> NonNegativeInteger
- from FiniteGraph S
- diagramsSvg: (String, List %, Boolean) -> Void
- from FiniteGraph S
- diagramSvg: (String, %, Boolean) -> Void
- from FiniteGraph S
- diagramWidth: % -> NonNegativeInteger
- from FiniteGraph S
- distance: (%, NonNegativeInteger, NonNegativeInteger) -> Integer
- from FiniteGraph S
- distanceMatrix: % -> Matrix Integer
- from FiniteGraph S
- flatten: DirectedGraph % -> %
- from FiniteGraph S

- functionGraph: (List Record(value: S, posX: NonNegativeInteger, posY: NonNegativeInteger), List Record(name: String, arrType: NonNegativeInteger, fromOb: NonNegativeInteger, toOb: NonNegativeInteger, xOffset: Integer, yOffset: Integer, map: List NonNegativeInteger)) -> %
- constructor for graph with given objects and arrows more objects and arrows can be added later if required.

- functionGraph: List Permutation S -> %
- construct graph from a list of permutations.

- functionGraph: List Record(value: S, posX: NonNegativeInteger, posY: NonNegativeInteger, next: NonNegativeInteger, map: List NonNegativeInteger) -> %
- constructor for graph with given objects more objects and arrows can be added later if required.

- functionGraph: List S -> %
- constructor for graph with given list of object names. Use this version of the constructor if you don
`'t`

intend to create diagrams and therefore don`'t`

care about`x`

,`y`

coordinates. more objects and arrows can be added later if required. - getArrowIndex: (%, NonNegativeInteger, NonNegativeInteger) -> NonNegativeInteger
- from FiniteGraph S
- getArrows: % -> List Record(name: String, arrType: NonNegativeInteger, fromOb: NonNegativeInteger, toOb: NonNegativeInteger, xOffset: Integer, yOffset: Integer, map: List NonNegativeInteger)
- from FiniteGraph S
- getVertexIndex: (%, S) -> NonNegativeInteger
- from FiniteGraph S
- getVertices: % -> List Record(value: S, posX: NonNegativeInteger, posY: NonNegativeInteger)
- from FiniteGraph S
- hash: % -> SingleInteger
- from SetCategory
- hashUpdate!: (HashState, %) -> HashState
- from SetCategory
- incidenceMatrix: % -> Matrix Integer
- from FiniteGraph S
- inDegree: (%, NonNegativeInteger) -> NonNegativeInteger
- from FiniteGraph S
- initial: () -> %
- from FiniteGraph S
- isAcyclic?: % -> Boolean
- from FiniteGraph S
- isDirected?: () -> Boolean
- from FiniteGraph S
- isDirectSuccessor?: (%, NonNegativeInteger, NonNegativeInteger) -> Boolean
- from FiniteGraph S
- isFixPoint?: (%, NonNegativeInteger) -> Boolean
- from FiniteGraph S
- isFunctional?: % -> Boolean
- from FiniteGraph S
- isGreaterThan?: (%, NonNegativeInteger, NonNegativeInteger) -> Boolean
- from FiniteGraph S
- kgraph: (List S, String) -> %
- from FiniteGraph S
- laplacianMatrix: % -> Matrix Integer
- from FiniteGraph S
- latex: % -> String
- from SetCategory

- limit: (%, NonNegativeInteger) -> Loop
- apply ‘function’ represented by this graph to ‘a’ repeatedly until we reach a loop which is returned as a sequence of vertex indexes.
- loopsArrows: % -> List Loop
- from FiniteGraph S
- loopsAtNode: (%, NonNegativeInteger) -> List Loop
- from FiniteGraph S
- loopsNodes: % -> List Loop
- from FiniteGraph S
- looseEquals: (%, %) -> Boolean
- from FiniteGraph S
- map: (%, List NonNegativeInteger, List S, Integer, Integer) -> %
- from FiniteGraph S
- mapContra: (%, List NonNegativeInteger, List S, Integer, Integer) -> %
- from FiniteGraph S
- max: % -> NonNegativeInteger
- from FiniteGraph S
- max: (%, List NonNegativeInteger) -> NonNegativeInteger
- from FiniteGraph S
- merge: (%, %) -> %
- from FiniteGraph S
- min: % -> NonNegativeInteger
- from FiniteGraph S
- min: (%, List NonNegativeInteger) -> NonNegativeInteger
- from FiniteGraph S
- nodeFromArrow: (%, NonNegativeInteger) -> List NonNegativeInteger
- from FiniteGraph S
- nodeFromNode: (%, NonNegativeInteger) -> List NonNegativeInteger
- from FiniteGraph S
- nodeToArrow: (%, NonNegativeInteger) -> List NonNegativeInteger
- from FiniteGraph S
- nodeToNode: (%, NonNegativeInteger) -> List NonNegativeInteger
- from FiniteGraph S
- outDegree: (%, NonNegativeInteger) -> NonNegativeInteger
- from FiniteGraph S
- routeArrows: (%, NonNegativeInteger, NonNegativeInteger) -> List NonNegativeInteger
- from FiniteGraph S
- routeNodes: (%, NonNegativeInteger, NonNegativeInteger) -> List NonNegativeInteger
- from FiniteGraph S
- spanningForestArrow: % -> List Tree Integer
- from FiniteGraph S
- spanningForestNode: % -> List Tree Integer
- from FiniteGraph S
- spanningTreeArrow: (%, NonNegativeInteger) -> Tree Integer
- from FiniteGraph S
- spanningTreeNode: (%, NonNegativeInteger) -> Tree Integer
- from FiniteGraph S
- subdiagramSvg: (Scene SCartesian 2, %, Boolean, Boolean) -> Void
- from FiniteGraph S
- terminal: S -> %
- from FiniteGraph S
- unit: (List S, String) -> %
- from FiniteGraph S