use of catdata.fqlpp.FunctorExp.MapConst in project fql by CategoricalData.
the class Ben method colim.
public static Const colim(FQLPPProgram env, CatConst f) {
if (!(f.sig instanceof CatExp.Var)) {
throw new RuntimeException(f.sig + " is not variable, is " + f.sig.getClass());
}
CatExp c = env.cats.get(((CatExp.Var) f.sig).v);
if (!(c instanceof Const)) {
throw new RuntimeException(c + " is not finitely presented, is " + c.getClass());
}
Const src = (Const) c;
Map<String, Const> obMapping = new HashMap<>();
Map<String, MapConst> arrMapping = new HashMap<>();
for (String src_ob : f.nm.keySet()) {
CatExp C = f.nm.get(src_ob);
if (!(C instanceof CatExp.Var)) {
throw new RuntimeException(C + " is not a variable");
}
CatExp D = env.cats.get(((CatExp.Var) C).v);
if (!(D instanceof Const)) {
throw new RuntimeException(D + " is not finitely presented");
}
obMapping.put(src_ob, (Const) D);
}
for (String src_arr : f.em.keySet()) {
FunctorExp C = f.em.get(src_arr);
if (!(C instanceof Var)) {
throw new RuntimeException(C + " is not a variable");
}
FunctorExp D = env.ftrs.get(((Var) C).v);
if (!(D instanceof MapConst)) {
throw new RuntimeException(D + " is not finitely presented");
}
arrMapping.put(src_arr, (MapConst) D);
}
return sandbox(src, obMapping, arrMapping);
}
use of catdata.fqlpp.FunctorExp.MapConst in project fql by CategoricalData.
the class CatOps method visit.
@Override
public Functor visit(FQLPPProgram env, MapConst ic) {
Triple<Category, Category, Mapping<String, String, String, String>> xxx = toMapping(env, ic);
Mapping<String, String, String, String> I = xxx.third;
FUNCTION f = p0 -> {
Path p = (Path) p0;
return I.apply(p);
};
Functor et = new Functor(xxx.first, xxx.second, x -> I.nm.get(x), f);
et.mapping0 = xxx.third;
return et;
}
use of catdata.fqlpp.FunctorExp.MapConst in project fql by CategoricalData.
the class PPParser method toMapConst.
private static FunctorExp toMapConst(Object decl) {
Tuple5 y = (Tuple5) decl;
org.jparsec.functors.Pair x = (org.jparsec.functors.Pair) y.a;
Tuple3 nodes = (Tuple3) x.a;
Tuple3 arrows = (Tuple3) x.b;
List nodes0 = (List) nodes.b;
List arrows0 = (List) arrows.b;
Map<String, String> nodesX = new HashMap<>();
for (Object o : nodes0) {
if (nodesX.containsKey(o)) {
throw new RuntimeException("Duplicate object: " + o + " in " + decl);
}
Tuple3 u = (Tuple3) o;
String n = (String) u.a;
String l = u.c.toString();
nodesX.put(n, l);
}
Map<String, Pair<String, List<String>>> arrowsX = new HashMap<>();
for (Object o : arrows0) {
if (arrowsX.containsKey(o)) {
throw new RuntimeException("Duplicate arrow: " + o + " in " + decl);
}
Tuple3 u = (Tuple3) o;
String n = (String) u.a;
List<String> l = (List<String>) u.c;
String ll = l.remove(0);
arrowsX.put(n, new Pair<>(ll, l));
}
MapConst ret = new MapConst(toCat(y.c), toCat(y.e), nodesX, arrowsX);
return ret;
}
use of catdata.fqlpp.FunctorExp.MapConst in project fql by CategoricalData.
the class CatOps method toMapping.
private Triple<Category, Category, Mapping<String, String, String, String>> toMapping(FQLPPProgram env, MapConst ic) {
CatExp src0 = resolve(env, ic.src);
if (src0 == null) {
throw new RuntimeException("Missing category: " + ic.src);
}
if (!(src0 instanceof Const)) {
throw new RuntimeException("Can only create mappings for finitely-presented categories.");
}
Const src = (Const) src0;
CatExp dst0 = resolve(env, ic.dst);
if (!(dst0 instanceof Const)) {
throw new RuntimeException("Can only create mappings for finitely-presented categories.");
}
Const dst = (Const) dst0;
Category srcX = src.accept(env, this);
Category dstX = dst.accept(env, this);
Signature<String, String> srcY = new Signature<>(src.nodes, src.arrows, src.eqs);
Signature<String, String> dstY = new Signature<>(dst.nodes, dst.arrows, dst.eqs);
Map<Node, Node> nm = new HashMap<>();
for (String n0 : ic.nm.keySet()) {
Signature<String, String>.Node n = srcY.getNode(n0);
String v = ic.nm.get(n.name);
if (v == null) {
throw new RuntimeException("Missing object mapping for " + n.name);
}
nm.put(n, dstY.getNode(v));
}
Map<Edge, Path> em = new HashMap<>();
for (String n0 : ic.em.keySet()) {
Signature<String, String>.Edge n = srcY.getEdge(n0);
Pair<String, List<String>> k = ic.em.get(n.name);
if (k == null) {
throw new RuntimeException("Missing arrow mapping for " + n.name);
}
em.put(n, dstY.path(k.first, k.second));
}
Mapping<String, String, String, String> I = new Mapping(nm, em, srcY, dstY);
return new Triple<>(srcX, dstX, I);
}
Aggregations