Search in sources :

Example 1 with XSuperED

use of catdata.fpql.XExp.XSuperED in project fql by CategoricalData.

the class XParser method fromSuperSoed.

/*
	J = soed {
		exists f:A->B, g:C->D;
		forall a:A, a.f = p.q, a.g = p.f;
		forall b:B, p = q; 
	} : X -> Y on I
		 */
private static XSuperED fromSuperSoed(Object ooo) {
    org.jparsec.functors.Pair ooo1 = (org.jparsec.functors.Pair) ooo;
    Tuple4 a = (Tuple4) ooo1.a;
    // List<Triple<String, List<String>, String>> es = new LinkedList<>();
    List<SuperFOED> as = new LinkedList<>();
    Map<String, List<String>> dom = new HashMap<>();
    Map<String, String> cod = new HashMap<>();
    List<Tuple5> es0 = (List<Tuple5>) a.b;
    for (Tuple5 t : es0) {
        if (dom.keySet().contains(t.a)) {
            throw new RuntimeException("Duplicate function name " + t.a);
        }
        dom.put((String) t.a, (List<String>) t.c);
        cod.put((String) t.a, (String) t.e);
    }
    List<Tuple4> as0 = (List<Tuple4>) a.d;
    for (Tuple4 t : as0) {
        List<Tuple3> aas = (List<Tuple3>) t.b;
        Map<String, String> aa = new HashMap<>();
        for (Tuple3 xxx : aas) {
            if (aa.containsKey(xxx.a)) {
                throw new RuntimeException("Duplicate var " + xxx.a);
            }
            aa.put((String) xxx.a, (String) xxx.c);
        }
        Tuple3 td = (Tuple3) t.d;
        List<Tuple3> lhss = (List<Tuple3>) td.a;
        List<Tuple3> rhss = (List<Tuple3>) td.c;
        List<Pair<Triple<String, List<List<String>>, List<String>>, Triple<String, List<List<String>>, List<String>>>> cc = new LinkedList<>();
        List<Pair<Triple<String, List<List<String>>, List<String>>, Triple<String, List<List<String>>, List<String>>>> bb = new LinkedList<>();
        for (Tuple3 o : lhss) {
            bb.add(new Pair<>(fromBulb(o.a), fromBulb(o.c)));
        }
        for (Tuple3 o : rhss) {
            cc.add(new Pair<>(fromBulb(o.a), fromBulb(o.c)));
        }
        as.add(new SuperFOED(aa, bb, cc));
    }
    Tuple4 b = (Tuple4) ooo1.b;
    String src = (String) b.b;
    String dst = (String) b.c;
    String i = (String) b.d;
    // es, as, src, dst, i);
    XSuperED ret = new XSuperED(dom, cod, as, src, dst, i);
    return ret;
}
Also used : HashMap(java.util.HashMap) LinkedList(java.util.LinkedList) XSuperED(catdata.fpql.XExp.XSuperED) Tuple4(org.jparsec.functors.Tuple4) Tuple5(org.jparsec.functors.Tuple5) SuperFOED(catdata.fpql.XExp.XSuperED.SuperFOED) Tuple3(org.jparsec.functors.Tuple3) List(java.util.List) LinkedList(java.util.LinkedList) Pair(catdata.Pair) XPair(catdata.fpql.XExp.XPair)

Example 2 with XSuperED

use of catdata.fpql.XExp.XSuperED in project fql by CategoricalData.

the class XChaser method step.

@SuppressWarnings("unused")
private static <C> Triple<Map<String, Set<List<Triple<C, C, List<C>>>>>, Map<Pair<String, List<Triple<C, C, List<C>>>>, Object>, Set> step(XSuperED ED, XCtx<C> S, XCtx T, XCtx<C> I, Map<String, Set<List<Triple<C, C, List<C>>>>> dom, Map<Pair<String, List<Triple<C, C, List<C>>>>, Object> gens, Set eqs) {
    for (SuperFOED ed : ED.as) {
        List<LinkedHashMap<C, Triple<C, C, List<C>>>> vals = allVals((Map<C, C>) ed.a, I);
        for (LinkedHashMap<C, Triple<C, C, List<C>>> val : vals) {
            // lhs_substed = substLhs(ed.lhs, val);
            for (Pair<Triple<String, List<List<String>>, List<String>>, Triple<String, List<List<String>>, List<String>>> rhs : ed.rhs) {
                Pair<Triple<String, List<List<String>>, List<String>>, Triple<String, List<List<String>>, List<String>>> rhs_substed = new Pair<>(substLhs0(rhs.first, val), substLhs0(rhs.second, val));
                if (triggers(ed.lhs, rhs, val, I, gens, dom)) {
                    if (rhs.first.first != null) {
                        Set<List<Triple<C, C, List<C>>>> set = dom.get(rhs.first.first);
                        List<List<C>> toadd = (List<List<C>>) ((Object) rhs_substed.first.second);
                        List<Triple<C, C, List<C>>> toadd2 = toadd.stream().map(x -> new Triple<>(I.type(x).first, I.type(x).second, x)).collect(Collectors.toList());
                        // to trigger, the rhs wasn't already there
                        set.add(toadd2);
                        gens.put(new Pair<>(rhs.first.first, toadd2), new Pair<>(rhs.first.first, toadd2));
                    }
                    if (rhs.second.first != null) {
                        Set<List<Triple<C, C, List<C>>>> set = dom.get(rhs.second.first);
                        List<List<C>> toadd = (List<List<C>>) ((Object) rhs_substed.second.second);
                        List<Triple<C, C, List<C>>> toadd2 = toadd.stream().map(x -> new Triple<>(I.type(x).first, I.type(x).second, x)).collect(Collectors.toList());
                        // to trigger, the rhs wasn't already there
                        set.add(toadd2);
                        gens.put(new Pair<>(rhs.second.first, toadd2), new Pair<>(rhs.second.first, toadd2));
                    }
                    eqs.add(new Pair(massage(rhs_substed.first, I), massage(rhs_substed.second, I)));
                // if (rhs.first.first != null && rhs.second.first != null) {
                // }
                // : equate in gens map
                } else {
                }
            }
        }
    }
    return new Triple<>(dom, gens, eqs);
}
Also used : XSuperED(catdata.fpql.XExp.XSuperED) Set(java.util.Set) HashMap(java.util.HashMap) Collectors(java.util.stream.Collectors) FinSet(catdata.fqlpp.cat.FinSet) HashSet(java.util.HashSet) LinkedHashMap(java.util.LinkedHashMap) List(java.util.List) Map(java.util.Map) Triple(catdata.Triple) LinkedList(java.util.LinkedList) SuperFOED(catdata.fpql.XExp.XSuperED.SuperFOED) Pair(catdata.Pair) LinkedHashMap(java.util.LinkedHashMap) Triple(catdata.Triple) SuperFOED(catdata.fpql.XExp.XSuperED.SuperFOED) List(java.util.List) LinkedList(java.util.LinkedList) Pair(catdata.Pair)

Aggregations

Pair (catdata.Pair)2 XSuperED (catdata.fpql.XExp.XSuperED)2 SuperFOED (catdata.fpql.XExp.XSuperED.SuperFOED)2 HashMap (java.util.HashMap)2 LinkedList (java.util.LinkedList)2 List (java.util.List)2 Triple (catdata.Triple)1 XPair (catdata.fpql.XExp.XPair)1 FinSet (catdata.fqlpp.cat.FinSet)1 HashSet (java.util.HashSet)1 LinkedHashMap (java.util.LinkedHashMap)1 Map (java.util.Map)1 Set (java.util.Set)1 Collectors (java.util.stream.Collectors)1 Tuple3 (org.jparsec.functors.Tuple3)1 Tuple4 (org.jparsec.functors.Tuple4)1 Tuple5 (org.jparsec.functors.Tuple5)1