Well I was about to delete my message when I saw yours.
In fact the system as it is now (still multiple inheritance) has nodes like this:
blankNode() {
return {
"@id": this.fresh("Node"),
"@path": ["global"],
"@date": Date.now(),
"@doc": "https://aidreams.co.uk",
"@out": {
"@isa": new Set(),
"@gen": new Set()
},
"@in": {
"@isa": new Set(),
"@gen": new Set()
},
}
}
Yeah the default documentation URL is our forum
The @out are normal / forward links. This is where the tail of the arrows are. The @in are backward links, from the pointed node back to the pointer node. This is where the arrow heads are connected. @in-links are automatically set when @out-links are set. @isa and @gen are just specific cases of links (with @-names), but they are otherwise handled just the same as any other link that would be added to these ports. Indeed, the @out and @in ports are designed to host other kinds of links, like the ones you mention (has-part / part-of, ...etc).
The key to pattern learning is the concept of wildcard. The pattern is a structure which is constant but incomplete. Generalizations take the form of decorated constants (wildcards), for example "instance of house", where "instance of" is the decorator, and "house" is a constant. It corresponds to undefinite articles in natural languages. I know you know all this, but I'm getting to the point.
Having several of these constants to decorate (house) is a pain in the hash, because either you take all of them as a whole, but then your pattern learning is weak (too narrow), or you start learning combinations of them, and then you suffer from explosion.
A woman, who is a human being, a wife, a mother, an entrepreneur, a novel author, ...etc, risks her life to save a child. When you learn this pattern, what do you take into account? all of what she is? only some of them? which ones? why?
This is a poor real-life-like example. But my program should work only on programs, so it won't have to deal with all of these fuzzy things that make our lives interesting.
Still the question remains. Even in a mathematical, symbolic, virtual universe, if you take a lot of characteristics, your pattern won't match many cases. You cannot choose only some of them (because what criteria?). Then the last option is to learn all combinations. Boom, combinatorial explosion.
The answer is probably that the choice of criteria (the selection of the features to include in the pattern) should be a decision of the system.