LaTeX
圏論
Swift
xymatrix

圏論の図式をSwiftで描く

More than 1 year has passed since last update.

圏論の勉強をかねて図式をSwiftで描くプログラムを作っています。

今作っているのは次のようなものです。

https://github.com/KatagiriSo/RDCategoryWriter

これを使えば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)


のようにコードを書くことで以下のような図式を描くことができます。

picture.jpg

現状は簡単な図式しか書けませんがさらに複雑な図式が書けるようにしていければと思います。