Lauri Alanko
2004-02-28 16:07:02 UTC
Matemaattinen funktio koostuu lähtöjoukosta, maalijoukosta ja niiden
välisestä relaatiosta, joka täyttää tietyt ehdot. Funktio on siis ikään
kuin "dynaamisesti tyypitetty", ja kuljettaa mukanaan tietoa siitä,
millä alueella se on määritelty.
Tämä tuntuu aika epätavalliselta, sillä yleensähän matemaattiset oliot
ovat ihan vain sellaisinaan. Jos määritellään X:n alijoukko Y, niin Y on
vain joukko, eikä siinä ole mitään lisätietoa "tämä on muuten nyt
tarkoitettu nimenomaan X:n alijoukkona tulkittavaksi". Miksi funktioilla
siis on erityiskohtelu? Tämä tuntuisi paljon yksinkertaisemmalta:
X -> Y = { R | R e P(X×Y) & Ax e X. Ey e Y. Ay' e Y. R(x,y) <=> y = y' }
Nyt jotkin funktion ominaisuudet muuttuvat suhteellisiksi: esim. se,
onko kyseessä osittais- vai kokonaisfunktio, riippuu siitä, mitä
lähtöjoukkoa vasten sitä tutkitaan. Vastaavasti funktion surjektiivisuus
ja injektiivisuus riippuvat annetusta maalijoukosta.
Mutta mitä haittaa tästä olisi? Melkein aina kun funktioita käsitellään,
tiedetään jo muusta kontekstista, mitkä ovat kiinnostavat lähtö- ja
maalijoukot. Ne ovat "staattista tyyppi-informaatiota", niin sanoakseni.
Ja etuna tästä olisi, että ei tarvitsisi tehdä mitään korajoittumia,
maalijoukon pienennyksiä, vain siksi, että saataisiin vaihdettua
funktion "maalijoukkotagi" toiseen. Vaan saadaan ihan suoraan
kovarianssi:
Y \subset Y' => (X -> Y) \subset (X -> Y')
Periaatteessa olisi kiva, jos erityisiä rajoittumiakaan ei tarvitsisi
vaan lähtöjoukolle pätisi kontravarianssi:
X \subset X' => (X' -> Y) \subset (X -> Y)
Tämä tosin taitaa olla aika mahdotonta ainakin tavanomaisin
joukko-opillisin menetelmin (mikä ihme olisi se X P(X×Y):ssä, josta
funktiojoukko komprehensiolla muodostettaisiin?).
Mutta siis. Mikä on ideana näissä funktion mukana kulkevissa joukoissa?
Lauri Alanko
***@iki.fi
välisestä relaatiosta, joka täyttää tietyt ehdot. Funktio on siis ikään
kuin "dynaamisesti tyypitetty", ja kuljettaa mukanaan tietoa siitä,
millä alueella se on määritelty.
Tämä tuntuu aika epätavalliselta, sillä yleensähän matemaattiset oliot
ovat ihan vain sellaisinaan. Jos määritellään X:n alijoukko Y, niin Y on
vain joukko, eikä siinä ole mitään lisätietoa "tämä on muuten nyt
tarkoitettu nimenomaan X:n alijoukkona tulkittavaksi". Miksi funktioilla
siis on erityiskohtelu? Tämä tuntuisi paljon yksinkertaisemmalta:
X -> Y = { R | R e P(X×Y) & Ax e X. Ey e Y. Ay' e Y. R(x,y) <=> y = y' }
Nyt jotkin funktion ominaisuudet muuttuvat suhteellisiksi: esim. se,
onko kyseessä osittais- vai kokonaisfunktio, riippuu siitä, mitä
lähtöjoukkoa vasten sitä tutkitaan. Vastaavasti funktion surjektiivisuus
ja injektiivisuus riippuvat annetusta maalijoukosta.
Mutta mitä haittaa tästä olisi? Melkein aina kun funktioita käsitellään,
tiedetään jo muusta kontekstista, mitkä ovat kiinnostavat lähtö- ja
maalijoukot. Ne ovat "staattista tyyppi-informaatiota", niin sanoakseni.
Ja etuna tästä olisi, että ei tarvitsisi tehdä mitään korajoittumia,
maalijoukon pienennyksiä, vain siksi, että saataisiin vaihdettua
funktion "maalijoukkotagi" toiseen. Vaan saadaan ihan suoraan
kovarianssi:
Y \subset Y' => (X -> Y) \subset (X -> Y')
Periaatteessa olisi kiva, jos erityisiä rajoittumiakaan ei tarvitsisi
vaan lähtöjoukolle pätisi kontravarianssi:
X \subset X' => (X' -> Y) \subset (X -> Y)
Tämä tosin taitaa olla aika mahdotonta ainakin tavanomaisin
joukko-opillisin menetelmin (mikä ihme olisi se X P(X×Y):ssä, josta
funktiojoukko komprehensiolla muodostettaisiin?).
Mutta siis. Mikä on ideana näissä funktion mukana kulkevissa joukoissa?
Lauri Alanko
***@iki.fi