圏論の勉強をかねて図式をSwiftで描くプログラムを作っています。
今作っているのは次のようなものです。
これを使えばSwiftで圏の対象の表示位置と射を定義することでxymatrixを吐き出すことができます。
例として
category.swift
// 全体の大きさを決定する
let maxsize = (4,4)
var matrix:[String:(Int,Int)] = [:]
// 圏の対象 A,B,C,D 配置する。
["A","B","C","D"].enumerated().forEach {
matrix[$0.1] = ($0.0,0)
}
// 射の指定 A->B->C->D
let abcds = [["A","B","f"],["B","C","g"],["C","D","h"]]
let abcdArrows = abcds.map { Arrow($0) }
// 圏の対象 E ここでA,B,C,DはEへの射をもつ
matrix["E"] = (3,3)
let others = ["A","B","C","D"].enumerated().map {
Arrow([$0.1,"E","z" + "\($0.0)"])
}
let arrows = abcdArrows + others
display(matrix:matrix, matrixsize:maxsize, arrows:arrows)
のようにコードを書くことで以下のような図式を描くことができます。
現状は簡単な図式しか書けませんがさらに複雑な図式が書けるようにしていければと思います。