This is libquiver: a library for making and working with quivers in
myrddin. You may care about it if you want to work with cluster
algebras, doing things that Clav [0] does, but as a library.
You need
- myrddin [ https://myrlang.org ]
- libt [ https://repo.or.cz/some-myr-traits.git ]
- libyakmo [ https://repo.or.cz/libyakmo.git ]
Example program, demonstrating specific Plücker relations:
use std
use t
use quiver
use yakmo
const main = {
var q = quiver.mk_with_opts([.use_a_coords = true])
quiver.add_vertex(q, "a", 1)
quiver.add_vertex(q, "b", 1)
quiver.add_vertex(q, "x", 1)
quiver.add_vertex(q, "c", 1)
quiver.add_vertex(q, "d", 1)
quiver.add_to_edge(q, "a", "x", yakmo.QfromZ(1))
quiver.add_to_edge(q, "x", "b", yakmo.QfromZ(1))
quiver.add_to_edge(q, "b", "a", yakmo.QfromZ(1))
quiver.add_to_edge(q, "d", "x", yakmo.QfromZ(1))
quiver.add_to_edge(q, "x", "c", yakmo.QfromZ(1))
quiver.add_to_edge(q, "c", "d", yakmo.QfromZ(1))
for var j = 0; j < q.v.len; ++j
q.v[j].acoord = yakmo.polynomialfromQ(auto std.try(yakmo.Qfrom(1, j*j + 1)))
;;
var q2 = t.dup(q)
match quiver.mutate_ip(q2, "x")
| `std.Ok void:
| `std.Err e: std.fatal("mutate(q2, x, true): {}\n", e)
;;
for var j = 0; j < q.v.len; ++j
std.put("{} {} {}\n", q.v[j].name, q.v[j].acoord, q2.v[j].acoord);
;;
}
[0] https://repo.or.cz/clav.git