Here is Norbert Wiener's ordered pair and the corresponding Cartesian product.

pw =: 4 : 'set (set x pr x) ; < set x pr y'  NB. Wiener's (x,y) = {{x},{x,y}}

cw =: [: set [: , pw&.>/&}:   NB. Cartesian product with Wiener's pairs

    1 pw 'a'    NB. pair (1,'a')  First entry e. singleton {1}, second e. 
{1,'a'}
┌────┬──────┬┐
│┌─┬┐│┌─┬─┬┐││
││1││││1│a││││
│└─┴┘│└─┴─┴┘││
└────┴──────┴┘
    'a' pw 1     NB. pair ('a',1)  First entry e. singleton, second e. pair
┌──────┬────┬┐
│┌─┬─┬┐│┌─┬┐││
││1│a││││a││││
│└─┴─┴┘│└─┴┘││
└──────┴────┴┘
    'a' pw 'a'   NB. pair ('a','a')  As {a,a} = {a} , { {a} , {a,a} } = {a}
┌────┬┐
│┌─┬┐││
││a││││
│└─┴┘││
└────┴┘
    (set 1;2) cw set 'a';'b';'c'
┌──────────────┬──────────────┬──────────────┬──────────────┬──────────────┬──────────────┬┐
│┌────┬──────┬┐│┌────┬──────┬┐│┌────┬──────┬┐│┌────┬──────┬┐│┌────┬──────┬┐│┌────┬──────┬┐││
││┌─┬┐│┌─┬─┬┐││││┌─┬┐│┌─┬─┬┐││││┌─┬┐│┌─┬─┬┐││││┌─┬┐│┌─┬─┬┐││││┌─┬┐│┌─┬─┬┐││││┌─┬┐│┌─┬─┬┐││││
│││1││││1│a│││││││1││││1│b│││││││1││││1│c│││││││2││││2│a│││││││2││││2│b│││││││2││││2│c││││││
││└─┴┘│└─┴─┴┘││││└─┴┘│└─┴─┴┘││││└─┴┘│└─┴─┴┘││││└─┴┘│└─┴─┴┘││││└─┴┘│└─┴─┴┘││││└─┴┘│└─┴─┴┘││││
│└────┴──────┴┘│└────┴──────┴┘│└────┴──────┴┘│└────┴──────┴┘│└────┴──────┴┘│└────┴──────┴┘││
└──────────────┴──────────────┴──────────────┴──────────────┴──────────────┴──────────────┴┘
    (set 'a';'b';'c') cw set 1;2
┌──────────────┬──────────────┬──────────────┬──────────────┬──────────────┬──────────────┬┐
│┌──────┬────┬┐│┌──────┬────┬┐│┌──────┬────┬┐│┌──────┬────┬┐│┌──────┬────┬┐│┌──────┬────┬┐││
││┌─┬─┬┐│┌─┬┐││││┌─┬─┬┐│┌─┬┐││││┌─┬─┬┐│┌─┬┐││││┌─┬─┬┐│┌─┬┐││││┌─┬─┬┐│┌─┬┐││││┌─┬─┬┐│┌─┬┐││││
│││1│a││││a│││││││1│b││││b│││││││1│c││││c│││││││2│a││││a│││││││2│b││││b│││││││2│c││││c││││││
││└─┴─┴┘│└─┴┘││││└─┴─┴┘│└─┴┘││││└─┴─┴┘│└─┴┘││││└─┴─┴┘│└─┴┘││││└─┴─┴┘│└─┴┘││││└─┴─┴┘│└─┴┘││││
│└──────┴────┴┘│└──────┴────┴┘│└──────┴────┴┘│└──────┴────┴┘│└──────┴────┴┘│└──────┴────┴┘││
└──────────────┴──────────────┴──────────────┴──────────────┴──────────────┴──────────────┴┘

Kip Murray


On 10/13/2010 12:27 AM, Kip Murray wrote:
> I believe the following will do for ordered pair and cross product in my 
> model.
>
> pr =: ,&< NB. x pr y is ordered pair (x,y)
>
> cp =: a: ,~ [: , pr&.>/&}: NB. x cp y is Cartesian product of sets x and y
>
> 0 pr 'a'
> ┌─┬─┐
> │0│a│
> └─┴─┘
> (set 0;1) cp set 'a';'b';'c'
> ┌─────┬─────┬─────┬─────┬─────┬─────┬┐
> │┌─┬─┐│┌─┬─┐│┌─┬─┐│┌─┬─┐│┌─┬─┐│┌─┬─┐││
> ││0│a│││0│b│││0│c│││1│a│││1│b│││1│c│││
> │└─┴─┘│└─┴─┘│└─┴─┘│└─┴─┘│└─┴─┘│└─┴─┘││
> └─────┴─────┴─────┴─────┴─────┴─────┴┘
>
> Kip
>
>
> On 10/11/2010 2:26 PM, Markus Schmidt-Gröttrup wrote:
>> I miss a cross product in the implementation.
>> With an unboxed representation I liked to use
>> cross =: [: ,/ ,"_ _1 "_1 _
>>
>>
>> Am 10.10.2010 06:01, schrieb Kip Murray:
>>> Here is my latest attempt to model set theory in J. All sets have distinct
>>> elements and are ordered by /:~ so that match -: determines whether two 
>>> sets are
>>> the same. Sets must be created by the verb set or by provided operations. 
>>> The
>>> intention is theoretical not practical! --Kip Murray
>>>
>>> ]A =: set 0;'b';2 NB. elements 0 'b' 2 are put in boxes preceding the last
>>> ┌─┬─┬─┬┐
>>> │0│2│b││
>>> └─┴─┴─┴┘
>>> ]B =: set 2;'b';'b';0 NB. same elements so same set
>>> ┌─┬─┬─┬┐
>>> │0│2│b││
>>> └─┴─┴─┴┘
>>>
>>> A -: B
>>> 1
>>>
>>> ]C =: set 2;'b';'c';'d'
>>> ┌─┬─┬─┬─┬┐
>>> │2│b│c│d││
>>> └─┴─┴─┴─┴┘
>>>
>>> B sand C NB. intersection, "set and"
>>> ┌─┬─┬┐
>>> │2│b││
>>> └─┴─┴┘
>>> B sor C NB. union
>>> ┌─┬─┬─┬─┬─┬┐
>>> │0│2│b│c│d││
>>> └─┴─┴─┴─┴─┴┘
>>>
>>> (A sand B sor C) -: (A sand B) sor (A sand C) NB. distributive law
>>> 1
>>>
>>> pwrset A NB. A has 3 elements, power set has 2^3, including the empty set
>>> ┌──────┬────────┬────┬──────┬────┬──────┬──┬────┬┐
>>> │┌─┬─┬┐│┌─┬─┬─┬┐│┌─┬┐│┌─┬─┬┐│┌─┬┐│┌─┬─┬┐│┌┐│┌─┬┐││
>>> ││0│2││││0│2│b││││0││││0│b││││2││││2│b│││││││b││││
>>> │└─┴─┴┘│└─┴─┴─┴┘│└─┴┘│└─┴─┴┘│└─┴┘│└─┴─┴┘│└┘│└─┴┘││
>>> └──────┴────────┴────┴──────┴────┴──────┴──┴────┴┘
>>> NB. Elements are contained in boxes preceding the last which is always
>>> NB. the Boxed Empty a: (Ace). The use of a: permits a unique and visible
>>> NB. empty set, viz
>>>
>>> (,a:) -: E =: A less A NB. see verb less below
>>> 1
>>> E
>>> ┌┐
>>> ││
>>> └┘
>>> a:
>>> ┌┐
>>> ││
>>> └┘
>>> E -: a:
>>> 0
>>>
>>> NB. Definitions
>>>
>>> E =: ,a: NB. empty set
>>> set =: a: ,~ [: /:~ ~. NB. create set from boxed list y
>>> NB. each box of y encloses an element
>>> get =: { }: NB. get boxed elements (from curtail because
>>> NB. elements are inside boxes of curtail)
>>> isin =: e. }: NB. Do boxes in list x contain elements of y?
>>> less =: a: ,~ -.&}: NB. remove elements of y from x
>>> sand =: [ less less NB. intersection, "set and"
>>> sor =: a: ,~ [: /:~ [: ~. ,&}: NB. union, "set or"
>>> diff =: less sor less~ NB. symmetric difference
>>> card =: [: # }: NB. count elements: cardinality
>>> issubs =: [ -: sand NB. Is x a subset of y?
>>> pwrset =: a: ,~ [: /:~ ] (<@#~) 1 (,~"1) 2 (#"1~ {:)@#:@i...@^ #...@}:
>>> NB. pwrset by Raul Miller, adapted
>>> islist =: 1 = #...@$ NB. islist through isunique from validate.ijs
>>> isboxed =: 0< L.
>>> issorted =: -: /:~
>>> isunique =: -: ~.
>>> isset =: islist *. isboxed *. (a: -: {:) *. issorted@:}: *. isunique@:}:
>>> NB. isset y asks, is array y a set?
>>> iselement =:<@[ isin ] NB. Is array x an element of set y?
>>>
>>> NB. End
>>>
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
>> __________________________________________________
>> Do You Yahoo!?
>> Sie sind Spam leid? Yahoo! Mail verf�gt �ber einen herausragenden Schutz 
>> gegen
>> Massenmails. http://mail.yahoo.com
>>
>>
>>
>> ----------------------------------------------------------------------
>> 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