abstract sclass AbstractThoughtSpace { AbstractThoughtSpace parent; *() {} *(AbstractThoughtSpace *parent) {} // take unshortened queries abstract L> get(Symbol query); abstract L> get(Symbol query, int position); abstract L getTriples(Symbol query); abstract L getTriples(Symbol query, int position); // existence of triple has already been checked abstract GlobalID postTriple(T3 t); abstract int size(); public bool hasTriple(Symbol a, Symbol b, Symbol c) { for (TripleRef ref : shortestList3(get(a), get(b), get(c))) if (tripleEqic(ref.triple, a, b, c)) true; false; } }