Search in sources :

Example 6 with Edge

use of catdata.fqlpp.cat.Signature.Edge 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);
}
Also used : ApplyPath(catdata.fqlpp.TransExp.ApplyPath) Path(catdata.fqlpp.cat.Signature.Path) FiniteCategory(catdata.fqlpp.cat.FiniteCategory) Category(catdata.fqlpp.cat.Category) CatConst(catdata.fqlpp.FunctorExp.CatConst) SetSetConst(catdata.fqlpp.FunctorExp.SetSetConst) Const(catdata.fqlpp.CatExp.Const) InstConst(catdata.fqlpp.FunctorExp.InstConst) MapConst(catdata.fqlpp.FunctorExp.MapConst) FinalConst(catdata.fqlpp.FunctorExp.FinalConst) Node(catdata.fqlpp.cat.Signature.Node) Mapping(catdata.fqlpp.cat.Mapping) Triple(catdata.Triple) Signature(catdata.fqlpp.cat.Signature) Edge(catdata.fqlpp.cat.Signature.Edge)

Example 7 with Edge

use of catdata.fqlpp.cat.Signature.Edge in project fql by CategoricalData.

the class CatOps method visit.

@Override
public Functor visit(FQLPPProgram env, CatConst ic) {
    CatExp e = resolve(env, ic.sig);
    if (!(e instanceof Const)) {
        throw new RuntimeException("Can only create functors to cat from finitely-presented categories.");
    }
    Const c = (Const) e;
    Category cat = c.accept(env, this);
    Signature<String, String> sig = new Signature<>(c.nodes, c.arrows, c.eqs);
    Map<Node, Category> nm = new HashMap<>();
    for (Node n : sig.nodes) {
        CatExp kkk = ic.nm.get(n.name);
        if (kkk == null) {
            throw new RuntimeException("Missing node mapping from " + n);
        }
        nm.put(n, kkk.accept(env, this));
    }
    Map<Edge, Functor> em = new HashMap<>();
    for (Edge n : sig.edges) {
        FunctorExp chc = ic.em.get(n.name);
        if (chc == null) {
            throw new RuntimeException("Missing edge mapping from " + n);
        }
        em.put(n, chc.accept(env, this));
    }
    FUNCTION fff = p0 -> {
        Path p = (Path) p0;
        Functor fn = FinCat.FinCat.identity(nm.get(p.source));
        for (Object nnn : p.path) {
            Edge n = (Edge) nnn;
            fn = FinCat.FinCat.compose(fn, em.get(n));
        }
        return fn;
    };
    return new Functor(cat, FinCat.FinCat, nm::get, fff);
}
Also used : PeterApply(catdata.fqlpp.TransExp.PeterApply) FiniteCategory(catdata.fqlpp.cat.FiniteCategory) Named(catdata.fqlpp.CatExp.Named) Edge(catdata.fqlpp.cat.Signature.Edge) Snd(catdata.fqlpp.FunctorExp.Snd) Comp(catdata.fqlpp.FunctorExp.Comp) ToInst(catdata.fqlpp.TransExp.ToInst) Id(catdata.fqlpp.FunctorExp.Id) Inr(catdata.fqlpp.FunctorExp.Inr) FF(catdata.fqlpp.FunctorExp.FF) Migrate(catdata.fqlpp.FunctorExp.Migrate) Colim(catdata.fqlpp.CatExp.Colim) Exp(catdata.fqlpp.CatExp.Exp) Pushout(catdata.fqlpp.FunctorExp.Pushout) FinCat(catdata.fqlpp.cat.FinCat) FunCat(catdata.fqlpp.cat.FunCat) Pair(catdata.Pair) CoMonad(catdata.fqlpp.cat.CoMonad) Iso(catdata.fqlpp.FunctorExp.Iso) ApplyPath(catdata.fqlpp.TransExp.ApplyPath) Inj(catdata.fqlpp.TransExp.Inj) Fn(catdata.fqlpp.cat.FinSet.Fn) Bool(catdata.fqlpp.TransExp.Bool) Case(catdata.fqlpp.FunctorExp.Case) ToMap(catdata.fqlpp.TransExp.ToMap) Zero(catdata.fqlpp.CatExp.Zero) Monad(catdata.fqlpp.cat.Monad) Plus(catdata.fqlpp.CatExp.Plus) Category(catdata.fqlpp.cat.Category) CatConst(catdata.fqlpp.FunctorExp.CatConst) Inst(catdata.fqlpp.cat.Inst) ToSet(catdata.fqlpp.TransExp.ToSet) Groth(catdata.fqlpp.cat.Groth) Mapping(catdata.fqlpp.cat.Mapping) Serializable(java.io.Serializable) Kleisli(catdata.fqlpp.CatExp.Kleisli) ApplyTrans(catdata.fqlpp.TransExp.ApplyTrans) SetSetConst(catdata.fqlpp.FunctorExp.SetSetConst) Dom(catdata.fqlpp.CatExp.Dom) Triple(catdata.Triple) Eval(catdata.fqlpp.FunctorExp.Eval) Var(catdata.fqlpp.FunctorExp.Var) Times(catdata.fqlpp.CatExp.Times) Const(catdata.fqlpp.CatExp.Const) java.util(java.util) Prod(catdata.fqlpp.FunctorExp.Prod) InstConst(catdata.fqlpp.FunctorExp.InstConst) Node(catdata.fqlpp.cat.Signature.Node) Chc(catdata.Chc) TT(catdata.fqlpp.FunctorExp.TT) Functor(catdata.fqlpp.cat.Functor) Proj(catdata.fqlpp.TransExp.Proj) Prop(catdata.fqlpp.FunctorExp.Prop) CatExpVisitor(catdata.fqlpp.CatExp.CatExpVisitor) Signature(catdata.fqlpp.cat.Signature) TransExpVisitor(catdata.fqlpp.TransExp.TransExpVisitor) Union(catdata.fqlpp.CatExp.Union) ToCat(catdata.fqlpp.TransExp.ToCat) One(catdata.fqlpp.CatExp.One) FDM(catdata.fqlpp.cat.FDM) Ker(catdata.fqlpp.TransExp.Ker) Fst(catdata.fqlpp.FunctorExp.Fst) Whisker(catdata.fqlpp.TransExp.Whisker) Curry(catdata.fqlpp.FunctorExp.Curry) Transform(catdata.fqlpp.cat.Transform) Apply(catdata.fqlpp.FunctorExp.Apply) Instance(catdata.fqlpp.cat.Instance) MapConst(catdata.fqlpp.FunctorExp.MapConst) Path(catdata.fqlpp.cat.Signature.Path) Pivot(catdata.fqlpp.FunctorExp.Pivot) Chr(catdata.fqlpp.TransExp.Chr) Cod(catdata.fqlpp.CatExp.Cod) FinSet(catdata.fqlpp.cat.FinSet) Uncurry(catdata.fqlpp.FunctorExp.Uncurry) FunctorExpVisitor(catdata.fqlpp.FunctorExp.FunctorExpVisitor) Adj(catdata.fqlpp.TransExp.Adj) SetSet(catdata.fqlpp.TransExp.SetSet) AndOrNotImplies(catdata.fqlpp.TransExp.AndOrNotImplies) FinalConst(catdata.fqlpp.FunctorExp.FinalConst) Inl(catdata.fqlpp.FunctorExp.Inl) CoProd(catdata.fqlpp.TransExp.CoProd) ApplyPath(catdata.fqlpp.TransExp.ApplyPath) Path(catdata.fqlpp.cat.Signature.Path) FiniteCategory(catdata.fqlpp.cat.FiniteCategory) Category(catdata.fqlpp.cat.Category) CatConst(catdata.fqlpp.FunctorExp.CatConst) SetSetConst(catdata.fqlpp.FunctorExp.SetSetConst) Const(catdata.fqlpp.CatExp.Const) InstConst(catdata.fqlpp.FunctorExp.InstConst) MapConst(catdata.fqlpp.FunctorExp.MapConst) FinalConst(catdata.fqlpp.FunctorExp.FinalConst) Node(catdata.fqlpp.cat.Signature.Node) Functor(catdata.fqlpp.cat.Functor) Signature(catdata.fqlpp.cat.Signature) Edge(catdata.fqlpp.cat.Signature.Edge)

Aggregations

Edge (catdata.fqlpp.cat.Signature.Edge)6 Node (catdata.fqlpp.cat.Signature.Node)6 Pair (catdata.Pair)5 Triple (catdata.Triple)4 Const (catdata.fqlpp.CatExp.Const)4 CatConst (catdata.fqlpp.FunctorExp.CatConst)4 FinalConst (catdata.fqlpp.FunctorExp.FinalConst)4 InstConst (catdata.fqlpp.FunctorExp.InstConst)4 MapConst (catdata.fqlpp.FunctorExp.MapConst)4 SetSetConst (catdata.fqlpp.FunctorExp.SetSetConst)4 FinSet (catdata.fqlpp.cat.FinSet)4 Signature (catdata.fqlpp.cat.Signature)4 Category (catdata.fqlpp.cat.Category)3 FiniteCategory (catdata.fqlpp.cat.FiniteCategory)3 Paint (java.awt.Paint)3 Chc (catdata.Chc)2 CatExpVisitor (catdata.fqlpp.CatExp.CatExpVisitor)2 Cod (catdata.fqlpp.CatExp.Cod)2 Colim (catdata.fqlpp.CatExp.Colim)2 Dom (catdata.fqlpp.CatExp.Dom)2