perjantai 30. huhtikuuta 2010

Rivien välistä

Kaikki ei-triviaalit reaalimaailman ongelmat ovat niin monimutkaisia, ettei aukoton looginen argumentaatio ole mahdollista ilman yksinkertaistavia oletuksia tai epätyydyttäviä johtopäätöksiä ja vastakkaisia kantoja voidaan perustella pintatasolla loputtomiin (lisäksi pitää vielä ainakin erottaa asiaväittelyt arvokysymyksistä, joista ei kannata tiettyä pistettä enempää väitellä). Sisäinen mallimme, intuitiomme, johon vilpittömässä asiaväittelyssä perustamme näkökantamme argumenttiin, on rikkaampi kuin mitä pystymme kieleksi nopeasti projisoimaan ja lisäksi kommunikaatiossa on aina väärinymmärryksen vaara, koska mallit ovat erilaisia erityisesti toisiaan tuntemattomilla väittelijöillä. Ihmiset osaavat ottaa tämän huomioon puheessa ja muuttavat puheen sisältöä riippuen oletuksista kuulijan sisäisestä tilasta. Esimerkiksi tyypillisesti toisen mallin oletetaan kumuloituvat puheen ohjelmoimana ja samoja asiasisältöjä ei toisteta samalle kuulijalle, vaan välitetään delta-paketteja jo kerrotun kontekstin päälle. Mitä epätodennäköisemmäksi väite oletetaan, ts. mitä enemmän väitteen ajatellaan sisältävän informaatiota kuulijalle, sitä enemmän sitä tulisi korostaa esimerkiksi liioittelemalla, mikä toimii eräänlaisena virheenkorjausprotokollana puheessa sillä liioittelu vahingossa olisi epätodennäköistä. Parhaimmillaan väite tekee ilmeiseksi jonkun ristiriidan vastapuolen mallin perusrakenteissa, mikä lopulta saa virheellisen käsityksen sulamaan kuin itsestään (jos toinen on valmis vastaanottamaan). Tietenkin tämä oletettu yllättävyys on jatkumo erilaisia väitteitä trivialiteeteista shokkiuutisiin (ja yllättävyys on toki vain yksi kriteeri sanottavan valinnalle, muita ovat mm. oletettu relevanssi ja impakti, tyyli, tunteiden signalointi jne.). Tehokasta kielenkäyttöä voisikin tässä leikkisästi verrata eräänlaiseksi bezier-käyrän ohjauspisteiden valinnaksi, joka pitää viedä hieman överiksi, jotta saisi pienen kosketuspinnan toisen sisäiseen malliin (jonkun tutkimuksen mukaan ihmiset tunnistavat kasvot nopeammin karikatyyripiirroksesta kuin valokuvasta, mikä saattaa liittyä tähän) - joka tapauksessa kyse ei ole vain robottimaisesta tosien asiaväitteiden listaamisesta ja toimiva keskustelu vaatii hyväntahtoista tulkintaa (ehkä jonkinlainen mahdollisten vastausten ennakointi ja keskustelun pelipuun alitajuinen läpikäynti kuvaisi vielä paremmin sitä dynamiikkaa, josta lopullinen ääneen lausuttu puhe on vain jäävuoren huippu). Aidon, asiantilojen ymmärtämiseen pyrkivän argumentaation pohjimmainen tarkoitus onkin horjuttaa toisen tai oma intuitio mahdollisimman vähällä puheella eikä logiikan koreografian kankea suoritus tai pelkkään voittoon pyrkivä halpahintainen lakimiesretoriikka, joka on aina biasoitunut helposti selitettäviin näkökulmiin.

(Marx Brothers Mirror Scene)


Lisähuomioita kirjoituksen herättämän keskustelun pohjalta:

Tarkoitin tuossa sitä, että luonnollinen kieli ja logiikka elävät mielessä hyvin korkeilla abstraktiotasoilla eivätkä vastaa edes suurelta osin tiedostamattoman intuitiomme kompleksisuutta saati reaalimaailmaa. Ajattelen tuota tietoista osaa toiminnastamme vain eräänlaisena jäävuoren huippuna: esimerkiksi näkökenttämme näyttää juohevalta 2d/3d-avaruudelta emmekä ole lainkaan tietoisia siitä koneistosta, joka aivoissa luo tuon metriikan - eivät aivot itsestään tiedä esim. että tietyn sauvasolun signaali on toisen vieressä vaan jo tuo järjestys vaatii merkittävää prosessointia ennen kuin päästään tietoiselle tasolle. Vastaavasti emme ole suoraan tietoisia siitä prosessista, joka lopulta tuottaa puhetta jne. Eli looginen päättely tasolla "kaikki paloautot ovat punaisia" on niin yksinkertaista, että tiedämme jo intuitiivisestikin, ettei se voi vastata sisäistä malliamme saatika reaalimaailmaa. Sisäinen mallimme ei myöskään ole mitenkään siististi järjestetty ja se on subjektiivinen. Sitä olisi vaikea käsitteellistää sellaisilla esteettisillä kriteereillä, joita liitämme usein matematiikkaan. Jos kysytään, miten vaikka määrittelisi käsitteen "talo", voisi ruveta luettelemaan kaikenlaisia ehtoja "talossa on ovi" jne., mutta ei näistä tule ikinä täsmällistä ja tyydyttävää kielen tasolla olevaa formulointia, sillä se olisi liian monimutkainen hallittavaksi (talo on sentään vielä ihmisen rakentama artefakti, joista osaan voidaan esittää hyviä määrittelyitä.. esimerkiksi "pankkitili" on tarpeeksi abstrakti käsite, jotta se on helppo toteuttaa esimerkiksi tietokoneohjelmana, mutta ongelmiin törmätään erityisesti, kun käsitteellä on jonkinlainen rajapinta todellisuuteen).

Duaalisuus näkyy tässä siten, että voimme puhua noista eksistentiaalikvantifioiduista malleista kielelle/coalgebroista/aisti-lihasrajapinnasta maailmaan (ulkomaailmaan viittava kieli saa ikään kuin greatest fixed point-semantiikan rekursiiviselle tyypille, eksistentiaalikvantifiointia voi intuitiivisesti ajatella mallin/informaation "piilottamisena") ja kun piilotamme maailman tilan, on sekä sisäinen mallimme että kielen tasolla olevat formuloinnit "liian vahvoja oletuksia" todellisuudesta ja näin voimme sitten tehdä näillä yksinkertaistuksilla jotain intuition tai kielen tasoilla. Tuo käsite "talo" on hyvä esimerkki tästä: se, että emme pysty hahmottamaan jokaista atomia fyysisessä talossa, on esimerkki abstraktiosta intuitiomme tasolla ja se, että emme pysty kielellisesti määrittelemään intuitiotamme talosta, on abstraktiosuhde kielestä (nuo malliteorian mallit kielelle eivät siis vastaa sitä alla olevaa todellisuutta, joka vuotaa abstraktiosta) sisäiseen malliimme, jonka voi todennäköisesti ajatella sisältävän jonkinlaisen kompleksisen funktion, joka palauttaa "tosi", kun kutsuisimme jotain fyysistä rakennelmaa taloksi ja "epätosi" muussa tapauksessa. 


Jos tarkastelemme taas toista ääripäätä eli sitä, että käytämme "liian heikkoja oletuksia" ja kuljetamme argumenttia mahdollisimman pitkälle kielen tasolla, saamme eräänlaisen algebran, jonka kaikkia seurauksia emme pysty ymmärtämään. Fysiikan lakien formulointi on hyvä esimerkki tällaisen mallin rajallisuudesta: Voimme kenties matemaattisella kaavalla kuvata tarkkaan, kuinka yksittäinen hiukkanen liikkuu tyhjiössä ja tässä ei välttämättä siis ole enää tuota "input abstraktiota" vaan se todella sisältää kaiken informaation fyysisen hiukkasen toiminnasta niiden muuttujien, joita voimme mitata, osalta. Ongelmaksi tässä tulee se, että emme käytännössä tee mitään tällaisella teorialla, koska olisi aivan liian työlästä yrittää esimerkiksi selittää fysiikan laeista lähtien, miksi vappuna juodaan simaa ja tätä tarkoitin noilla "epätyydyttävillä johtopäätöksillä".

Aivot ovat lopulta varsin joustavat näissä ja käytämme intuitiossamme juohevasti monentasoisia "sumeita" abstraktioita yhtä aikaa ja pystymme rakentamaan kokonaisuuksia yksittäisistä ja erillisistä aspekteista/propositioista/yhteyksistä, joita sitten kielellä on niin helppo esittää. Logiikka/matematiikka ovat toki hyödyllisiä systeemejä ja erityisesti ne mahdollistavat oletusten eksplikoinnin ja terävän reunan piirtämisen täsmällisen päättelyn ja "ulkopuolen" välille ja mallin asteittaisen tarkentamisen/laajentamisen erillisinä saarekkeina kuten yllä esitit. Tarkoitukseni oli tässä kirjoituksessa lähinnä luonnehtia reaalimaailman ja intuitiomme monimutkaisuutta suhteessa tiukan loogiseen argumentaatioon.

 

2. kommentti:

Tarkoitin tuolla talo-esimerkillä sitä, että aivojemme mekanismi (intuitio) tietää lähes välittömästi, mitä kutsumme taloksi tai missä yhteyksissä sitä on validia käyttää ja tämän toiminnallisuuden toteuttaminen tarvitsee merkittävää koneistoa, josta emme ole tietoisia. Tämä koneisto on niin monimutkainen/sotkuinen (ja reaalimaailma vielä monimutkaisempi), ettemme mitenkään voi käsitellä niitä kielen tasolla ilman merkittävää abstraktiota: meillä on vain osoitin "talo" noihin rakenteisiin ja keskustelua tuottavia rutiineja jne.

Formaali looginen päättely edellyttäisi joukkoa eksplisiittisiä oletuksia kielen tasolla tyyliin "kaikissa taloissa on ovi" ja "ovesta voi mennä sisään", josta voimme sitten päätellä "kaikkiin taloihin voi mennä sisään" jne. Halusin vain yllä ilmaista tällaisen "aukottoman päättelyn" äärimmäisen rajallisuuden todellisuuden ymmärtämisessä, sillä nämä oletukset ovat aina aivan liian vahvoja (kun ei puhuta fysiikasta tms.). Esimerkiksi jostain talosta voi puuttua katto, joten onko oikein puhua sisäpuolesta tai jostain, mitä kutsumme taloksi, voikin sitten puuttua ovi jne. Jos valitsemme joukon oletuksia, vastaa näitä sitten erilaiset mallit, joista formaali päättelymme puhuu, mutta nämä mallit eivät vastaa todellisuutta.

En siis kritisoi tässä argumentoinnin hyödyllisyyttä ylipäätään enkä edes väitä, että kukaan oikeasti yrittäisi normaalissa keskustelussa noudattaa tuollaisia matemaattisia askeleita joka kohdassa varmoista lähtökohdista (silloin täytyisi käytännössä pysyä hiljaa :) ), vaan ainoastaan haluan sanoa, että logiikka on vain yksi työkalu normaalissa argumentaatiossa (toisin kuin matematiikassa) ja sen tarkoitus kielenkäytössä on enemmänkin yrittää vaikuttaa toisen intuitioon kuin esittää matemaattinen todistus. Siinä olet toki oikeassa, että jos pystyy osoittamaan ristiriidan toisen mallissa tai päättelyssä, voi tämä nopeasti tuhota osia tästä mallista ja tässä mielessä logiikalla on keskeinen rooli väittelyssä.

 

3. kommentti:

Ehkä lievä näkemysero on kulttuurin merkityksessä suhteessa aivojen biologisiin mekanismeihin, joille laitan hieman enemmän painoa. Biologinen koneisto siellä taustalla sitten vielä jakautuu geeneihin koodattuihin rutiineihin/kypsymiseen vastakohtana oppimiselle, josta siitäkin osa on ei-kulttuurillista hahmontunnistusta ja toimintaohjeita - ajattele esim. vastasyntynyt tunnistaa silmät näkökentästä, ja osa on sitten puhtaasti kulttuurin ohjelmoitumaa. Kieli on sitten vain osa kulttuuria, jolla voi abstraktisti välittää noita uusia rakenteita aivoihin esim. asioista, jotka eivät ole juuri läsnä tai ovata abstrakteja. Oma näkemykseni on, että nuo kielen välittämät ohjelmat "suodattuvat" monimutkaisen tulkintakoneiston läpi ennen kuin ne integroidaan osaksi intuitiota ja esimerkiksi eri ihmiset vovat hahmottaa samoja asioita aivan eri tavalla riippuen oppimishistoriasta (katso esim. video "Feynman 'Fun to Imagine' 11: Ways of Thinking (Part One of Two) "). Paljon toiminnastamme on myös kypsymisreaktiota kuten vaikkapa kävely (, joka vaatii avaruudellista hahmottamista), esimerkiksi monet muut nisäkkäät osaavat pomppia metsässä suoraan kohdusta tulon jälkeen. Ajattelen siis tuota kulttuurinkin oppimista eräänlaiseksi "osmoosiksi", jossa läsnäolevat kielen patternit tunnistetaan, rinnastetaan sisäiseen malliin ja mahdollisesti luodaan uusia yhteyksiä. Ihminen oppii myös ilman interaktiota muiden kanssa pohdiskellessaan yksin asioita tai vaikkapa herätessään unesta oivaltaa jonkun jutun. Kulttuuri ja biologia sisältävät vielä korkeamman kertaluvun patterneja, jotka tekevät asiasta entistä mutkikkaamman. Esimerkiksi, jos minulle on opetettu lapsena "kirjoja lukemalla oppii" ja omaksun tämän toimintamallin, niin se mitä varsinaisesti sitten opin noista kirjoista ei liity enää tuohon alkuperäiseen toimintaohjeeseen, joka jättää parametriksi, mitä kirjoja pitäisi lukea. Tai se, että pelaan 1000 go-peliä ja opin hahmottamaan hyviä muotoja tai pyörittelen mielessäni kappaleita ja opin avaruudellista hahmotusta. Tikanheittäjä ei opi tikanheiton teoriasta, kuinka tikka heitetään tauluun :)


(Beethoven - Egmont Overture)
 

tiistai 27. huhtikuuta 2010

Go on arvoitusten peli: Jos haluat hyökätä, pelaa kauaksi vastustajan kivistä. Jos haluat puolustaa, pelaa kiinni. Pelin tarkoitus on ympäröidä aluetta, mutta jos yrittää ympäröidä sitä suoraan, sitä ei lopulta saa. Samaan tapaan kuin kolmiloikkaaja ei ensimmäisellä loikalla tee pisintä hyppyä, gossa pitää kiiruhtaa hitaasti. Kuten Kageyama opettaa, palaa aina perusasioihin.


(AC/DC- it's a long way to the top if you wanna rock and roll)


Lisäys:

Jännää tässä on se, kuinka gon muotojen "logiikka" on niin erilaista kuin ne käsitteellistykset joihin olemme tottuneet muussa elämässä/kielessä ja tästä syystä strategiset periaatteet vaikuttavat epäintuitiivisilta aloittelijasta. Toisaalta sitten esimerkiksi hyvät muodot usein sisältävät toisensa osina - ajattele esim. nakade-muotoja. Sellaisista abstraktioista kuin vaikutusvalta on hyötyä kokeneelle pelaajalle ja kaikki pitkään pelanneet tietävät ilmiön, että lauta näyttää aivan erilaiselta eri kehitystasoilla, kun aivot oppivat nämä peliin sopivat abstraktiot ja suodattavat kokemuksemme niiden läpi. Omia aloittelijana pelattuja pelejä saattaa olla vaikea muistaa ja jälkikäteen ne näyttävät kuin toisen persoonan pelaamilta.

Mielenkiintoinen käsitepari on myös strategia vs. taktiikka. Tuskinpa näillekään pystyy antamaan mitään täsmällistä semantiikkaa, mutta yksi virheiden jaottelu tuntuisi liittyvän käsiterakennelman/abstraktioiden laatuun/määrään ja kriteereihin vastakohtana ajatusprosessien kuten sekvenssien lukeminen tai pisteidenlasku virheille ("käännösaikainen" vs. ajonaikainen virhe?). Toinen dimensio, joka korreloi edellisen kanssa, on jaottelu (laudalla ja ajassa) lokaaleihin ja globaaleihin virheisiin. Myös virheiden absoluuttisen koon (olettaen, että meillä olisi resursseja evaluoida peli loppuun asti) jakauman muodosta voisi lähteä liikkeelle: gossa globaalit virheet näkyvät usein siten, että menettää vähän pisteitä, mutta usein, kun taas yksinkertainen semeain laskeminen väärin voi merkitä yksittäistä isoa menetystä.

sunnuntai 25. huhtikuuta 2010

A Serious Man - 4.5/5 tähteä

Coen-veljesten viime vuoden elokuva jatkaa samalla vakavalla linjalla kuin "No country for old men" ja onkin huomattavasti parempi kuin epäonnistunut välityö "Burn after reading". Päähenkilönä fysiikan professori Larry Gopnik, joka opettaa päivätöikseen kvanttimekaniikan satunnaisuutta ja samalla ympäröivä maailma kaatuu hänen päälleen vailla merkitystä. Tukipilareiksi todellisuuden sekasortoon tarjotaan matematiikan kaavoja, modernia yhteiskuntaa lakimiehineen ja pitkää juutalaista perinnettä ja elokuvan avainkohtauksessa tehdään selväksi ohjaajien näkökulma näiden tärkeysjärjestykseen.

Taidanpa mennä vielä hieman yöhön kävelemään, katselemaan tähtitaivasta ja makustelemaan leffan jälkiajatuksia..

..Itse asiassa koko leffa oli eräänlainen versio Schrödingerin kissan ongelmasta - nerokasta! Tulee mieleen hieman Altmanin "The Player", joka on taas elokuvamuodossa valehtelijan paradoksi. Fysiikasta/matematiikasta saa hyviä leffoja :)


(A Serious Man - Official Trailer)
 

Kommentti:

Siitä pudotin puoli tähteä, ettei tuo muodoltaan ollut aivan samalla tasolla kuin idea. Jatkuvana teemana oli siis eräänlainen epämääräisyys ja sitä korostettiin, että Gopnik ei "ollut tehnyt mitään". Bar mizvah-kohtauksessa Danny tekee valintansa ja perheen ongelmat ikään kuin korjaantuvat epämääräisyyden tilasta. Larry sitten "avaa oman Schrödingerin laatikkonsa" lopussa pettämällä periaatteensa. Tietenkään analogia ei ole tarkka fyysikon näkökulmasta, mutta kyllä se omalla tavallaan ihan hyvin oli ilmaistu elokuvassa eli jumala ei näille tee itseään tietoiseksi ennen kuin testaa asiaa jollain moraalisella päätöksellä - tarinahan oli siis moderni versio Jobin kirjasta. Toinen näkökulma tulee sitten sitä kautta, että lakimiehen lasku aiheutti vain lisää ongelmia eikä varsinaisesti korjannut mitään (modernin yhteiskunnan kritiikki ja sen epäyhteensopivuus "lauman" kokoisten yhteisöjen kanssa - tätä teemaa on käsitelty mm. elokuvissa Kellopeliappelsiini ja Rankka päivä lisää), kun taas historiassa hioutunut bar mizvah-perinne symbolisella tasolla sai "kaiken toimimaan".

sunnuntai 18. huhtikuuta 2010

En sure kanssasi vaan nauran sinulle

Huumorilla on aina kohde, vaikkakin se voi olla abstrakti, mutta tunteiden analysointi vie niiltä tehoja samaan tapaan kuin Arvi Lind laitettaisiin selostamaan taustaäänenä Titanic-elokuvan loppuhuipennukseen, mitä siinä tapahtuu. Mahdollisesti fokuksemme ei pysty kunnolla käsittelemään yhtä aikaa useita, erityisesti ristiriitaisia signaaleja. Tunteisiin, jotka ilmenevät myös ulkoisessa käyttäytymisessä kuten nauru ja itku, on helppo kuvitella kommunikointiin liittyviä evoluutiollisia selityksiä. Jos ajatellaan, että itkun tarkoitus on lähinnä ilmaista omaa huonoa tilaa muille, on se tässä mielessä 0-paikkainen tunne siinä kun nauru on 1-paikkainen, sillä kohde on sen parametri, jolla esim. viestitään sisäryhmälle ulkoryhmän rajoja tai osoitetaan epätoivottavia tapoja. Olen ollut havaitsevinani, että ihmisillä olisi suurempi hajonta maussa komediaelokuvien kuin draaman suhteen, mille edellinen spekulointi olisi osuva selitys, koska huumori olisi kulttuurisidonnaisempi kuin suru.


(Dracula: Dead and Loving it - Fushta!!)

perjantai 16. huhtikuuta 2010

Vasen, vasen, vasen kaks kolme!

Solut muodostavat yksilön yksistä rakennuspiirrustuksista, mutta yksilöt ottavat rooleja strategisina toimijoina erilaisissa suuremmissa tilanteita rajaavissa säännönmukaisuuksissa jossain ympäristöissä ja osaa näistä tilanteista kutsutaan yhteisöiksi. Meillä voi esimerkiksi olla sosiaalinen rutiini, jolla asioimme vaikkapa kaupan kassan kanssa rooleissa "asiakas" ja "myyjä", mutta tämä on kenties liian väliaikainen "sosiaalinen hahmo", jotta se oikeuttaisi yhteisön nimilappuun. Peliteoria tutkii matemaattisilla välineillä sitä mutkikasta dynamiikkaa, joka liittyy näiden organisaatioiden muodostumiseen eri lähtökohdista. Peliteoria formaalina järjestelmänä on toki vain epäsuorasti yhteydessä reaalimaailman ilmiöihin, jotka tapahtuvat avoimessa systeemissä (tulokset riippuvat siitä, kuinka hyvin pelin formulointi vastaa maailmaa ja kuten jo aikaisemmista pohdiskeluista tiedämme, mitään "lopullista tarkkaa totuutta" ei kannata hakea avoimista systeemeistä yleisessä tilanteessa, ainoastaan mielenkiintoisia suhteellisia yhteyksiä).

Vangin dilemma, joka esiintyy useissa peleissä, tarkoittaa tilannetta, jossa Nash-tasapaino ei ole edes pareto-optimi puhumattakaan jostain yleisen hyvinvoinnin maksimoinnista eli toisin sanoen rationaalinen yksilöiden toiminta ei johda hyvään lopputulokseen näiden kannalta. (Kulttuuri-)evoluutio onkin tuottanut kaikenlaisia yksilöiden joillekin tavoitteille vastaisia kontrollimekanismeja ja moraalisia piirejä, jotka pystyttävät rangan tällaisia organisaatioita varten kuten mahdollisesti osittain häpeä, moraali, viha/kosto, tavat, merkit ja meemiklusterit, uskonnot, verot, lait jne., jotta vangin dilemma purkautuisi (ehkäpä sellaista henkilöä, jolle yhteisöön kuuluminen laskee utiliteettia siihen vertailukohtaan, että ko. kontrollimekanismia ei olisi, voisi kutsua jonkinlaiseksi "systeemin orjaksi"? ..reaalimaailmaan liittyvistä asioista on vaikea puhua mitenkään kovin ehdottomasti). Rikollinen on laajasti ymmärrettynä henkilö, joka rikkoo tällaista yhteisöä ylläpitävää kontrollimekanismia ja näin asettuu yhteisön ulkopuolelle. Tärkeää on myös muistaa, että yksilöiden utiliteettifunktiot voivat olla varsin monimutkaisia ja erityisesti niissä on suhteellinen status-komponentti ja ne voivat olla aika kaukana jostain sellaisesta, joka yksinkertaistaen mielletään itsekeskeisyydeksi (on toki selvää vielä nykypäivänä, että geenien selviämiselle edulliset toimintamallit vaikuttavat kehityksen derivaattaan, mutta tästä ei tietenkään voi vetää mitään deterministiä johtopäätöksiä toimintamalleistamme, sillä evoluutio löytää vain lokaaleja optimeja: esim. millaiset aivojen kehityspolut ovat fysikaalisesti mahdollisia - esimerkiksi "network effect" voi suurentaa pienenkin historiallisen eron kohti tiettyä lokaalia optimia jne.). Moninaisista tavoitteista johtuen yhteiskunnallisista asioista keskusteltaessa olisi lapsenomaisen ihanteellista, jos pystyttäisiin erottamaan selkeästi kunkin toimijan utiliteettifunktiot siitä toteutuksesta, joilla tavoitteisiin pyritään yhteisössä - ts. kaikilla olisi "puhtaat kortit pöydällä". Näitä teemoja on käsitelty laajemmin esim. Tiedemies-blogissa

Joskus (harvoin) leikittelen ajatuksella ohjelmistosuunnittelun periaatteiden soveltamisesta yhteiskunnan analysointiin tyyliin diktaattori on "single point of failure" jne. Edellä mainitut kontrollimekanismit voisi löyhästi nähdä analogisesti staattisen tyypityksen tehtävään ohjelmointikielissä tai ilmaisuvoiman ja teorian vahvuuden väliseen suhteeseen formaaleissa kielissä. Toisin sanoen, mitä enemmän yksilönvapauksia (ilmaisuvoimainen kieli), sitä vähemmän voimme tehdä oletuksia järjestelmästä ja päin vastoin. Tai kuten Pohjavirta aikoinaan selitti tilastomatematiikan valkoisena laatikkona vastakohtana monimutkaisemmille mustiin laatikkoihin perustuville malleille. Toisin sanoen standardit todennäköisyysjakaumat parilla parametrillä ovat liian yksinkertaisia malleja moniin reaalisiin ongelmiin, mutta niistä saa ulos paljon sellaista, mitä voi näyttää ihmisille. Esimerkiksi, jos yksityisaseet kielletään, voidaan kenties vähentää poliisien varustelua jne. En ota tässä kantaa siihen, mihin kohtaan tämä tasapaino pitäisi eri asioissa laittaa, mutta ehkäpä omaa näkemystäni voisi luonnehtia niin, että en usko yhteiskuntiin, joissa rikos on mahdotonta. Pitkällä aikajänteellä on mielenkiintoinen kysymys, onko teknologinen kehitys ristiriidassa yksilönvapauksien kanssa, nimittäin jos hallitsemme aina vain suurempia energiamääriä, niin kontrollimekanismien tulisi skaalautua näiden mahdollisuuksien mukana. Esimerkiksi ei olla kovin stabiililla pohjalla, jos lähikaupasta saa ostettua ydinpommin valmistusaineet :) Jo oman aikamme terroristi-iskut kuten lentokonekaappaukset ja pernaruttokirjeet eivät olisi mahdollisia ilman lentokoneiden ja postilaitoksen keksimistä tai suhteellisen pieni ihmisjoukko todennäköisesti saisi ydinkärjet liikkeelle.


(When Johnny Comes Marching Home)

Lisähuomioita:

Juu, nämä ovat mutkikkaita asioita ja käsitteet lisäksi vuotavat kuin seula, mikäli tutkittava kohde mielletään tässä ympäristöön upotetuksi toteutukseksi näille abstraktioille, joilla hahmotamme asiaa. Esimerkiksi yksilön, utiliteettifunktion ja pelien rajat ovat epämääräisiä ja eivät ole riippumattomia. On epäselvää voidaanko esimerkiksi sosiaalisuuden taustalla vaikuttavia tunteita kuten häpeä, miellyttämisenhalu tai toisilta oppiminen modularisoida mielekkäästi. En ole biologiaa lukenut, mutta luulen, että myös sillä puolella nämä asiat ovat vaikeita: samat geenit ovat eri yksilöillä, ympäristö muuttuu jne. Esimerkkinä yhteisöjen (laajasti ymmärrettynä) riippuvuuksista on vaikkapa avioliittoinstituutio: kerralla voi kuulua vain yhteen tällaiseen "yhteisöön", joista kenties yksilö yrittää valita parhaan mahdollisen rajallisella määrällä informaatiota (vaikka muutkin vaihtoehdot olisivat positiivisia verrattuna nollatilanteeseen) samalla optimoiden lukematonta määrää muita muuttujia kuten maine jne. Vastaavasti voidaan kysyä on mielekästä verrata johonkin "nollatilanteeseen", koska sen olettaminen, että tällainen nollatilanne voisi olla olemassa, voi olla epäyhteensopiva mallin muiden osien modulaarisuuden kanssa. Lisäksi yksilöt eivät edes ole ideaalisia rationaalisia toimijoita ja näillä on vain äärelliset resurssit käytössään päätöksien tekemikseksi. Historia voi myös vaikuttaa merkittävästi yhteisön kehitykseen: esimerkiksi monet diktatuurit pysyvät sellaisina vahvojen kontrollirakenteiden takia, vaikka enemmistö (tai jopa kaikki!) haluaisivat jotain muuta. Tähän liittyen varsin ärsyttävä piirre nykysysteemissämme on, että uusia lakeja säädetään hepposin perustein, eikä oteta täysin huomioon sitä, että näihin vaikuttaa kaikenlaisa hystereesi-ilmiöitä. Viimeinen rajoitus ymmärrykselle on se, että osa näistä hahmoista on luonteeltaan korkeampaa kertalukua. Sellaiset tavoitteet kuin uteliaisuus, miellyttämisenhalu, oikeustaju tai kategorinen imperatiivi eivät kiinnitä mitään tiettyä toimintamallia vaan ovat parametrisoituja näiden yli. Sama pätee sosiaalisiin metapeleihin ja liittoumiin, jotka voivat helposti irrottaa järjestelmän konkreettisista asiakysymyksistä. Kaiken tämän analyysin tarkoituksena on vain osoittaa näiden asioiden valtava monimutkaisuus. Abstrakti, pakkaava mallimme voi antaa vain "ylärajoja" sille mitä voi tapahtua, mutta toki maailmassa on myös vakaitakin ilmiöitä, joten rajoittamalla teorioidemme vaikutusaluetta voimme kyllä saada jotain lokaalia tietoa - muutenhan älystä ei olisi hyötyä alunperinkään!

Moniin arkkitehtuureihin (ja miksei siis yhteisöihinkin) pätee, että niiden tärkein yksittäinen ominaisuus on "evolvability". Eli toisin sanoen kiinnitetään jokin hyvin suppea luuranko muuttumattomimmista järjestelmän aspekteista ja annetaan kaiken muun joustaa vastauksena ympäristön paineelle. Tässä tunnustetaan, että emme pysty älyllä suunnitelemaan tiettyä mutkikkaampaa järjestelmää top-down: raha on hyvä esimerkki tällaisesta yksinkertaisesta periaatteesta, joka mahdollistaa rikkaan systeemin syntymisen sen ympärille. Tekniikan puolelta voisi käyttää esimerkkinä IP-protokollaa, joka mahdollisti Internetin syntymisen ja jousti kirjaviin tarpeisiin, joita kukaan ei osannut ennakoida etukäteen. Osittain tätä tarkoitin sillä, että mielestäni rikoksen pitäisi aina olla mahdollinen järjestelmässä: ilman kapinan mahdollisuutta voi systeemi jumiutua johonkin huonoon kehityspolkuun.

Utiliteettifunktiolla tarkoitin jotain hyvin yleistä kuten preferenssijärjestysrelaatiota potentiaalisille eri maailman tiloille (tämäntapaisissa luonnollisen kielen määrittelyissä pitää olla hyvin varovainen, sillä ne eivät ole aina matemaattisesti konsistentteja - tosin fyysikot tekevät tätä aivan samaa :) ) Kannattaa huomata, että tällainen utiliteetin määritelmä on subjektiivinen eikä sinänsä mahdolista vielä puhumista esimerkiksi hyvinvoinnista vaikkapa utiliteettien summana. Lisäksi utiliteetin käsite on ongelmallinen siinä suhteessa, että ihmisten preferenssit eivät ole vakioita ajan funktiona vaan riippuvat kokemuksista.

Olen huomannut, että status-komponentti utiliteettifunktiossa on monesti ihmisille vaikea hahmottaa arkipäättelyssä. Olkiukkona voisin käyttää kuviteltua argumenttia: "Miksi meillä on sosiaaliturva? Jos kerran haluat auttaa heikkoja, niin mikset vain anna rahaa hyväntekeväisyyteen itse?" Törmään tähän ajatuskulkuun todella usein eri yhteyksissä, mutta se on virheellinen, koska se implisiittisesti olettaa jotain sellaista, että henkilön utiliteetti on suoraan verrannollinen tälle jäävän rahan määrään tjsp. Toisin sanoen, jos vaikka utiliteettifunktio muodostuisi kolmesta summattavasta komponentista: a) itselle jäävä raha b) funktio ympärillä olevien köyhien määrästä ja c) omasta sijoituksesta ihmisten rikkausjärjestyksessä, voidaan nämä valita siten, että on loogista kannattaa sosiaaliturvaa, mutta ei silti maksaisi yksin omasta pussista samaa summaa.

Yksi lisänäkökulma etiikkakysymykseen on sellainen, että olen kuullut vastaväitteitä sellaiselle näkemykselle, että "vapaa tahto" tarkoittaisi yksinkertaisesti sitä, että voi toteuttaa omaa tahtoaan ilman ulkoisia rajoitteita. Nimittäin voitaisiin mahdollisesti ajatella, että meissä on kaikenlaisia evoluutiossa kauan sitten syntyneitä eläimellisiä vaistoja/tunteita, jotka ohjaavat toimintaamme, mutta (sosiaalinen?) tietoinen kontrolli on myöhemmin rakentunut näiden pohjakerrosten päälle kontrolloimaan välittömiä impulssejamme - toisin sanoen se olisi tietyssä mielessä aivon eri osien välinen yhteisö ja koordinoisi ristiriitaisia tuntemuksiamme. Tästä näkökulmasta vapaus voisi siis tarkoittaa jotain sellaista kuin kykyä vastustaa välittömiä halujaan.

En täysin hahmota sitä, mitä tarkoitetaan "voittajan" moraalin oikeudella. Siis yksilö voi vastustaa yhteisöä omasta näkökulmastaan ja argumentaatiolla voi sikäli olla merkitystä, että saa toiset ymmärtämään laajemmin toimiensa seuraukset jne. vaikka lopulta vahvimmat liittoumat vaikuttaisivat eniten lopputulokseen. Omassa ajattelussani moraalit ovat kuitenkin aina yksilöstä riippuvia ja mielivaltaisia rakennelmia samaan tapaan kuin ihmiset rakentavat oman identiteettinsä ja maailmassa voi olla aitoja ristiriitoja yksilöiden tavoitteiden välillä. Eino Leino ilmaisee asian paremmin runossaan "Kumpi on kauniimpi". Ymmärrän Humen giljotiinin hieman spesifimmin seuraavasti:
 

maailma --ymmärrys--> sisäinen malli --toiminta--> tavoite-maailma

eli maailmaa ymmärtäessämme katsomme ikään kuin menneisyyteen ja yritämme jäsentää sitä, mutta tulevaisuus on avoin ja meidän pitää yrittää rakentaa omilla toimillamme siitä sellainen kuin haluamme luovuutta käyttäen. Freudin strukturaalisen identiteetin teoria tarkentaa kuvan vielä siten, että toimintamme on egon tasapainoilua viettien id:n ja kulttuurin ohjelmoiman super-egon ("lauman ääni pään sisällä") tahtojen välillä ja erityisesti moraali voidaan nähdä jonkinlaisena systematisointina, jonka voi mahdollisesti pukea kulttuurin artefaktiksi, super-egollemme. Kannattaa myös huomata, että sen lisäksi, että moraali on subjektiivinen, monia keskusteluita sekoittaa se, että yksi assosioi identiteettinsä suurin piirtein id:ksi, toinen super-egoksi ja kolmas id+ego+super-ego-yhdistelmäksi. Tämä esimerkiksi vaikuttaa siihen, mitä tarkoitetaan "vapauden" käsitteellä. Lisäksi moraali voi olla jossain määrin tilannesidonnainen. Luulen myös, että ihmisillä on paljon laumaeläimen vaistoja ja voimme omaksua eri tilanteissa "laumanjohtajan" tai "seuraajan" psykologisen roolin. Tai kuten Nietzsche tulkitsi roomalaisten jumalia eräänlaisina ihanteina (tavoite-maailma), joista nämä sitten valitsivat ja yrittivät toteuttaa kyseistä ideaalia.

Kirjoituksessani määrittelin sanan "rikollinen" vain suhteelliseksi sille yhteisölle, jonka kontrollia se rikkoo enkä käyttänyt sanaa sen yleisessä merkityksessä.

keskiviikko 14. huhtikuuta 2010

Tervetuloa Platonlandiin!

Pikaisella opastetulla kierroksella käymme läpi elämyspuiston tärkeimmät kohteet. Fyysiset rakennelmat ja artefaktit suojaavat vain tuulelta ja tuiskulta, mutta ajatusrakennelmat luovat viihtyisän ja siistin sisäisen tukikohdan kivijalan, josta laajentaa kohti ulkoisen kaaoksen metsästysmaita ja sisustaa tilan heijastamaan omaa persoonallisuuttaan. Harrastelijoiden ajatuskodit kuitenkin natisevat liitoksistaan ja vuotavat välillä maailman mutaa sisään, mutta arkkitehtimme Platon on nähnyt erityistä vaivaa, että vain virheettömiä, minimalistista makua helliviä, yksinkertaisia, mutta täydellisiä muotoja on käytetty. Täällä on kyllä käsitekehysseinä ja ajatusprosessi, mutta ei aisti-ikkunaa, josta pääsisi varjokuvia seinän topologialle - seinä on kiinteä: sen hilarakennelmaa voidaan jatkaa, muttei muuttaa. Täällä ei myöskään muinaisevoluution epämääräinen ruoho kasva lattialaattojen välistä, vaan kaikki on rakennettu standardiosista, jotka ovat yhteensopivia työkalujemme kanssa, ettei ymmärrystyökalun tarvitse huutaa "kvali-a, kvali-a, kva-li-a! mitä tämä on, sillä ei ole osia, sitä ei voi pyörittää, sitä ei voi siirtää!".

Luonnollisella kielellä voimme koodata projektion elämysmaailmasta esitteeseemme ja kuljettaa rakennusohjeita toisiin kohteisiin, mutta kuten mainoskonsultti tietää, vain formaali kieli voi antaa sellaiselle paikalle kuin Platonland todella oikeutta sen kaikessa jämäkkyydessään. Monet laitteista nimittäin ovat niin hurjia, että ilman tiukkoja turvallisuusvaatimuksia rakennusvaiheessa, koko rakennelma voisi romahtaa paradoksiin kuin juoksulenkki Möbiuksen nauhan pururataa, joka vaihtaisi vasemman oikeaan. Tästä syystä suosimme käsitteiden teräväpiirtoista digitaalitekniikkaa siellä missä mahdollista, koska se estää signaalin vaiheittaisen puuroutumisen. Turvamiehemme Kant varoittaa vieraita myös ylittämästä elämyspuiston rajoja, vaikka todellisuuden häilyvä aallokko voi sitä kuvitellessa antaa mielikuvan jostain tutusta ja turvallisesta kuten avaruus ja aika. Jonkinlaisen kuvan saa, kun ajattelee kausaalisuhteiden muodostamaa graafia ja sen informaatiosisältöä, mutta kun yritämme kuvitella tämän mielessä, näemme vain suppean esitysmuodon siitä omassa tulkintakehyksessämme, joka on vain kuin aksioomajärjestelmän muutama välitöntä seurausta. Tästä syystä esim. matemaatikko, insinööri tai filosofi tekee työtä löytäessään uuden tietyn teoreeman, joka ei ole empiirinen fakta: kyse on tässä rakentamisesta eikä tunnistamisesta, sillä uuden yhteyden valitseminen jollakin kriteerillä monen muun mahdollisuuden joukosta sisältää informaatiota.

Yksi suosituimmista kohteistamme on konstruktiivisen logiikan lego-nurkkaus. Meillä on käteviä mustia laatikoita, joille voidaan antaa nimilaput ja voimme tarpeen tullen abstrahoida unohtamalla mitä laatikon sisällä on. Voimme esimerkiksi laittaa (lauantain + sunnuntai)-viikonloppupäivälaatikkoon V ja loput viikonpäivät arkipäivälaatikkoon A. Operaatiolla V+A voimme yhdistää kahden laatikon elementit uudeksi laatikoksi VP, joka sisältää kaikki viikonpäivät (siis A+A sisältäisi kaksi kertaa A:n elementtien määrän elementtejä, näillä on identiteetti). Säälaatikossa S on vaikkapa (sataa + paistaa) ja operaatiolla V*S saamme kaikki yhdistelmät ikään kuin rinnankytkettyinä laatikoina ((lauantai*sataa) + (lauantai*paistaa) + (sunnuntai*sataa) + (sunnuntai*paistaa)). Lisäksi voimme rakentaa funktiojoukkoja laatikoiden välille. Tietyn tyyppinen funktiojoukko on aina kahden laatikon välillä: sen input- ja output-laatikot ja yksittäisen funktion toteutusta voi ajatella kimppuna nuolia, jotka johdattavat yksikäsitteisesti kaikista input-laatikon elementeistä aina johonkin output-laatikon elementtiin (merkitään tällaista funktioiden joukkoa/tyyppiä I-laatikosta O-laatikkoon O^I tai I→O). Myös funktiolaatikkoja voidaan rakentaa abstraktisti: Voimme esim. kytkeä rinnan funktiolaatikot S^A * S^V uudeksi laatikoksi S^(A+V) tai duaalisesti A^S * V^S laatikoksi (A*V)^S sekä vastaavasti kytkeä funktiota sarjaan pallo-operaatiolla, joka mahdollistaa X→Y-tyypisen ja Y→Z-tyyppisen laatikon yhdistämisen X→Z-tyyppiseksi laatikoksi kaikille X,Y ja Z. Mikäli abstrahointi tehdään "rinnankytkennän/tilan suhteen", puhutaan kapseloinnista ja jos se taas tehdään kausaalisuuden suunnassa, puhutaan abstraktiosta (kiitokset Esalle näiden eron opettamisesta). 

Nyt uusinta uutta luomakunnassa: kartesiolainen 4d-teatteri dolby-äänillä ja sinä olet elokuvan pääosassa etkä yleisössä! Kannattaa huomata, että funktioiden epäsymmetria luo duaalisuuden +:n ja *:n välille ja että informaatio ja avaruus kulkevat aina käsi kädessä. Kun poimimme alkion joukosta, voidaan joukkoa ajatella avaruutena/tilana ja yksittäisen alkion valinta määrittää informaatiota niin monta bittiä, kuin ko. alkion erotteleminen joukon muista alkioista vaatii (ajattele esim. "hiukkasen" paikkakoordinaattia fysiikassa: se määrittää yhden pisteen kaikkien mahdollisten koordinaattien avaruudesta). Jos ajattelemme, että ajattelun ylimmillä abstraktiotasoilla "tietoisuuden tila" valitaan joukosta A, voi itse ajatteluprosessin ilman aisti-input:ia ylimmällä tasolla raa'asti yleistäen nähdä tilakoneena tyyppiä A→A (eräänlainen sykli siis). On erittäin tärkeää ymmärtää, että tietoisuuden tila EI ole mikään siivu euklidista avaruutta. Lisäksi ko. tila kuvaa neliulotteisen Kantilaisen subjektiivisen aika-avaruuden "sisällään" struktuurina: kokemallamme ajalla tai yhtäaikaisuuden tuntemuksella ei ole suoraa yhteyttä fysikaaliseen kausaalirakenteeseen, vaan se on vain aivojen tuottama illuusio ajassa jatkuvasta identiteetistä ja ympäristöstämme loogisena konstruktiona, jota voidaan tarkastella eri abstraktiotasoilla. Kannattaa myös huomata, että vaikka maailma olisi joiltakin osin jatkuva, ei se tarkoita, että sen kuvaamiseen tarvittaisiin äärettömästi informaatiota. Kategoriateoriasta tiedämme, että pelkät nuolet riittäisivät asian kuvaamiseen ja erityisestä terminaaliobjektista 1 lähtevät nuolet tyyppiä 1→A ovat isomorfisia A:n alkioille. +:n ryhmärakenteen yksikköalkio on tässä tyyppikategoriassa initiaaliobjekti 0, minkä voi tulkita tyhjäksi joukoksi ja +-operaatiolla voidaan ikään kuin generoida isompia avaruuksia, joiden elementit sisältävät enemmän informaatiota rakentamalla objekteja "alhaalta ylöspäin". Duaalisesti 1 on *:n yksikköalkio ja sen voi tulkia "universumiksi" ilman spesifikaatiota ("kaikki käy"). *:operaatiolla voidaan sitten lisätä uusia vaatimuksia spesifikaatioon ja ikään kuin "veistää/rajata" universumista tietyn muotoinen rakenne yhdistämällä monia vaatimuksia "ylhäältä alaspäin" jättämällä aikaviivan alkupää muuttujaksi. Lopullinen rakenne on siis yhdistelmä generaattorien tuottamia mahdollisuuksia, joita spesifikaatiot karsivat tuottaen lopullisen joukon (ajattele ZFC:n separaatioaksioomaa - otin tämän suomennoksen wikipediasta). Jonkinlaisen intuition tästä kaksisuuntaisuudesta antaa esim. se, että kuvittelee kokonaislukujen parien joukkoa (x,y), missä nuo muuttujat x ja y ikäänkuin "generoivat" ko. avaruuden ja sitten asetamme "top-down" ehdon esim. y=x+1, joka duaalisesti "filtteröi" yhden vapausasteen pois. Kannattaa vielä huomata, että tällaiseen loogiseen systeemiin ei voida lisätä täyttä rekursiota ilman, että systeemin rakenne sulaa Turing-täydellisyyden paradokseihin, mutta rajoittumalla ns. (co-)rakenteelliseen rekursioon, voidaan useimmat asiat kuitenkin esittää konsistentissa systeemissä ja "lego-palikkamaisuus/staattisuus" säilyy. Ihminen kykenee myös korkeamman kertaluvun logiikkaan, jossa voidaan parametrisoida joukkojen yli - ikään kuin laittaa joukkoja joukkojen sisään, mutta nämä ulommat pitää jälleen kerran erottaa ensimmäisen kertaluvun joukoista, jotta vältyttäisiin Burali-Forti-paradoksilta.

Kiinalainen huone-kauhujuna on myös jännittävä paikka nuorille aikuisille, sillä se saattaa saada heikkohermoisen luulemaan, että tietoisuuden synnyttävä kausaalistruktuuri ei toimisi muilla "toteutusalustoilla" kuin aivoissa. Tässä on kuitenkin helppo huomata, että aivojen neuronit ovat jo itsessään "kiinalainen huone" sisältäen paljon kaikenlaista kohinaa varsinaisten signaalien lisäksi kun tilannetta tarkastellaan yksityiskohtaisesti. Ajattelun stabiilin struktuurin suojaamiseksi ympäristön sotkulta pitää itse asiassa nähdä erityisesti vaivaa (tämä on myös monien ihmisten rakentamien koneiden pääasiallinen ominaisuus). Ratkaisun löydämme kategoriateorian funktoreista, jotka mahdollistavat kuvauksen toiseen rakenteen "sisään" siten, että alkuperäinen struktuuri säilyy. Tässä on kyse vastaavasta asiasta kuin vaikkapa virtuaalikoneen ajamisesta tietokoneella tai protokollan tunneloinnista toisen protokollan sisällä.

Kotoisan elämysmaailmamme ulkopuolella vellookin sitten kaoottinen Turing-vahva meri, jossa on sen verran tyyniä kohtia ja säännönmukaisuutta, että saamme artefaktimme kellumaan edes jotenkin. Muistaakseni Hawking kirjoitti Ajan lyhyt historia-kirjassaan jotain sen suuntaista, että vaikka kaikki luonnonlait tunnettaisiin, niin siitä se työ vasta alkaisi, kun yritämme selvittää niiden seurauksia. Mielestäni tämän voisi esittää vielä voimallisemmin niin, että tuolla ulkona jossain voi odottaa vielä ihmeellisempiä struktuureja kuin koko nykyinen sisäinen maailmamme ja nykyinen kulttuurimme.


(Welcome (Enter The Circus) - Christina Aguilera)

lauantai 10. huhtikuuta 2010

Reductio ad absurdum

Turingin kone on äärellinen tilakone, joka on laajennettu loppumattomalla muistilla, johon on lähtötilassa kirjoitettu ohjelma ja syöte (muisti voidaan toteuttaa nauhana, jota tilakone kelaa ja näin mielivaltaisen suurien muistiosoitteiden käsittely äärelliselle "laskentayksikölle" on mahdollista). Universaali Turingin kone on sellainen Turingin kone, joka pystyy simuloimaan minkä tahansa muun Turingin koneen (ja näyttäisi siltä, että minkä tahansa algoritmin) toimintaa esimerkiksi niin, että simuloitava kone on kirjoitettu alkutilassa ohjelmana muistiin jollakin koodauksella. Universaaliksi Turingin koneeksi riittää lisäksi naurettavan yksinkertainen tilakone muutamalla tilalla ja tilasiirtymällä.

Tilakoneen valinnalla ei siis ole paljoakaan teoreettista merkitystä, vaan sen tehtävänä on lähinnä olla riittävän vahva suorittamaan varsinaista ohjelmaa, joka on tallennettu koneen muistiin. On oleellista huomata, että bitit muistissa voivat toimia symmetrisesti sekä "koodin" että "datan" roolissa ja tilakoneen tehtävänä on saada nämä vuorovaikuttamaan keskenään. Voisi ajatella, että itse suoritusta voisi kuvitella eräänlaiseksi bittien riippuvuuksien aikaviivojen verkostoksi, jota tilakone "kutoo" yhteen ja haarauttaa. Tästä näkökulmasta on helppo havaita, että jaottelu tilakoneen ja muistin välillä on vain lähes mielivaltainen "ajatustyökalu": tilakone ei ole fundamentaalimpi kuin ohjelma, jota se suorittaa. Tästä voidaan vetää analogia fysiikkaan, jossa "hiukkasten" sijaintien ja nopeuksien yhdistetty konfiguraatio voidaan löyhästi ajatella "muistin tilaksi" ja luonnonlait ovat "tilakone", joka kuvaa kuinka systeemin tila vuorovaikuttaa itsensä kanssa (suhteellisuusteorian oleellinen ajatus on, että nuo "hiukkasten" aikaviivat ja niiden riippuvuussuhteet ovat perustavampaa laatua kuin euklidisen aika-avaruuden illuusio). Toisin sanoen fysikaalisen systeemin tila on eräänlainen "jäännöskäsite", joka jää jäljelle, kun kiinnitetään tietyt luonnonlait - joskin fysikaalisessa systeemissä tämä raja näyttäisi istuvan tietynlaiselle jaottelulle luonnon säännönmukaisuuksien takia (Occamin partaveitsi).

Tarinan opetus on, että on naiivisti helppo pitää luonnonlakeja jotenkin fundamentaalimpana ja ajatella, että maailman "tila" ja sen indusoima prosessi ei erityisesti vaadi mitään selitystä vaan se on "vain" dataa, joka laitetaan malliin/perspektiiviin, joka "selittää itsessään kaiken". Minusta kuitenkin näyttäisi siltä, että tämä laadullinen jaottelu liittyy enemmänkin aivojen tapaan hahmottaa kuin maailman rakenteeseen, jossa vain on säännönmukaisuuksia. Voisi kenties ajatella, että evoluutiossa aivot ovat kehittyneet jäsentämään hyvin näkökenttäämme, jossa on usein pitkäikäisiä hahmoja, joita nimeämme substantiiveilla ja jäsentelemme joukoiksi/yhdistelemme kuin lego-palikoita isommiksi substantiiveiksi. Tästä syystä esim. ihminen pelaa go:ta paremmin kuin shakkia, jossa laudan pelitilanne muuttuu nopeasti siirtojen seurauksena. Kun sanomme, että meillä on "kartta ympäristöstä", ajattelemme helposti jotain staattista kohdetta ja staattista karttaa. Mutta tämä intuitiivinen "lego-palikka"-malli soveltuu todella huonosti esimerkiksi dynaamisen tietoisuuden selittämiseen - aivan kuin yrittäisimme summata positiivisia lukuja ja ihmettelisimme, miksi emme saa koskaan tulokseksi -1. Esimerkiksi shakkialgoritmin suorituksesta (toisin kuten staattisesta ohjelmasta tai aivoista) on vaikea piirtää perinteistä "karttaa" tai vaikkapa turbulenssista tai tulevaisuudesta on vaikea piirtää karttaa, joka koostuu osista, jotka "selittävät" kokonaisuuden. Tietojenkäsittelyteoriasta tiedämme, ettei tällaista karttaa oikeastaan voi edes piirtää muuta kuin vähintään samankokoisesta systeemistä käsin kuin tutkittava järjestelmä itse yleisessä tapauksessa. Emme pääse maailman selittämisestä näin helpolla!


(The Matrix Navras Music Video)

lauantai 3. huhtikuuta 2010

Musiikillinen madonreikä 90-luvulle

Kari, 17-18v, vietti monet kesäpäivät demoryhmämme toisen muusikon ja osa-aika-dj:n vanhempien puisen omakotitalon vintillä koodatessa musarutiinia Gravis-äänikortille. Kyseinen laite oli siitä mielenkiintoinen, että sillä oli oma muisti, josta kortin prosessori miksasi moniraitaisen äänen ilman tarvetta varsinaiselle koneen pääprosessorille. Lopullinen engine oli noin 5000 riviä x86 assyä ja luulen, että se oli ensimmäinen kunnolla 16-bittisiä sampleja tukeva rutiini. GUS:ssa nimittäin oli sellainen rajoitus, että 16-bittisiä sampleja ei pystynyt automaattisesti soittamaan 256 kilon muistipankkirajojen yli, joten suurin osa tuosta koodista oli itse asiassa kirjoitettu vain hyppimään noiden rajojen yli pitkille sampleille kortin tuottaman interuptin avulla ja hallitsemaan kortin muistiavaruutta siten, että uusia sampleja pystyi lataamaan lennosta keskusmuistista musiikin soidessa (mikä aiheutti myös fragmentaatiota kortin muistissa). Koska netistä ei katoa mikään, minkä sinne on kerran laittanut, löytyy kirjoittamani moduuliformaatti näköjään vieläkin jostain. Kopion tekstin alle turvaan, koska olen vähän huonosti säilönyt näitä vanhoja tekeleitä.

Kaverini kirjoitti Pascalilla sävellysohjelman käyttöliittymän tuon kirjoittamani rutiinin päälle ja osallistuimmekin Assembly '94:n musacomboon parilla kappaleella, koska silloin oli mahdollista jättää myös oma ohjelma noiden soittamiseen. Kaverillani oli dj-hommiensa myötä kotonaan usein kilowatin ammattivahvistin ja rakentamansa 15 tuuman refleksikaiutin bassoille ja kuuntelimme taustalla tämäntapaista humppaa nuoruuden huumassa:


(2 Unlimited - No limit)
 


Musiikkirutiinini tiedostoformaatti, josta näkyy myös kätevästi tuetut ominaisuudet:

From: husberg@proffa.cc.tut.fi (Husberg Fredrik)
Newsgroups: alt.binaries.sounds.utilities
Subject: Re: Playemd: newest version & EMD module format specs
Date: 24 Aug 1994 14:14:53 GMT
Organization: Tampere University of Technology, Computing Centre

Dirk / ELASTIK         
husberg@proffa.cc.tut.fi

=====================================================================
    EMD module/song format for (A)dvanced 16-(B)it (T)racker ABT  
=====================================================================
                                                Last update 14.8.1994 


---------------------------------------------------------------------
Note!
        This is NOT the final version of the EMD-module format. There
will be some minor changes in the near future (like new features) but 
they are always placed to those  entries and that is the 
reason why they are not going to affect playing of these old EMDs 
with future versions of ABT. This file has been written in hurry and
because of that there may be some mistakes in this file. If you have
questions concerning EMD or ABT please contact: 
 
                        Dirk/Elastik
                        
                        Internet:
                        husberg@lehtori.cc.tut.fi
                        husberg@proffa.cc.tut.fi
                        
                        Snailmail:
                        Koulutie 10
                        SF-36200 Kangasala
                        Finland
---------------------------------------------------------------------

        What is EMD? It's new sample based sound/music module format.
The letters E,M and D come from the words Extended MOD. EMD-module format 
is much like the normal MOD but with new features and it's designed to be
used with the ABT, Advanced 16Bit Tracker made by Kari Visala and Mikko
Blomqvist. Here is the short description of the current EMD format, which
should help you to use EMDs freely in your own projects.
PLEASE, NO MODIFICATIONS


-------------------
EMD-file structure:
-------------------


OFFSET 0  Header:
=================
size       description
--------------------------------------------------------------------------
4  bytes   'EMOD' , these four bytes are used to identify an EMD-file
1  byte    Version number of the module   4 high order bits = major version
                                          4 low order bits  = minor version
           for example version 1.0  ->  00010000b
8  bytes     (for later use..)



OFFSET 13  Module-info part:
============================
size       description
--------------------------------------------------------------------------
32 bytes   Name of the song (32 chars, no any ending chracters) IBM-ascii
1  byte    Number of the instruments 
2  bytes   Length of the pattern list
1  byte    Number of the patterns-1 (0 = there is only 1 pattern) 
32 bytes   Values of the pan positions of the channels in the beginning of
           the song. (0-full left, 15-full right) byte/channel
2  bytes   Starting tempo, default=125 bpm
           bpm = beats per minute (8 rows in pattern = 1 beat)
1  byte    0 = module 
           1 = song ( no sample wave-data stored to this file)
1  byte    0 = normal patterns 
           1 = packed patterns :-)  
1  byte    Number of channels (1..32)
1  byte    This byte is only for modules:
           
           0 = Samples are stored in normal 16-bit signed format (like WAV)
           1 = Samples are in coded format 
           Coding of the samples:
           This next process has been done to every single byte of sample
           raw data when module is saved: (so, if you want to uncode samples, 
           do the steps backwards)
                   1. step      first and last bit of byte changed
                   2. step      neg
           Here is the code I use to uncode these:
                        mov al,[byte of sample data]
                        mov bl,al
                        and bl,10000000b
                        shr bl,7
                        mov bh,al
                        and bh,00000001b
                        shl bh,7
                        and al,01111110b
                        add al,bl
                        add al,bh  
                        mov [sample data],al  ; uncoded byte saved
           The reason for coding those samples was that we didn't want
           that everyone would be able to rip our 16 bit samples straight
           from our asm'94 compo-modules, but I thought that this file 
           format description should be complete and so I included uncoding
           info. This feature won't have any future use.

9  bytes   




OFFSET 96  Sample info part:
============================
This part of the file contains all settings and info for the samples.
Sample wave-data is not here. One sample takes 250 bytes of space and 
they are saved to the module consecutive. So, the size of this part
is number of instruments * 250 bytes

size       description
--------------------------------------------------------------------------
1  byte    Number of the instrument in pattern data (1-99)
4  bytes   Length of the sample in bytes 
32 bytes   Name of the sample (no any ending characters) IBM-ascii
12 bytes   File name of the sample (used with song files) 
           format: XXXXXXXX.XXX
72 bytes   Breakpoint information:  ( 18*4 bytes )
           18 breakpoints:
                 4 bytes = Offset from the beginning of the sample in words
                           So, if sample is 50000 bytes long, then 25000 in     
                           breakpoints is the end of the sample.
           2 consecutive breakpoints = 1 loop (9 loops)
9 bytes    Directions of the loops
           1 byte/loop :    0 = no loop
                            1 = forward loop
                            2 = bi-directional loop
1  byte    Active loop of the sample in the beginning of the song :
                0    = no loop on (default)
                1..9 = loop #
108 bytes  ADSR values (9 different ADSR for each instrument) (9*12 bytes)
           1 ADSR value:
               4 bytes   offset(place) of the decay point
               4 bytes   offset(place) of the sustain point
               1 byte    Attack value ( always in the start of the sample)
               1 byte    Decay value
               1 byte    Sustain value
               1 byte    Release value ( always in the end of the sample)
           ADSR control for samples isn't used by ABT in any way.
           Only the space is reserved for these values. It is very likely
           that ABT will never use this feature in the future because of
           the limitations of the module-style music and these bytes could
           be replaced by some other data.
1  byte    Active ADSR number 1-9  (0= no ADSR)
2  bytes   overall volume of the sample in the beginning of the song
           value from 0 to 4095.
1  byte    finetune+128  ( Default=128, player converts this value to a
           signed byte, -128..127:   0  =  normal finetune. 
                                    -64 =  halfnote downwards
                                     64 =  halfnote upwards
1  byte    midi on/off,   0  = normal GUS sample
                          1  = midi instrument
1  byte    midi channel+1,  0...16 
                  0 -> none, 
                  1 -> channel 0, ... , 16 -> channel 15
1  byte    midi preset instrument number   
           0 -> no preset instrument choosed from the ABT,
                note is played on synthesizer with choosed instrument
1  byte    Direct load on/off
           1 = instrument is loaded directly to gusdram
           0 = instrument only in EMS in the start of the song
3  bytes   



OFFSET 96+250*inst#  Pattern list:
==================================
Here is the play order of patterns. Length of this part is in the
module info part. One pattern takes 1 byte of memory and because of
that song can only contain 255 different patterns. Numbers of the patterns
are stored here so that the first byte is the number of the first played 
pattern and so on...



OFFSET 96+250*inst#+pattlstsize   Patterns:
===========================================
This part of the file contains all data for the patterns.
Patterns are stored here so that the first pattern here is
the pattern marked with 0 in the patternlist, second is pattern 1 and so on.
Size of a pattern is 13+channel#*pattern_length*5 bytes.

size       description
--------------------------------------------------------------------------
8  bytes   Name of the pattern in IBM-ascii format with no ending character
1  byte    Length of the pattern (how many rows, default=64)
4  bytes   

Here is some kind of pseudo-code presenting the way ABT stores patterns to
EMD file:

for y=1 to pattern_length
  for x=1 to #channels 
    1 byte  Note = 0..255, 0   = no note, 
                           1   = C-1 and so on...
                           If pattern-packing is enabled in the moduleinfo
                           part:
                           255 = because note,sample#,effect and params would
                                 all be zeros, program saves only one byte
                                 here (255) and those other 4 bytes aren't
                                 saved.

    1 byte  Number of the sample, 0=empty instrument, only stops playing sample
    1 byte  Effect command 1-99,  0 = no effect
    1 byte  Parameter 1 for the effect
    1 byte  Parameter 2 for the effect
  next x
next y



OFFSET XXXX   Channel volumes:
==============================
Here are the beginning volumes for each channel.
One volume takes one byte, which is from 0 to 255 (default=255,max) 
and 32 channels are always stored. So, the size of this part is 
always 32 bytes.




OFFSET XXXX   Raw wave data of samples:
=======================================
Only modules have this part of an EMD-file, in songs there is no sample raw
data. All samples are stored here without any marks between them.
Samples are stored so that the first sample here has the smallest number.
All data is signed 16-bit, which is same as 16-bit wav files.
Sample data can also be in coded format (read the module-info part).

End of EMD-file.





========================================================================
Currently supported effect commands of ABT:
========================================================================
There will be more effect commands in the near future, but here are all 
the basic commands for ABT, which are already ready (midi efx-commands
aren't here yet) :

Effect command is a number between 1 and 99. One effect can have maximum
2 parameters, both 0-99, or one parameter from 0 to 9999 (par1*100+par2).


Efx#      Description and parameters
----------------------------------------------------------------------------
    1     Set volume 0-4095 (values is exponential)
   11     Set linear volume 0-511
    3     Set tempo 0-???? (beats per minute, 125=default, 8 rows = beat)
    5     Set pan-value for a channel:  param1=channel#(0-31),
              if param1>31 , then current channel (where the efx-command is) 
              will be used for effect.
              param2=pan-value from 0(left)-15(right)
   17     Break pattern:  This efx-command jumps to the selected row of 
              next pattern in the song. (next row after efx isn't played)
              param1=row# of next pattern
   18     Position jump:  Changes the song position and the row# played next.
              param1=which pattern in pattern list (0=first)
              param2=which row
    2     Volume slide:   param1&2=new volume (0-4095) (slide is exponential)
   82     Set length of a volume slide: param1=how many rows volume slide 
              will take if tempo isn't changed. (0 is also 1 row)
              This variable is independent for each of the channels.
    6     Pitch up: param1=How many halfnotes upward, 
              param2=length of bend in rows with current tempo (0 is same as 1)
    7     Pitch down: Same as pitch up, but downwards
   13     Load&remove sample from gusdram:
              param1=number of the instrument to be loaded throught DMA
              (0=no sample loaded)
              param2=which instrument is unloaded from the gusdram
              (0=no instrument unloaded)
   22     Set frequency: If this efx-command is on the same row with note,
              note isn't played, but only frequency of currently playing 
              sample is changed to the given note.
   15     Effect channel play: Plays unloaded sample from EMS throught DMA.
              ( This efx-command isn't used yet)
   84     Set Vibrato waveform: param1: 0=sine, 1=saw, 2=sqr, 3=ramp down
    4     Vibrato: param1=Depth 0-99 (63=halfnote to both directions)
              param2=speed of the vibrato 0-99: (param2/5)Hz  1/5Hz - 20Hz
   34     Vibrato off
   19     Arpeggio: middle note = basenote+param1*halfnote
                    high note   = basenote+param2*halfnote
              Major :   190407        Minor :   190307
   89     Set speed of the arpeggio param1=how many notes played during 
              one row of pattern. (default=3, the whole chord played on 
              every row of pattern) (0 is same as 3)
    9     Tremolo (always sine) param1=depth/4 -> Volume can varies from 0 to
          400 in both directions. param2=speed of tremolo(same as vibrato)
   38     Tremolo off
   24     Note delay: param1:delay 0-99, "100"=next row

Note: All the effects that control the frequency of the sound can be used
      simultaneously with effects that control the volume.

perjantai 2. huhtikuuta 2010

Ennen kuplaa,

joskus 96-97 soodasimme (Päivölä - Suomi sanakirja) useimmat yöt DMI:n labrassa aina aamu viiteen saakka. Kyseissä huoneessa ei ollut lainkaan ikkunoita sekä rikkinäinen ilmastointi, joka piti huoneen talvella shortsikeleissä, joten periaatteessa siellä oli helppo unohtaa kellon- ja vuodenaika. Tilassa oli Genelecin monitorit, joista kuuntelimme musiikkia vuoroissa hommia tehdessä. Meidän lisäksi siellä työskenteli yksi kaveri, joka jätti vaikutuksen mm. koodaamalla copper barit ms-dos:n debugilla 10 minuutissa.* Alla kolme piisiä, jotka jäivät mieleen hänen cd:ltään, kun loput kuulostivat lähinnä siltä, että kaiuttimet hajosivat.

(RMB - Matisse)


Silloin koodasin C++:lla ray tracerin tilavuusmalleille ja visualisoimme mm. The Visible Human Project:in datasetin. Alla ohjelman tuottama esimerkkikuva. Kaverimme teki sitten vastaavan ohjelman ms-dos:lle assemblyllä (oma versioni oli x-ikkunointia käyttävä), jonka möimme Heurekan tiedekeskuksen kiertävään näyttelyyn. 


* Olen tuntenut vain yhden toisen kaverin, joka oli yhtä ripeä koodaamaan. IOI-valmennuksessa joskus annoin lämmittelytehtävän, jossa ohjelmalle annettiin syötteenä palikkapinon etu- ja sivuprofiilit ja ohjelman piti tulostaa minimi- ja maksimimäärät palikoita, jotka voivat tuottaa kyseisen profiilin. Alle 10 minuutin kuluttua paperien jakamisesta minulle tuotiin valmis toimiva ohjelma.