That's an interesting topic. And using obverse to represent a 2-ary
relation is a good idea.

That said, I think (*: :. ((+,-)@%:)) would be the square relation
(assuming I understand what you are getting at)?

Thanks,

-- 
Raul


On Wed, May 14, 2014 at 4:04 PM, Michal Wallace
<[email protected]> wrote:
> I've been reading through the following old papers, written by
> a fellow named Bruce MacLennan during the 1980's:
>
> - Introduction to Relational Programming (Jun 1981)
>   https://archive.org/details/introductiontore00macl
>
> - Overview of relational programming (Nov 1981)
>   https://archive.org/details/overviewofrelati00macl
>
> - A Relational Program for a Syntax Directed Editor (Apr 1982)
>   https://archive.org/details/relationalprogra00macl
>
> - Relational Programming (Sep 1983)
>   https://archive.org/details/relationalprogra83012macl
>
> - Four Relational Programs (Nov 1986)
>   https://archive.org/details/fourrelationalpr00macl
>
>
> Like J, this guy's work appears to have been influenced by both APL
> and FP (the language proposed by John Backus in his "Can programming
> be Liberated from the Von Neumann Style?" talk).
>
> Also like J, the code tends to be quite terse and expressive. For example,
> the syntax directed editor just over 2 pages of typewritten code.
>
> I've been working on porting the syntax directed editor over to J here:
>
>     https://github.com/tangentstorm/drastic/blob/syndir/syndir.ijs
>
> I've also got a handful of relational words defined here:
>
>     https://github.com/tangentstorm/tangentlabs/blob/master/j/rel.ijs
>
> MacLennan's work deals with binary relations, where a relation is
> something like a verb/function that may produce more than one result
> for a given input, and whose inverse is also a relation.
>
> For example, whereas (*:) represents the "square function" in J,
> (*: :. (+,-)@%:) might represent the "square relation".
>
> In addition, a binary relation can be defined by creating an array of shape
> (n, 2).
>
> MacLennan's language is untyped, but allows restricting either side of a
> relation
> by a predicate (which is just a relation mapping objects to boolean
> values), so
> a relational array might actually contain any number of boxed columns.
>
> In my code, I've started to implement relations as objects, thinking I
> could use
> them as a common interface for both the formulaic and tabular varieties.
>
> I've also created some words that allow you to define relations as a normal
> table of values (like you might find in a relational database), plus an
> index
> at which to "split" the table vertically so it can function as a mapping.
>
> For example:
>
> doubles =: (,. +:) i:5 NB. dyadic relation y=2*x, restricted to i:5
> squares =: (,. *:) i:5 NB. dyadic relation y=x^2, restricted to i:5
>
> monad ar [a]pplies a (tabular) [r]elation to an input:
>
>    squares ar 4
> 16
>
> The converse of a tabular relation is just:
> cv =: ( |."_1 ) : ( -@[ |."1 ] )   NB. dydadic case is for n columns + split
>
> monad ac [a]pplies the [c]onverse of a tabular relation.
>
>    squares ac 4
> _2
>  2
>
> Now we can join the two tables on column 0 from each:
>
>    squares 0 0 J doubles
> _5 25 _10
> _4 16  _8
> _3  9  _6
> _2  4  _4
> _1  1  _2
>  0  0   0
>  1  1   2
>  2  4   4
>  3  9   6
>  4 16   8
>  5 25  10
>
> Applying the converse of this result is something like solving the
> following algebra problem:
>
>    NB. Solve for x, given ( 25 = x ^ 2 ) and ( _10 = 2 * x ).
>    2 (squares 0 0 J doubles) ac 25 _10
> _5
>
> Anyway, this is all in the very early stages but I thought maybe someone
> else would find it interesting. The code is all open source under a
> permissive
> license if anyone's interested in collaborating.
>
> (It's also what prompted me to look into JDB.)
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to