Sunday, September 23, 2012

Extensional functions

When a function is defined extensionally, the partition that function induces on its domain (the kernel of the function) can be explicitly specified. For example, the partition that the or function induces is:
#{#{[false false]}
  #{[false true]
    [true false]
    [true true]}}
In order to use the kernel in the implementation of the function, we need some way to select preferred elements of each equivalence class. In this case, we can use the natural ordering as a selector. Finally, we need a injective part that reversibly modifies arguments:
{[false false] false
 [true true] true}
These components combined together can be used to define the and function or any other extensional function. On the other hand, explicitly defining the kernel of an intensional function causes problems under function composition.


  1. Why do you need to select preferred members of each equivilance class?
    Couldn't you say: the first equivilance class is called false for this function and the second is called true?

    Or is the point to have functions that give reasonable answers when reversed?

    1. The selection process is advantageous because if the implementing machine is sentient in can automatically be made to fit the machine's current preferences (see my recent post on artificial sentience) and as you already mentioned, this can be used to produce reasonable values upon inversion.