eg:

sa: union(|a> + |c> + |d> + |f>, |a> + |b> + |d> + |e>) |a> + |c> + |d> + |f> + |b> + |e> sa: intersection (|a> + |c> + |d> + |f>, |a> + |b> + |d> + |e>) |a> + |d>Simple enough, but what happens when coeffs take values other than 0 or 1?

Well, we need to generalize union and intersection.

One possible generalization is intersection maps to min(a,b) and union to max(a,b), while noting that min(0,1) = 0, and max(0,1) = 1, and hence reproduces the standard definition of intersection and union.

Let's give a couple of very simple examples:

sa: union(3|a>, 10|a>) 10.000|a> sa: intersection(3|a>,10|a>) 3.000|a>Now some (slightly) more interesting examples:

sa: union(3|a> + 2|c> + 0.7|d> + 0|x>,0.9|a> + 7.2|c> + 33.3|e> + |x>) 3.000|a> + 7.200|c> + 0.700|d> + |x> + 33.300|e> sa: intersection(3|a> + 2|c> + 0.7|d> + 0|x>,0.9|a> + 7.2|c> + 33.3|e> + |x>) 0.900|a> + 2.000|c>So, what is the use of intersection and union?

A couple of common examples are:

"what movies do actor x and actor y have in common?"

intersection(movies |actor: x>, movies |actor: y>)

"what friends do Fred and Sam have in common?"

intersection(friends |Fred>, friends |Sam>)

Indeed, common enough that I added in some short-cut notation:

common[movies] (|actor: x> + |actor: y>)

common[friends] (|Fred> + |Sam>)

Here, let me give a quick example:

-- define some knowledge about friends: sa: friends |Fred> => |Alice> + |Barry> + |Bill> + |George> + |Rob> sa: friends |Sam> => |Alice> + |Rob> + |Emma> + |Steve> sa: common[friends] (|Fred> + |Sam>) |Alice> + |Rob>Now a quick observation:

There seems to a recurring pattern between lists in English and superpositions (as we see above with "actor x and actor y" and "Fred and Sam"):

eg:

"x and y" <=> |x> + |y>

"x, y and z" <=> |x> + |y> + |z>

"a, b, c, d and e" <=> |a> + |b> + |c> + |d> + |e>

Indeed, I already have code to map superpositions back to lists:

sa: list-to-words (|apples> + |oranges> + |coffee> + |milk>) |text: apples, oranges, coffee and milk>Though I do not yet have code for English to superpositions (yet), nor the code to handle the coeffs in the superposition. eg, would be nice to have: 3|apples> + 2|oranges> to map to "3 apples and 2 oranges".

Anyway, final comment is to note how close the English is to the BKO:

"what friends do Fred and Sam have in common?"

common[friends] (|Fred> + |Sam>)

Or, more generally:

"what OP do X, Y and Z have in common?"

common[OP] (|X> + |Y> + |Z>)

The plan is to eventually write a parser to map English to BKO, but that is a long way off yet!

Home

previous: different objects identical network structure

next: simple finite sets and soft intersection

updated: 19/12/2016

by Garry Morrison

email: garry -at- semantic-db.org