Tag Archives: programavimas

Apie gyvąsias ir kompiuterines kalbas

Šitą straipsnį aš jau kokius 5 metus noriu parašyti, o gal ir dar seniau. Ir neparašau, net nepradedu – tema tokia plati ir gili, kad ją normaliai norint užkabinti, reikia parašyti knygą, o gal netgi ir kelias. O mintis gi paprasta: kuo gyvosios kalbos skiriasi nuo kompiuterinių? Ką vienos gali, o kitos negali?

Leopardo šuolis

Visas šitas vaizdas - tai kažkokio kompiuterinio žaidimo momentas. Visas jis sukurtas tiesiog teksto. Programos teksto, kuris, giliau pažvelgus, nelabai tesiskiria nuo įprastų tekstų. Ir dangus, ir medžiai, ir žmonės, ir leopardas - tai tiktai sakiniai, kurie užrašyti. Visa semantika pakankamai detalizuota, kad galų gale sukuriamas dinamiškas vaizdas, kuris dar ir sąveikauja su žaidėju. Bet savo esme - tai visvien paprasčiausias tekstas.

Esu rašęs apie kai kuriuos niuansus, bet tenai jau gyvųjų ir kompiuterinių kalbų tiesioginio santykio problematika kabinama. O įdomesnis yra kitas reikalas: ar galima, pvz., grynai formalia programavimo kalba parašyti kokį nors grožinės literatūros kūrinį? Ir vat čia jau susiduriame su tuo įdomumu, katrą nujausdamos, kalbainiškos lervos visad ima cypti, esą kompiuterinės kalbos yra negyvos ir joms kažkokie kiti kriterijai taikomi, negu gyvoms, o gyvosios kalbos esą negali būti taip vertinamos, analizuojamos ir taip toliau, todėl jomis jokio kūrinio gražaus neparašysi.

Continue reading

Arba: kalbainių nekompetencija irba tinginystė

Visai netyčia vienas kolega užvedė ant šios temos*. Jis pats nei neįtaria, kokių man minčių sukėlė, o tos mintys – visai paprastos. Juk kalba – tai mąstymo įrankis ir netgi mūsų proto realizacija**, tiesa? O jei jau taip, tai turime buką bukiausią klausimą: kaip natūrali kalba realizuoja paprastą Būlio algebrą ar išvis elementariausią logiką?

Kalbainiams ateina blogas metas

Jei esate kalbainis, tai čia neskaitykit, nes pasijusite blogai.

Pernelyg nesigilindami į visus įmanomus operatorius, galim apsiriboti keliais, įsivaizduodami juos, kaip dėželes su vienu ar keliais įėjimais ir vienu išėjimu. Logika paprasta – pro įėjimus pakliūna reikšmės skaičiavimams, o išėjime gauname apskaičiuotą reikšmę. Visada išeina tiktai viena reikšmė – melas arba tiesa. Turint pakankamą rinkinį loginių operacijų, galima realizuoti bet kokį kompiuterį, o gal būt – net ir žmogaus ekvivalentą. Taigi, pagrindinės operacijos yra šios:

  • AND, kitaip dar vadinama logine konjunkcija***: jei abu įėjimai yra tiesa, išėjime irgi yra tiesa, jei nors vienas įėjimas melas, išėjime irgi yra melas
  • NOT, kitaip dar vadinama logine inversija arba negacija: jei įėjime yra tiesa, išėjime yra melas, o jei įėjime yra melas, išėjime yra tiesa
  • OR, kitaip dar vadinama logine disjunkcija: jei visuose įėjimuose yra melas, išėjime yra melas, bet jei viename ar daugiau įjėjimų yra tiesa, išėjime irgi yra tiesa

Šitas rinkinukas yra funkcionaliai pakankamas, t.y., trijų funkcijų pakanka, norint realizuoti bet kurias likusias (o tuo pačiu – ir visą metateoriją), tačiau be jų, yra dar dvi itin geros funkcijos, be kurių būna labai keblu:

  • XNOR, kitaip dar vadinama logine lygybe, o rečiau – logine ekskliuzinės disjunkcijos inversija. O žmoniškai šenkant – tai tiesiog palyginimas. XNOR yra nuostabi funkcija, kuri pati viena leidžia realizuoti visą Būlio algebrą, t.y., pati savaime yra funkcionaliai pakankama. Jos išėjime yra tiesa, jei abu įėjimai yra vienodi, t.y., jei abu yra tiesa arba abu yra melas, išėjime yra tiesa.
  • XOR, arba ekskliuzinė disjunkcija, kuri ir yra šio straipsnio tema: lyg ir panašu į OR, tačiau absoliučiai kitas variantas. Jei vienas iš įėjimų yra melas, o kitas tiesa – išėjime gauname tiesą, bet jei abu įėjimai yra melas arba abu įėjimai sutampa, gauname melą.

Kitos pora populiarių funkcijų, tokios, kaip NAND (elementari AND rezultato inversija) arba NOR (tokia pat elementari OR rezultato inversija) – pakankamai neįdomios ir primityvios, kad jas labai jau lengva būtų realizuoti, kaip kitų funkcijų kombinacijas. Tačiau gyvenime, įprastoje kalboje AND, NOT ir OR – tiesiog būtinos, negalime apseiti ir be XNOR (lygybės) bei XOR – ekskliuzinės disjunkcijos. Nes kitaip užsiknistume, kaskart dėliodami nežmoniškas logines konstrukcijas, kai pakaktų ką nors pasakyti paprastai. Štai čia ir susiduriame su kalbos nepakankamumu bei užsistagnavusiomis kalbainių institucijomis.

Continue reading

Babilonas ir blablabla, ir vėl semiotika

Savo fantastiniame romane „Babel-17“ Samuel R. Delany aprašo, kaip žmones gali užkrėsti dirbtinė virusinė kalba, neturinti tokio koncepto, kaip „aš“ – dėl to šioji kalba įgauna visiškai kitas savybes, iškreipia žmogaus mastymą ir paverčia jį žudiku. Žudiku, nes šia kalba mąstantis žmogus neturi tokių sąvokų, kaip „aš“ ar „tu“, jam tiesiog neegzistuoja asmenybės, todėl jam neegzistuoja ir mirties ar žudymo sąvoka.

Continue reading

Kompiuteriui kalbėtis su žmogum

Apie Onofą, kaip apie kalbą, niekas nekalba jau kelis dešimtmečius. Net patyrusiems programuotojams jis neatrodo panašus į kalbą (populiari beprasmybė – „mašininis kodas – tai ne kalba„), nors kaip matėm iš aiškinimųsi apie Tiuringo mašiną, bet kuri metakalba, suteikianti priemones matematinės teorijos aprašymui, yra metakalba, o tuo pačiu – ir kalba, bent jau tiek, kiek galime spręsti apie tai, kas išvis yra kalba.

Aptilo ir kadaise populiarūs svaičiojimai apie kompiuterius, kalbančius su žmonėmis, dirbtinį intelektą ir kitas pusės šimtmečio senumo svajones. Kai Arthur C. Clarke 1968 metais parašė savo garsiąją „2001-ųjų kosminę odisėją“, kurioje buvo dirbtinis intelektas HAL-9000, atrodė, kad viskas įmanoma. Na, gal būt ne tolimos kosminės kelionės, bet mąstančios mašinos – tai jau tikrai. 2001 jau seniai praėjo.

Dabar galime paprastai suformuluoti problemą, kurios sprendimas būtinas dirbtinio intelekto sukūrimui: žmogus gali išmokti kalbą, kuria programuojamas kompiuteris, o ar įmanomas atvirkščias variantas?

Continue reading

Generatyvinė interpretatyvinė teorija arba asmenybės polimorfizmas

Iš senų senų rašliavų, seniai uždaryto blogo, rašyto dar 2001-2003… Dedu šį straipsnį uždarą, tik friendams – nes atsirado labai nemalonių kontento kopipyzdintojų, kurie nei linkų atgal nededa. Padarysiu šitą straipsnį viešu kiek vėliau.

Formalus metateorinis požiūris į subjektyvią interpretaciją

  1. Prielaida apie subjektyvumą: Jei mes ir suvokiame aplinką, mes neturime tikslių kriterijų, kurie leistų nustatyti mūsų suvokimo teisingumą (atitiktį realybei). Dar daugiau: mes neturime net ir aiškių priemonių, kurios vienareikšmiškai leistų atskirti mūsų interpretacijas ar vaizduotės žaismą nuo realybės. Kitaip tariant, visas mūsų suvokimas yra akivaizdžiai subjektyvus.
  2. Prielaida apie realybę: Nepaisant akivaizdaus subjektyvumo, visa mūsų patirtis verčia manyti, kad mes visgi gyvename realiame, o ne savo sugalvotame pasaulyje, taigi, galime drąsiai teigti, kad mes matome realybę, tik ją savaip interpretuojame.
  3. Prielaida apie analizės ribų galimybes: Remiantis 1-ąja prielaida, galima tarti, kad žmogaus asmenybę verta nagrinėti pirmiausiai iš informacinės puses, t.y., pagal jo informacinius duomenų apsikeitimus tarp jo ir likusio pasaulio, nes apie „realią“ realybę mes galime turėti tik dalinį ir nepatikimą suvokimą, iškraipytą ir pakeistą mūsų pačių interpretacijos priemonių.
  4. Teiginys apie informaciškumą: Mūsų sąmonė, mūsų asmenybė – tai tam tikra informacinė sistema, galinti gauti informaciją iš aplinkos ir ją interpretuoti, savaip apdirbti, apmąstyti. Tokia informacinę sistemą galime pavadinti Interpretatoriumi ir nagrinėti panašiai, kaip Tiuringo mašiną, interpretuojančią komandų ir duomenų sekas, kur komandų sekos bei duomenys – tai informacija ir pranešimai, gaunami iš aplinkos ir kitų interpretatorių.
  5. Prielaida apie nuolatinį vystymąsi: Labai akivaizdu, kad žmogus, kaip interpretatorius, nėra baigtinis (tai išplaukia ir iš metateorijos pagrindų bei to, kad natūrali mūsų kalba gali būti panaudojama kaip metakalba, ir iš mūsų praktinės patirties). Kitaip tariant, žmogaus asmenybė, jo suvokimas, jo požiūris, jo interpretacinės galimybės laikui einant, keičiasi. Akivaizdu, kad tokį žmogaus asmenybės keitimąsi gali sąlygoti aplinkos įvykiai ir žinios, kitaip tariant, žmogaus gauta informacija.
  6. Teiginys apie generaciją: Galime daryti prielaidą, kad ankstesnėje prielaidoje aprašytas asmenybės – Interpretatoriaus keitimasis yra natūralus, įprastas reiškinys, kurio dėka Interpretatorius prisitaiko prie aplinkos, sugeba priimti naujus, jam neįprastus reiškinius ir informaciją. Tokį Interpretatoriaus keitimąsi galime pavadinti generacija. Šis teiginys tiesiogiai prieštarauja klasikiniam biheviorizmui, nagrinėjančiam asmenybę, kaip tiesioginių refleksų rinkinį, negalintį vykdyti interpretacijos.
  7. Prielaida apie post-interpretaciją: Vėlgi akivaizdu, kad jei mūsų gauta informacija nebūtinai keičia mus tiesiogiai (t.y., prieš tai pereina interpretacijos filtrą), ji, tokiu atveju, gali keisti mus jau po to, kai bus atitinkamai interpretuota. Tai tiesiogiai išplaukia iš 1-osios prielaidos. Gyvenimiškai galime tai pavadinti sugebėjimu pakeisti savo požiūrį po įvykių ar informacijos analizės.
  8. Prielaida apie interpretacijos generaciją: Galime teigti, kad jeigu aplinkos poveikis (informacija) yra suvokiama subjektyviai, interpretuojama, tai reiškia, kad ir generacija vyksta netiesiogiai, o tik kaip interpretuotos realybės pasekmė. Kitaip tariant, generacijos mechanizmas irgi yra daugiau ar mažiau interpretatyvus.
  9. Teiginys apie interpretatoriaus savigeneraciją: Remiantis 5-ąja prielaida, 7-ąja prielaida ir, ypač, 8-ąja prielaida, galime teigti, kad aplinkos įtaka, o tiksliau, iš aplinkos gauta informacija, nėra vienintelis mūsų asmenybę (interpretuojančiąją sąmonę) tiesiogiai keičiantis veiksnys. Akivaizdu, kad turi būti ir antrasis veiksnys – mūsų sąmonės interpretatyvinės priemonės, kurios pačios (gal but, dėl netiesioginio iš išorės gautos informacijos poveikio) gali keisti mūsų asmenybę. Trumpai tariant, ne tik mūsų mintys atsiranda dėl realybės poveikio mums (interpretacijos), bet ir mūsų mintys keičia mūsų asmenybę taip, kad realybė po atitinkamų pokyčių mums kelia jau kitokias mintis. Kitaip tariant, interpretatoriaus generacija – ne tik aplinkos poveikis, bet ir paties interpretatoriaus salygotas reiškinys.
  10. Prielaida apie generacijos savigeneraciją: Galime daryti dar vieną, galutinę, prielaidą, kad jei jau generacija vyksta, naudojant interpretatyvines priemones, tai, jei generacijos metu keichiasi interpretatorius, vadinasi, remiantis 8-ąja prielaida, galutiniame rezultate, pasikeičia ir pats generacijos mechanizmas. Tokį procesą galime pavadinti generacijos generacija. O interpretacija, kurios metu generuojamas interpretatorius, galime pavadinti generatyvine interpretacija.
  11. Teiginys apie kardinalų polimorfizmą: Mes ne tik nesame statiški, mes ne tik interpretuojame pasaulį, bet ir keičiame savo pačių naudojamus interpretacijos būdus, net nesąmoningai kurdami naujus – tai yra natūrali mūsų ypatybė. Mūsų interpretacijos būdams pasikeitus, mes aplinką imame suvokti šiek tiek ar netgi kardinaliai kitaip.

Generatyvinės interpretacijos analizės apribojimai

Kaip galime pastebėti, iš aukščiau išdėstytų dalykų išplaukia dar kelios įdomios prielaidos, pvz., prielaidos apie reikšmių, ženklų ir netgi prasmių polimorfizmą, prielaidos apie daugybines subjektyvias realybes, bet kartu ir apribojimas dėl tos pačios interpretatyvinės-generatyvinės sistemos analizės. Kaip sakant, analizuoti turim ką, tačiau galimybių išanalizuoti pilnai – nėra.

Dar įdomiau tai, kad iš loginės pusės iškyla ta pati kunda-lakunda problematika, kuri taip ir lieka neišsprendžiama: ar negali būti taip, kad individai „susikalba“, kartu turėdami visiškai skirtingas ir nesuderinamas prasmių ir reikšmių sistemas? Net jei tai atrodytų sunkiai įmanoma, paneigiantį sprendimą vargu ar galime taip paprastai atrasti.

Matematinė savigeneracijos pusė

Prieš kelioliką metų tokia įdomi hakerių grupė iš Ukrainos, leidusi ziną „Infected Voice“ (tarp kitko, visa ta grupė, jei mano atkapstyta info nemelavo – Kijevo universiteto matematikos fakulteto dėstytojų grietinėlė, ištisai mokslų daktarai ir pan.) gan solidžiai kibo į šitą patį reikalą iš matematinės pusės. Idėja buvo paprasta, kaip dvi kapeikos, jei neskaitysim to, kad atrodanti beveik neįmanomai: sukurti polimorfinį virusą, kuris pilnai, 100 procentų generuotų save, vykdydamas savo paties modifikacijas, įskaitant ir generatoriaus generavimą. Kitaip tariant, įgyvendinti neribotą interpretatorių steką viename interpretaciniame mechanizme. Tai reikštų vieną fundamentalų dalyką: jokia antivirusinė programa iš principo negalėtų identifikuoti tokio tipo viruso tiesiogiai.

Galutinis sprendimas, po kurio grupė uždarė savo veiklą (beje, taip ir nepaskelbusi galutinio viruso kodo, o tiktai pirminius fragmentus), buvo specialus Forth interpretatorius: pastarasis tebuvo minimalistinė Tiuringo mašina, leidžianti pilnai save modifikuoti savo pačios interpretuojamam kodui. Vienas iš įdomumų šiuo atveju – paradoksalus: pats viruso kūrėjas, nustatęs pirminę programą, visvien negali pilnai dekonstruoti mutavusio viruso ir išanalizuoti (paneigti ar patvirtinti) jo teisingumo, nors ir galėdamas stebėti to paties viruso veiklą.

Matematinis klausimas čia toks: ar galime nustatyti tokios savigeneracinės sistemos ribas ir įrodyti, kad jinai nėra baigtinė mažesniame diapazone, nei pati Tiuringo mašina, ant kurios ji dirba? Ko gero vėl atsiremiam į tas pačias su metateorija susijusias teoremas, kurios verčia galvoti, kad ne, t.y., daryti išvadą, analogišką tai, kurią padarome, analizuodami gyvąjį interpretatorių.