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!
No comments:
Post a Comment