This seems to work if the category is defined in the same source
file (i.e. same section in MathAction). The code is based on the
Spad version SandBox Category of Graphs in Spad
fricas
(1) -> <aldor>
#pile
#include "axiom.as"
--
-- First we define the general category of graphs.
--
GraphCategory(nodes:Type, edges:Type): Category == with
source:edges->nodes
target:edges->nodes
--
-- Now we define finite graphs as follows:
--
edges ==> Record(source:nodes,target:nodes)
FiniteGraph(nodes: BasicType):GraphCategory(nodes,edges)
with
new: %
addNode: (%,List nodes) -> List nodes
addNode: (%,nodes) -> List nodes
addEdge: (%,nodes,nodes) -> edges
edgeList: (%) -> List edges
nodeList: (%) -> List nodes
== add
import from NonNegativeInteger
Rep == Record(node: List nodes, edge: List edges)
new:% ==
n:List(nodes):=[]
e:List(edges):=[]
per([n,e]$Rep)
addNode(g:%,n:nodes):List nodes == addNode(g,[n])
addNode(g:%,n:List nodes):List nodes ==
G:Rep:=g pretend Rep;
if #G.node=0 then
G.node:=n
else
concat!(G.node,n)
n
addEdge(g:%,source:nodes,target:nodes):edges ==
G:Rep:=g pretend Rep;
if #G.edge=0 then
G.edge:=[[source,target]$edges]
else
concat!(G.edge,[[source,target]$edges])
[source,target]$edges
edgeList(g:%):List edges ==
G:Rep:=g pretend Rep;
G.edge
nodeList(g:%):List nodes ==
G:Rep:=g pretend Rep;
G.node
source(ed:edges):nodes == ed.source
target(ed:edges):nodes == ed.target</aldor>
fricas
Compiling FriCAS source code from file
/var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/1676669208528368195-25px001.as
using Aldor compiler and options
-O -Fasy -Fao -Flsp -lfricas -Mno-ALDOR_W_WillObsolete -DFriCAS -Y $FRICAS/algebra -I $FRICAS/algebra
Use the system command )set compiler args to change these
options.
"/var/lib/zope2.10/instance/axiom-wiki/var/LatexWiki/1676669208528368195-25px001.as", line 2:
#include "axiom.as"
^
[L2 C1] #1 (Error) Could not open file `axiom.as'.
The )library system command was not called after compilation.
fricas
)sh FiniteGraph
FiniteGraph(S: SetCategory) is a category constructor
Abbreviation for FiniteGraph is FGRPH
This constructor is not exposed in this frame.
------------------------------- Operations --------------------------------
?+? : (%, %) -> % ?=? : (%, %) -> Boolean
addObject! : (%, S) -> % coerce : % -> OutputForm
flatten : DirectedGraph(%) -> % initial : () -> %
isAcyclic? : % -> Boolean isDirected? : () -> Boolean
isFunctional? : % -> Boolean kgraph : (List(S), String) -> %
latex : % -> String loopsArrows : % -> List(Loop)
loopsNodes : % -> List(Loop) looseEquals : (%, %) -> Boolean
max : % -> NonNegativeInteger merge : (%, %) -> %
min : % -> NonNegativeInteger terminal : S -> %
unit : (List(S), String) -> % ?~=? : (%, %) -> Boolean
addArrow! : (%, String, S, S) -> %
addArrow! : (%, String, NonNegativeInteger, NonNegativeInteger, List(NonNegativeInteger)) -> %
addArrow! : (%, String, NonNegativeInteger, NonNegativeInteger) -> %
addArrow! : (%, Record(name: String,arrType: NonNegativeInteger,fromOb: NonNegativeInteger,toOb: NonNegativeInteger,xOffset: Integer,yOffset: Integer,map: List(NonNegativeInteger))) -> %
addObject! : (%, Record(value: S,posX: NonNegativeInteger,posY: NonNegativeInteger)) -> %
adjacencyMatrix : % -> Matrix(NonNegativeInteger)
arrowName : (%, NonNegativeInteger, NonNegativeInteger) -> String
arrowsFromArrow : (%, NonNegativeInteger) -> List(NonNegativeInteger)
arrowsFromNode : (%, NonNegativeInteger) -> List(NonNegativeInteger)
arrowsToArrow : (%, NonNegativeInteger) -> List(NonNegativeInteger)
arrowsToNode : (%, NonNegativeInteger) -> List(NonNegativeInteger)
createWidth : NonNegativeInteger -> NonNegativeInteger
createX : (NonNegativeInteger, NonNegativeInteger) -> NonNegativeInteger
createY : (NonNegativeInteger, NonNegativeInteger) -> NonNegativeInteger
cycleClosed : (List(S), String) -> %
cycleOpen : (List(S), String) -> %
deepDiagramSvg : (String, %, Boolean) -> Void
diagramHeight : % -> NonNegativeInteger
diagramSvg : (String, %, Boolean) -> Void
diagramWidth : % -> NonNegativeInteger
diagramsSvg : (String, List(%), Boolean) -> Void
distance : (%, NonNegativeInteger, NonNegativeInteger) -> Integer
distanceMatrix : % -> Matrix(Integer)
getArrowIndex : (%, NonNegativeInteger, NonNegativeInteger) -> NonNegativeInteger
getArrows : % -> List(Record(name: String,arrType: NonNegativeInteger,fromOb: NonNegativeInteger,toOb: NonNegativeInteger,xOffset: Integer,yOffset: Integer,map: List(NonNegativeInteger)))
getVertexIndex : (%, S) -> NonNegativeInteger
getVertices : % -> List(Record(value: S,posX: NonNegativeInteger,posY: NonNegativeInteger))
inDegree : (%, NonNegativeInteger) -> NonNegativeInteger
incidenceMatrix : % -> Matrix(Integer)
isDirectSuccessor? : (%, NonNegativeInteger, NonNegativeInteger) -> Boolean
isFixPoint? : (%, NonNegativeInteger) -> Boolean
isGreaterThan? : (%, NonNegativeInteger, NonNegativeInteger) -> Boolean
laplacianMatrix : % -> Matrix(Integer)
loopsAtNode : (%, NonNegativeInteger) -> List(Loop)
map : (%, List(NonNegativeInteger), List(S), Integer, Integer) -> %
mapContra : (%, List(NonNegativeInteger), List(S), Integer, Integer) -> %
max : (%, List(NonNegativeInteger)) -> NonNegativeInteger
min : (%, List(NonNegativeInteger)) -> NonNegativeInteger
nodeFromArrow : (%, NonNegativeInteger) -> List(NonNegativeInteger)
nodeFromNode : (%, NonNegativeInteger) -> List(NonNegativeInteger)
nodeToArrow : (%, NonNegativeInteger) -> List(NonNegativeInteger)
nodeToNode : (%, NonNegativeInteger) -> List(NonNegativeInteger)
outDegree : (%, NonNegativeInteger) -> NonNegativeInteger
routeArrows : (%, NonNegativeInteger, NonNegativeInteger) -> List(NonNegativeInteger)
routeNodes : (%, NonNegativeInteger, NonNegativeInteger) -> List(NonNegativeInteger)
spanningForestArrow : % -> List(Tree(Integer))
spanningForestNode : % -> List(Tree(Integer))
spanningTreeArrow : (%, NonNegativeInteger) -> Tree(Integer)
spanningTreeNode : (%, NonNegativeInteger) -> Tree(Integer)
subdiagramSvg : (Scene(SCartesian(2)), %, Boolean, Boolean) -> Void
Example 1: create a simple finite graph:
fricas
g:FiniteGraph(INT)
FiniteGraph(Integer) is a category, not a domain, and declarations
require domains.