Search in sources :

Example 1 with Const

use of catdata.fqlpp.CatExp.Const 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);
}
Also used : HashMap(java.util.HashMap) Var(catdata.fqlpp.FunctorExp.Var) Const(catdata.fqlpp.CatExp.Const) MapConst(catdata.fqlpp.FunctorExp.MapConst) CatConst(catdata.fqlpp.FunctorExp.CatConst) MapConst(catdata.fqlpp.FunctorExp.MapConst)

Example 2 with Const

use of catdata.fqlpp.CatExp.Const in project fql by CategoricalData.

the class CatOps method visit.

@Override
public Functor visit(FQLPPProgram env, FinalConst ic) {
    CatExp e = resolve(env, ic.src);
    if (!(e instanceof Const)) {
        throw new RuntimeException("Can only create functors 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);
    Category target = ic.C.accept(env, this);
    Map<Node, Functor> nm = new HashMap<>();
    for (Node n : sig.nodes) {
        FunctorExp kkk = ic.nm.get(n.name);
        if (kkk == null) {
            throw new RuntimeException("Missing node mapping from " + n);
        }
        Functor F = kkk.accept(env, this);
        nm.put(n, F);
    }
    Map<Edge, Transform> em = new HashMap<>();
    for (Edge n : sig.edges) {
        TransExp 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;
        Object fn = target.identity(nm.get(p.source));
        for (Object nnn : p.path) {
            Edge n = (Edge) nnn;
            fn = target.compose(fn, em.get(n));
        }
        return fn;
    };
    return new Functor(cat, target, 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) Transform(catdata.fqlpp.cat.Transform) Edge(catdata.fqlpp.cat.Signature.Edge)

Example 3 with Const

use of catdata.fqlpp.CatExp.Const in project fql by CategoricalData.

the class CatOps method visit.

@Override
public Category visit(FQLPPProgram env, Colim e) {
    FunctorExp f = ENV.prog.ftrs.get(e.F);
    if (f == null) {
        throw new RuntimeException("Undefined functor: " + e.F);
    }
    if (!(f instanceof CatConst)) {
        throw new RuntimeException("Not a literal: " + e.F + ", is " + f.getClass());
    }
    CatConst F = (CatConst) f;
    Const C = Ben.colim(env, F);
    return C.accept(env, this);
}
Also used : 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) CatConst(catdata.fqlpp.FunctorExp.CatConst)

Example 4 with Const

use of catdata.fqlpp.CatExp.Const in project fql by CategoricalData.

the class CatOps method visit.

@Override
public Transform visit(FQLPPProgram env, ApplyPath e) {
    Functor F = e.F.accept(env, this);
    CatExp c = resolve(env, e.cat);
    if (!(c instanceof Const)) {
        throw new RuntimeException("Can only take paths in constant categories.");
    }
    Const C = (Const) c;
    Signature s = new Signature(C.nodes, C.arrows, C.eqs);
    Path n = s.path(e.node, e.edges);
    return (Transform) F.applyA(n);
}
Also used : ApplyPath(catdata.fqlpp.TransExp.ApplyPath) Path(catdata.fqlpp.cat.Signature.Path) 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) Signature(catdata.fqlpp.cat.Signature) Functor(catdata.fqlpp.cat.Functor) Transform(catdata.fqlpp.cat.Transform)

Example 5 with Const

use of catdata.fqlpp.CatExp.Const in project fql by CategoricalData.

the class FqlppDisplay method showTrans.

@SuppressWarnings("unchecked")
private JPanel showTrans(Transform view, Color c) {
    JTabbedPane px = new JTabbedPane();
    if (view.source.source.isInfinite()) {
        CodeTextPanel p = new CodeTextPanel(BorderFactory.createEtchedBorder(), null, "Cannot display transforms from " + view.source.source);
        px.add("Text", p);
        JPanel top = new JPanel(new GridLayout(1, 1));
        top.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
        top.add(px);
        return top;
    }
    Signature<Object, Object> src_sig = null;
    // Signature<Object, Object> dst_sig = null;
    String src_key = unr(env.cats, view.source.source, null);
    if (src_key == null) {
        src_key = unr(env.cats, view.target.source, null);
    }
    if (src_key != null) {
        CatExp r = CatOps.resolve(prog, prog.cats.get(src_key));
        if (r instanceof Const) {
            Const sig0 = (Const) r;
            src_sig = new Signature(sig0.nodes, sig0.arrows, sig0.eqs);
        }
    }
    if (src_sig != null && FinSet.FinSet.equals(view.target.target)) {
        // JPanel vwr = new JPanel(new GridLayout(1, 1));
        if (DefunctGlobalOptions.debug.fqlpp.trans_elements) {
            Graph g = build2Elements(src_sig, view);
            if (g.getVertexCount() == 0) {
                px.add("Elements", new JPanel());
            } else if (g.getVertexCount() > DefunctGlobalOptions.debug.fqlpp.MAX_NODES) {
                CodeTextPanel xxx = new CodeTextPanel(BorderFactory.createEtchedBorder(), "", "Graph has " + g.getVertexCount() + " nodes, which exceeds limit of " + DefunctGlobalOptions.debug.fqlpp.MAX_NODES);
                px.add("Elements", xxx);
            } else if (g.getEdgeCount() > DefunctGlobalOptions.debug.fqlpp.MAX_EDGES) {
                CodeTextPanel xxx = new CodeTextPanel(BorderFactory.createEtchedBorder(), "", "Graph has " + g.getEdgeCount() + " edges, which exceeds limit of " + DefunctGlobalOptions.debug.fqlpp.MAX_EDGES);
                px.add("Elements", xxx);
            } else {
                JComponent zzz = doElements2View(c, g);
                JPanel xxx = new JPanel(new GridLayout(1, 1));
                xxx.add(zzz);
                px.add("Elements", xxx);
            }
        }
    }
    if (DefunctGlobalOptions.debug.fqlpp.trans_graph) {
        JPanel vwr = new JPanel(new GridLayout(1, 1));
        if (view.source.source.objects().isEmpty()) {
            px.add("Graph", vwr);
        } else {
            JComponent zzz = doNTView(view, vwr, c, buildFromCat(view.source.source));
            JSplitPane newthing = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
            newthing.setResizeWeight(.5d);
            newthing.add(zzz);
            newthing.add(vwr);
            JPanel xxx = new JPanel(new GridLayout(1, 1));
            xxx.add(newthing);
            px.add("Graph", xxx);
        }
    }
    if (DefunctGlobalOptions.debug.fqlpp.trans_tabular) {
        JPanel gp = new JPanel(new GridLayout(1, 1));
        Object[][] rowData = new Object[view.source.source.objects().size()][2];
        int i = 0;
        for (Object o : view.source.source.objects()) {
            rowData[i][0] = Util.nice(o.toString());
            rowData[i][1] = Util.nice(view.apply(o).toString());
            i++;
        }
        Object[] colNames = new Object[] { "Input", "Output" };
        JPanel gp1 = GuiUtil.makeTable(BorderFactory.createEtchedBorder(), "On Objects (" + view.source.source.objects().size() + ")", rowData, colNames);
        gp.add(gp1);
        px.add("Table", gp);
    }
    if (DefunctGlobalOptions.debug.fqlpp.trans_textual) {
        CodeTextPanel gp = new CodeTextPanel(BorderFactory.createEtchedBorder(), "", Util.nice(view.toString()));
        px.add("Text", gp);
    }
    JPanel top = new JPanel(new GridLayout(1, 1));
    top.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
    top.add(px);
    return top;
}
Also used : JPanel(javax.swing.JPanel) JTabbedPane(javax.swing.JTabbedPane) Const(catdata.fqlpp.CatExp.Const) JComponent(javax.swing.JComponent) Paint(java.awt.Paint) GridLayout(java.awt.GridLayout) Graph(edu.uci.ics.jung.graph.Graph) CodeTextPanel(catdata.ide.CodeTextPanel) Signature(catdata.fqlpp.cat.Signature) JSplitPane(javax.swing.JSplitPane)

Aggregations

Const (catdata.fqlpp.CatExp.Const)13 CatConst (catdata.fqlpp.FunctorExp.CatConst)8 MapConst (catdata.fqlpp.FunctorExp.MapConst)8 Signature (catdata.fqlpp.cat.Signature)8 FinalConst (catdata.fqlpp.FunctorExp.FinalConst)7 InstConst (catdata.fqlpp.FunctorExp.InstConst)7 SetSetConst (catdata.fqlpp.FunctorExp.SetSetConst)7 Pair (catdata.Pair)6 Triple (catdata.Triple)5 ApplyPath (catdata.fqlpp.TransExp.ApplyPath)5 Path (catdata.fqlpp.cat.Signature.Path)5 Category (catdata.fqlpp.cat.Category)4 FiniteCategory (catdata.fqlpp.cat.FiniteCategory)4 Edge (catdata.fqlpp.cat.Signature.Edge)4 Node (catdata.fqlpp.cat.Signature.Node)4 Chc (catdata.Chc)3 CatExpVisitor (catdata.fqlpp.CatExp.CatExpVisitor)3 Cod (catdata.fqlpp.CatExp.Cod)3 Colim (catdata.fqlpp.CatExp.Colim)3 Dom (catdata.fqlpp.CatExp.Dom)3