Category Theory "formalizes mathematical structure and its concepts in terms of a collection of objects and of arrows (also called morphisms). A category has two basic properties: the ability to compose the arrows associatively and the existence of an identity arrow for each object. The language of category theory has been used to formalize concepts of other high-level abstractions such as sets, rings, and groups."
The Algebraic Query Language (AQL) tool and language implement some of the basic concepts of Category Theory. I have written initial versions of a loader that reads AQL content into Xholon, and an exporter that writes a Xholon app in AQL format, in order to explore similarities and differences between Xholon, AQL, and Category Theory. I am also finding AQL useful as a concrete tool to help me learn about Category Theory, in conjunction with reading various texts.
The examples included on this page are a few initial tests, mostly based on examples supplied within the AQL tool. They demonstrate that the structures in Xholon and AQL are roughly aligned with each other. I am just beginning to learn about Category Theory and how I might be able to use it with Xholon, and there's still a lot of work to do.
Test01 is a simple test. It reads the AQL content, generates a Xholon structure, and exports the generated Xholon structure in XML, YAML, SQL, and Graphviz Dot format. It also uses Graphviz itself to generate and display an SVG image. The Test01 source code is here.
Finance Colim is part of a larger AQL example. I've included 2 separate groups of AQL typeside, schema, and instance blocks. It's source code is here.
You can paste your own AQL typeside/schema/instance content into a Template, where it says "// paste your AQL code here". Run it by clicking one of the three "Run" buttons at the top of the Template web page, for example the "clsc" button. Note that for now Xholon only accepts a subset of AQL syntax. For example, each instance equation must be on its own line.
Other Xholon workbooks related to Category Theory are listed as part of this long list. Search for "Category" and "Categorical".
Step 1: Open the Template page.
Step 2: Paste the following AQL content into the Template page, just after where it says "// paste your AQL code here".
typeside Ty = literal { types int string constants Ken Licorice : string 4 : int } schema S = literal : Ty { entities One Two Three foreign_keys fk1 : One -> Two fk2 : Two -> Three attributes attr1 : One -> int attr2 : Two -> string attr3 : Three -> string } instance I = literal : S { generators one1 : One one2 : One two1 : Two three1 : Three equations one1.attr1 = 4 one1.fk1 = two1 two1.attr2 = Ken two1.fk2 = three1 three1.attr3 = Licorice }
Step 3: Click the "clsc" button at the top of the Template page. The run-time page should open up, and you should see XML, YAML, SQL, and Graphviz content in tabs, and you should also see an SVG image.
Step 1: Open the page for the simple Ping Pong app.
Step 2: Locate the "PingPongSystem" node in the tree (Application > Model > CompositeStructureHierarchy > PingPongSystem).
Step 3: Right-click the "PingPongSystem" node, and select Export > nosql > CatAql .
Step 4: Click "doExport". Something like the following text should be generated in a tab on the page.
/* To view this file, download the FQL tool (AQL) from http://categoricaldata.net/aql.html. Automatically generated by Xholon version 0.9.1, using Xholon2CatAql.java Wed Jun 14 12:16:00 GMT-400 2017 1497456960453 model: Ping Pong www.primordion.com/Xholon */ typeside Ty = literal { java_types string = "java.lang.String" int = "java.lang.Integer" float = "java.lang.Float" double = "java.lang.Double" boolean = "java.lang.Boolean" java_constants string = "return input[0]" int = "return java.lang.Integer.parseInt(input[0])" float = "return java.lang.Float.parseFloat(input[0])" double = "return java.lang.Double.parseDouble(input[0])" boolean = "return java.lang.Boolean.parseBoolean(input[0])" java_functions plus : int,int -> int = "return (input[0] + input[1]).intValue()" plusf : float,float -> float = "return input[0] + input[1]" plusd : double,double -> double = "return input[0] + input[1]" } schema S = literal : Ty { entities PingPongSystem PingPongEntity foreign_keys pingPongEntity_port0 : PingPongEntity -> PingPongEntity pingPongEntity_parent : PingPongEntity -> PingPongSystem path_equations // If you run this with the AQL tool, and if the content includes infinite paths, then you may need to add one or more path_equations to prevent an error. // For example: hello_port0.world_port0 = Hello attributes observation_equations options } instance I = literal : S { generators pingPongSystem_0 : PingPongSystem pingPongEntity_1 : PingPongEntity pingPongEntity_2 : PingPongEntity equations pingPongEntity_port0(pingPongEntity_1) = pingPongEntity_2 pingPongEntity_parent(pingPongEntity_1) = pingPongSystem_0 pingPongEntity_port0(pingPongEntity_2) = pingPongEntity_1 pingPongEntity_parent(pingPongEntity_2) = pingPongSystem_0 options }
Step 5a: You can load this text into the AQL tool, and press "Run".
Step 5b: You can also test it using the AQL in-browser tool.
Some examples of AQL, XML, YAML, SQL, Graphviz, SVG, and other generated content, are available here.
Xholon is primarily focused on building executable applications. Any Xholon node (AQL instance) may have one or more JavaScript behaviors. For example, you can add the following behavior to print out a sentence about each instance. To do this, right-click the "CatTheoryInstance" node in the Xholon tree, and select "XholonConsole". A console window will open up in a tab on the page. Paste the following behavior script into the console. Click "Submit". Look at the "out" tab to see the result.
<script><![CDATA[ var me; var beh = { postConfigure: function() { me = this.cnode.parent(); this.cnode.remove(); var instance = me.first(); while (instance) { me.println(instance.role() + " is a " + instance.schema.role() + "."); instance = instance.next(); } } } ]]></script>
The following screenprint shows the AQL Employee/Department example after importing it into Xholon. It includes three separate SVG images generated using Graphviz.
The following image shows a simple AQL example loaded into Xholon. Animation is running, and the system Avatar is being manually and visually moved through the AQL instances and schema. Note the use of Chrome Developer Tools to control the Avatar (ava). In the screenprint, the Avatar is currently inside the AQL "string" object. It got there by following the path from "one1": fk1 fk2 schema attr3
I've been trying out some concepts from Paweł Sobocinski's blog on Graphical Linear Algebra.
Xholon GWT is a Xholon project. Copyright (C) 2017 Ken Webb
@QWERTYUIk OPASmDFGHe primordion JKLZcXCVB.