Introduce arbitrary union atom type
ngeiswei opened this issue · 7 comments
Proposal
It would be convenient to have a link for the following
https://en.wikipedia.org/wiki/Union_(set_theory)#Arbitrary_unions
I suggest to call it
UnionLink
I like the compactness of it, however it could be mistaken for an OrLink
, so maybe another name such as
ArbitraryUnionLink
ConceptUnionLink
ClassUnionLink
SetUnionLink
CountableUnionLink
FlattenLink
FlattenUnionLink
would be better (@bgoertzel, @linas or others let me know what you think).
The other alternative is to not introduce anything and instead formulate such union with a SatisfyingSetScopeLink
, but I think it's rather cumbersome.
Motivation
Intensional reasoning relies on an ontology of concepts and their subset relationships. However sometimes concepts themselves have properties, i.e. be members of other classes, and we need a way to bring these meta-properties to the mesa-level.
For instance given an ontology of concepts C1, ..., Cn, and some meta-property M, such that some Ci, ..., Ck are a members of M
(Member Ci M)
...
(Member Ck M)
We'd like to bring the meta-property M into the ontology as a pattern to consider for intensional reasoning. One way to do that is to flatten M, with the following
(UnionLink M)
then we can write
(Subset C1 (UnionLink M))
Remark
It is expected such flattening would be especially useful if the meta-property is Soggy https://wiki.opencog.org/w/Soggy_Predicates as otherwise it might lose information when transferred to the mesa-level. Think for instance of a meta-property such as "even cardinality" which could encompass the whole mesa-universe and thus lose all information once flattened.
PS Remark
This issue is making me wonder whether the notion of membership is desirable at all. Maybe one can substitute membership for atomic inheritance, i.e. a concept that can no longer be divided. That's consistent with the definition of a probability measure.
Currently commented out in the atomspace types file is this:
// Measure-theoretic (probabilistic) versions of AND_LINK, OR_LINK
// These use probabilistic formulas to compute truth values.
// UNION_LINK <- OR_LINK
// INTERSECTION_LINK <- AND_LINK
Its commented out because no one actually wanted them before.
The inheritance hierarchy follows from work by Kolmogorov and others on probability and boolean algebra: First, that measure theory is exactly the same thing as probability theory, the only difference is notation, so we can use sets for anything we measure or integrate. Second, from Stone's representation theorem, we know that boolean and/or/not can always be represented as set-intersection/union/complement.
But you are not asking for this, you are asking specifically for "arbitrary union", and so yes, a better name would be ArbitraryUnion
or FlattenUnion
I like "flatten" because its "obvious" to programmers, vs "arbitrary" is "huh? wtf? study wikipedia for a while" which makes it a bad name.
p.s. I did not understand the "motivation" section, probably because I did not think very hard about it. Why can't you just write (Subset C1 M)
why do you need (Subset C1 (UnionLink M))
? I mean, M
is already a set (since it has members) even if its not a SetLink ...
I mean M
has to be a set-of-sets, if it is to be flattened. Is M
a set-of-sets?
Yes, M
is a set of set.
That's because it is produced from turning an n-ary relationship over concepts into properties, like
(Evaluation
P
(Link C1 C2))
|-
(Member
C1
(SatisfyingSetScope
X
(Evaluation
P
(Link
X
C2)))
That is C1
belongs the class of concepts that relate to C2
via P
.
So cool we have a property over C1
, but what we want for defining the intensional links (inheritance, similarity, etc) is to have subset relationships, not memberships (Why? Cause that's how it's defined in the PLN book, there might be other ways, even though the current one feels natural).
ArbitraryUnion
or FlattenUnion
sounds good to me.
Obviously another option is to avoid meta-properties to begin with... In the context of the bio-atomspace it would mean turning GO-plus relationships like "regulate" to work over genes rather than GO categories (only one side of the relationship needs to be flattened actually).
Anyway, it's clearer and clearer to me that the notion of membership is only used here as atomic concept. We could probably simplify the notations by assuming that from the get go.
Well, don't forget about https://wiki.opencog.org/w/EquivalenceLink so you can say
(Equivalence (Concept "S") (SatisfyingSet ...))
that wiki page has detailed worked examples.
I still don't understand how C1 C2 and M relate. In your example, the SatsifyingSet seems to be an ordinary set, not a set-of-sets ...
Well, don't forget about https://wiki.opencog.org/w/EquivalenceLink so you can say
(Equivalence (Concept "S") (SatisfyingSet ...))
Actually, to be consistent with PLN semantics it would be
(Similarity (Concept "S") (SatisfyingSet ...))
Equivalence
is for predicates while Similarity
is for concepts.
But I was more thinking of replacing SatisfyingSetScope
with higher order constructs like currying, etc, for instance the following
(SatisfyingSet
(2ndCurryEvaluation
P
C2))
would be equivalent to
(SatisfyingSetScope
X
(Evaluation
P
(Link
X
C2))
where 2ndCurryEvaluation
would take P
, partially evaluate it with C1
as second argument, and return the partially evaluated unary predicate.
I still don't understand how C1 C2 and M relate. In your example, the
SatisfyingSet
seems to be an ordinary set, not a set-of-sets ...
It is a set-of-sets because C1
and C2
are sets (since they are concepts).