Arvutiteaduse Filosoofia

Sisukord:

Arvutiteaduse Filosoofia
Arvutiteaduse Filosoofia

Video: Arvutiteaduse Filosoofia

Video: Arvutiteaduse Filosoofia
Video: ATI päev töörühmad: Tarkvaratehnika 2024, Märts
Anonim

See on fail Stanfordi filosoofia entsüklopeedia arhiivides. Autorite ja tsitaatide teave | Sõbrad PDF-i eelvaade | InPho otsing | PhilPapersi bibliograafia

Arvutiteaduse filosoofia

Esmakordselt avaldatud reedel 12. detsembril 2008

Arvutiteaduse filosoofia (PCS) tegeleb filosoofiliste probleemidega, mis tekivad arvutiteaduse akadeemilise distsipliini olemuse ja praktika mõtestamisel. Kuid mis on viimane? See ei ole kindlasti ainult programmeerimine. Lõppude lõpuks pole paljud programme kirjutavad inimesed arvutiteadlased. Näiteks teevad seda füüsikud, raamatupidajad ja keemikud. Infotehnoloogiat kirjeldataks paremini kui programmeerimisega seotud meta-tegevust. Üldisemalt ja täpsemalt on see hõivatud kontseptsioonide ja metoodikate kavandamise, arendamise ja uurimisega, mis hõlbustavad arvutisüsteemide täpsustamist, väljatöötamist, juurutamist ja analüüsi ning aitavad neid kaasa. Selle tegevuse näideteks võivad olla programmeerimis-, spetsifikatsiooni- ja arhitektuurikirjelduskeelte kujundamine ja analüüs;kompilaatorite, tõlkide, teoreemide projitseerijate ja tüübi järeldamise süsteemide ehitamine ja optimeerimine; loogiliste raamistike leiutamine ja manussüsteemide kujundamine ning palju muud. Paljud arvutiteaduse kesksed filosoofilised küsimused ümbritsevad ja toetavad neid tegevusi ning paljud neist keskenduvad seda puudutavatele loogilistele, ontoloogilistele ja epistemoloogilistele küsimustele. Lõpuks on infotehnoloogia see, mida arvutiteadlased teevad, ja ükski täpne valemimääratlus ei saa olla midagi enamat kui järgneva arutelu juhend. Tõepoolest, lootus on seePaljud arvutiteaduse kesksed filosoofilised küsimused ümbritsevad ja toetavad neid tegevusi ning paljud neist keskenduvad seda puudutavatele loogilistele, ontoloogilistele ja epistemoloogilistele küsimustele. Lõpuks on infotehnoloogia see, mida arvutiteadlased teevad, ja ükski täpne valemimääratlus ei saa olla midagi enamat kui järgneva arutelu juhend. Tõepoolest, lootus on seePaljud arvutiteaduse kesksed filosoofilised küsimused ümbritsevad ja toetavad neid tegevusi ning paljud neist keskenduvad seda puudutavatele loogilistele, ontoloogilistele ja epistemoloogilistele küsimustele. Lõpuks on infotehnoloogia see, mida arvutiteadlased teevad, ja ükski täpne valemimääratlus ei saa olla midagi enamat kui järgneva arutelu juhend. Tõepoolest, lootus on see PCS aitab lõpuks kaasa arvutiteaduse olemuse sügavamale mõistmisele.

Kuid arvutiteaduse filosoofilise maastiku kaardistamine pole lihtne ülesanne. Õnneks võivad traditsioonilised filosoofiaharud pakkuda intellektuaalset ja struktuurilist juhendamist. Näiteks on matemaatika ja füüsika filosoofias kesksed küsimused käsitletavate objektide olemuse, selle kohta, mis on teadmised ja kuidas neid teadmisi saada. Keelefilosoofia tõstatab küsimusi looduskeele semantilise teooria sisu ja vormi kohta. See toob esile semantilise ettevõtmise aluseks olevad ontoloogilised ja epistemoloogilised eeldused. Ontoloogia näitab, kui palju on asju, kuidas neid individualiseerida, ja nende rolli meie kontseptuaalsete skeemide kujundamisel. Loogikafilosoofia annab ülevaate ja analüüsi erinevatest loogiliste süsteemide liikidest ning nende rollist igapäevases ja spetsialiseeritud diskursuses. Nende ja teiste filosoofia harude analoogiad ja sarnasused peaksid osutama abiks arvutiteaduse kesksete filosoofiliste probleemide väljaselgitamisel ja selgitamisel. Nende erialade olemasolev mõju PCS ilmub edasi, kui jätkame. Eelkõige kajastab teine, kolmas ja neljas osa ontoloogia ning keele- ja matemaatikafilosoofiate mõju.

  • 1. Mõned kesksed probleemid
  • 2. Olemasolu ja identiteet

    • 2.1 Programmide kahetine olemus
    • 2.2 Programmid ja algoritmid
    • 2.3 Programmid ja spetsifikatsioonid
  • 3. Semantika

    • 3.1 Denotatsiooniline ja operatiivne semantika
    • 3.2 Rakendamine ja semantiline tõlgendamine
    • 3.3 Semantika, võrdsus ja identiteet
  • 4. Tõendid ja programmid

    • 4.1 Tõendid arvutiteaduses
    • 4.2 Tõendid matemaatikas
    • 4.3 Füüsiline ja abstraktne korrektsus
  • 5. Arvutatavus

    5.1 Kiriku-Turingi väitekiri

  • 6. Programmeerimis- ja programmeerimiskeeled

    • 6.1 Abstraktsioon
    • 6.2 Tüübid ja ontoloogia
  • 7. Juriidilised ja eetilised küsimused

    • 7.1 Autoriõigused, patendid ja identiteet
    • 7.2 Korrektsus ja vastutus
  • 8. Uued keerdkäigud või uued probleemid?
  • Bibliograafia
  • Muud Interneti-ressursid
  • Seotud kirjed

1. Mõned kesksed probleemid

Alustuseks loetleme, mida peame mõneks keskseks küsimuseks ja küsimuseks. See annab lugejale kiire ülevaate asjadest, mis täiendavad eelseisvat üksikasjalikumat arutelu. Ehkki paljusid neist ei ole kirjanduses otseselt käsitletud ja vajavad veidi täpsustamist, illustreerivad need küsimused, milliseid küsimusi peame PCS -i käsitlema.

  1. Millised asjad on programmid? Kas need on abstraktsed või konkreetsed? (Moor 1978; Colburn 2004)
  2. Millised on erinevused programmide ja algoritmide vahel? (Rapaport 2005a)
  3. Mis on spetsifikatsioon? Ja mida täpsustatakse? (Smith 1985; Turner 2005)
  4. Kas spetsifikatsioonid erinevad põhimõtteliselt programmidest? (Smith 1985)
  5. Mis on teostus? (Rapaport 2005b)
  6. Mis eristab riistvara tarkvarast? Kas programme eksisteerib nii füüsilises kui ka sümboolses vormis? (Moor 1978; Colburn 2004)
  7. Millised asjad on digitaalsed objektid? Kas nende majutamiseks on vaja uut ontoloogilist kategooriat? (Allison jt 2005)
  8. Mis on programmeerimiskeelte erinevate semantiliste teooriate eesmärgid? (Valge 2004; Turner 2007)
  9. Kuidas seostuvad küsimused programmeerimiskeelte filosoofias paralleelsete küsimustega keelefilosoofias? (Valge 2004)
  10. Kas modulaarsuse põhimõte (nt Dijkstra 1968) on seotud täieliku abstraktsiooni ja kompositsioonilisuse kontseptuaalsete probleemidega?
  11. Millised on peamised kontseptuaalsed erinevused järgmiste programmeerimisparadigmade vahel: struktureeritud, funktsionaalne, loogiline ja objektorienteeritud programmeerimine?
  12. Millised on tüübid arvutiteaduses? (Barandregt 1992; Pierce 2002)
  13. Mis vahe on operatiivsel ja denatsionaalsel semantikal? (Turner 2007)
  14. Mida tähendab programmi korrektsus? Milline on õigsuse tõendite epistemoloogiline seisund? Kas need erinevad põhimõtteliselt matemaatika tõenditest? (DeMillo jt 1979; Smith 1985)
  15. Mida õigsuse tõestamine kehtestab? (Fetzer 1988; Fetzer 1999; Colburn 2004)
  16. Mis on abstraktsioon arvutiteaduses? Kuidas on see seotud abstraktsiooniga matemaatikas? (Colburn & Shute 2007; Fine 2008; Hale & Wright 2001)
  17. Mis on ametlikud meetodid? Mis on ametlikes meetodites formaalne? Mis vahe on ametlikul ja mitteametlikul? (Bowen & Hinchey 2005; Bowen & Hinchey 1995)
  18. Milline distsipliin on informaatika? Millised on matemaatilise modelleerimise ja katsetamise rollid? (Minsky 1970; Denning 1980; Denning 1981; Denning jt 1989; Denning 1985; Denning 1980b; Hartmanis 1994; Hartmanis1993; Hartmanis 1981; Colburn 2004; Eden 2007)
  19. Kas programme tuleks käsitleda teaduslike teooriatena? (Rapaport 2005a)
  20. Kuidas kasutatakse matemaatikat arvutiteaduses? Kas matemaatilisi mudeleid kasutatakse kirjeldaval või normatiivsel viisil? (Valge 2004; Turner 2007)
  21. Kas kiriku-Turingi lõputöö hõlmab loogika ja matemaatika matemaatilist mõistet efektiivse või mehaanilise meetodi kohta? Kas see kajastab arvutusi, mida inimene saab teostada? Kas selle reguleerimisala kehtib füüsiliste masinate suhtes? (Copeland 2004; Copeland 2007; Hodges 2006)
  22. Kas arvutusliku mõtlemise mõiste suudab vastu pidada filosoofilisele kontrollile? (Tiib 2006)
  23. Milline on asjakohane loogika programmi õigsuse ja lõpetamise põhjendamiseks? (Hoare 1969; Feferman 1992) Kuidas sõltub loogika aluseks olevast programmeerimiskeelest?
  24. Mis on teave? (Floridi 2004; Floridi 2005) Kas see mõte valgustab mõnda siin loetletud küsimust?
  25. Miks on programmeerimiskeeli ja programmeerimisparadigmasid nii palju? (Krishnamurthi 2003)
  26. Kas programmeerimiskeeled (ja paradigmad) on teaduslike teooriate olemusega? Mis põhjustab programmeerimise paradigma muutust? (Kuhn 1970)
  27. Kas tarkvaratehnika tõstatab mingeid filosoofilisi küsimusi? (Eeden 2007)

Järgnevas osas paneme mõnele neist küsimustest pisut liha.

2. Olemasolu ja identiteet

Kuidas kategoriseerida ja eristada arvutiteaduse olemeid ja mõisteid? Millised asjad need on ja mis määrab nende identiteedi? Näiteks on mõned selgelt konkreetsed füüsilised objektid (nt kiibid, ruuterid, sülearvutid, graafikakaardid) ja mõned mitte (nt formaalsed grammatikad, abstraktsed masinad, teoreemiprogrammid, loogilised raamistikud, protsessi algebrad, abstraktsed andmetüübid). Kuid mõne keskse mõiste, näiteks programmide ja andmete kirjeldamine on olnud problemaatilisem. Eelkõige ei peeta programmide ontoloogilist staatust täiesti sirgjooneliseks ega käsitleta ka nende identiteedikriteeriume.

2.1 Programmide kahetine olemus

Paljud autorid (Moor 1978; Rapaport 2005b; Colburn 2004) arutavad programmide niinimetatud kahetist olemust. Näib, et programmil on nii tekstiline kui ka mehaaniline või protsessitaoline varjund. Saate teksti saab redigeerida. Kuid selle manifestatsioon masinloetaval kettal omab üsna erinevaid omadusi. Eelkõige saab seda teostada füüsilises masinas. Nii et identsuste eristamatuse põhimõtte (§3.3) kohaselt ei saa need kaks varjundit olla üks ja sama üksus. Muidugi on igaüks, keda see kahepalgelisus veenab, kohustatud midagi ütlema nende kahe näilise eksistentsi vormi vahelise seose kohta.

Üks otsene soovitus on, et üks programmi manifestatsioon on teise rakendamine, st füüsiline manifestatsioon on tekstilise rakendamine. Isegi arvutiteaduse piirides pole aga kohe selge, kas sõna rakendamine viitab ainult ühele mõistele. Sageli kasutatakse seda viitamiseks kompileerimisprotsessi tulemusele, kus kõrgetasemelises keeles (lähtekoodis) olev programm teisendatakse masinakeeleks (objekti kood). Kuid sama sageli kasutatakse seda protsessile viitamiseks, kus lähtekood realiseeritakse riistvarasse otse (nt konkreetne teostus pooljuhtides). Ja arvatavasti on see asjakohane mõte. Kuid ilma rakendamise mõiste (§3.2) enda (Rapaport 2005b) üksikasjalikuma filosoofilise analüüsita,on ebaselge, kuidas see arutelu edasi viib; näib, et me ainult nimetasime kahe näilise eksistentsi vormi vahelist suhet. Sarnaselt on teised kirjeldanud programmi teksti ja programmi protsessi suhet sarnastena plaani ja selle avaldamise vahelise füüsiliste toimingute seeriaga. Kuid see ei tundu olevat programmi-protsesside sidumisega üsna analoogne: meil pole kiusatust viidata plaanile ja füüsilisele protsessile kui ühe ja sama asja erinevatele ilmingutele. Näiteks kas meil on kiusatus mõelda välja jalutuskäigu plaan ja tegelik jalutuskäik sama asja erinevate tahkudena?teised on kirjeldanud programmi teksti ja programmiprotsessi vahelist seost sarnasena plaani ja selle avaldamise vahelise füüsiliste toimingute seosena. Kuid see ei tundu olevat programmi-protsesside sidumisega üsna analoogne: meil pole kiusatust viidata plaanile ja füüsilisele protsessile kui ühe ja sama asja erinevatele ilmingutele. Näiteks kas meil on kiusatus mõelda välja jalutuskäigu plaan ja tegelik jalutuskäik sama asja erinevate tahkudena?teised on kirjeldanud programmi teksti ja programmiprotsessi vahelist seost sarnasena plaani ja selle avaldamise vahelise füüsiliste toimingute seosena. Kuid see ei tundu olevat programmi-protsesside sidumisega üsna analoogne: meil pole kiusatust viidata plaanile ja füüsilisele protsessile kui ühe ja sama asja erinevatele ilmingutele. Näiteks kas meil on kiusatus mõelda välja jalutuskäigu plaan ja tegelik jalutuskäik sama asja erinevate tahkudena?kas meil on kiusatus mõelda jalutuskäigu plaani ja tegelikku jalutuskäiku kui sama asja erinevaid tahke?kas meil on kiusatus mõelda jalutuskäigu plaani ja tegelikku jalutuskäiku kui sama asja erinevaid tahke?

Võib-olla kirjeldab asju kõige paremini see, kui öeldakse, et programmid tekitavad tekstiliste objektidena mehaanilisi protsesse? Idee näib olevat selline, et millegipärast põhjustab tekstiline objekt füüsiliselt mehaanilise protsessi. Kuid näib, et see nõuab sellise põhjusliku seose olemuse põhjalikku analüüsi. Colburn (2004) eitab sümboolse teksti põhjuslikku mõju; sellist mõju avaldab selle füüsiline avaldumine (kettal asuv asi). Tarkvara on konkreetne abstraktsioon, millel on kirjeldus (tekst, abstraktsioon) ja täitmisviis (nt konkreetne teostus pooljuhtides).

Pisut erinev vaatenurk nendes küsimustes algab programmi identiteedi küsimusest. Millal võetakse kaks programmi samaks? Sellised probleemid tekivad näiteks katsetes tuvastada tarkvara tüki juriidiline isik. Kui tuvastame programmi selle tekstilise ilminguga, on programmi identiteet tundlik muutuste suhtes selle välimuses (nt fondi muutmine). Ilmselt ei anna tekst ainuüksi filosoofiliselt huvitavat mõistet programmi identiteedist üksi. Pigem peame teadliku identiteedikriteeriumi saavutamiseks võtma rohkem arvesse semantikat ja teostust. Naaseme selle teema juurde punktides 3 ja 6.

2.2 Programmid ja algoritmid

Ükskõik, mis suunas me programme võtame, vajab algoritmiprogrammide eristamine ka täiendavat kontseptuaalset selgitust. Algoritme peetakse sageli matemaatilisteks objektideks. Kui see on tõsi, kuuluvad paljud neid puudutavad filosoofilised küsimused ka matemaatika filosoofiasse. Algoritmid on aga vaieldamatult arvutiteaduse kui matemaatika keskmes ja väärivad rohkem filosoofilist tähelepanu kui neile on antud. Ehkki teoreetilise arvutiteaduse ja matemaatilise loogika osas on algoritmide osas tehtud arvukaid matemaatilisi uuringuid (nt Moschovakis 1997; Blass & Gurevich 2003), pole olnud palju filosoofilisi arutelusid, mis keskenduksid algoritmide olemusele ja erinevustele algoritmid ja programmid.

Kas on nii, et algoritmid on abstraktsed objektid Roseni (2001) pakutud tähenduses, samas kui programmid on konkreetsed? Täpsemalt, kas algoritmid on programmilise tekstiobjekti abstraktsed matemaatilised vasted? See pilt sobib loomulikult ontoloogilise platonismi vormiks (Shapiro 1997), kus algoritmidel on ontoloogiline prioriteet ja programmid pakuvad keelelisi vahendeid nende saavutamiseks. Selles vaates võidakse programmeerimiskeelte semantika (§3) esitamiseks kasutada algoritme. Muidugi pärib see pilt kõik sellise platoonilise vaatenurga plussid ja probleemid (Shapiro 1997).

Vähem platooniline seisukoht on, et algoritmid sisaldavad programmis väljendatud ideid. Seaduses on seda peetud põhjuseks, et erinevalt programmidest pole algoritmid autoriõigusega kaitstavad (§7.1). Mõiste idee vajab muidugi täiendavat filosoofilist analüüsi. Tõepoolest, võib väita, et algoritmi pelk mõiste vajab palju vähem selgitamist kui standardne ideede kirjeldus ja sellega seotud abstraktsiooni mõisted (Rosen 2001).

Lõpuks on peaaegu rahvaluule seisukoht, et Turingi masinad pakuvad meile algoritmi mõiste ametlikku analüüsi. Kuid kas see sobib kaasaegses arvutiteaduses kasutatava arusaamaga keerukate esindatuse ja juhtimise mõistetega? Moschovakis (1997) pakub analüüsi, mis läheb mõnevõrra paremini.

2.3 Programmid ja spetsifikatsioonid

Teine populaarne eristamine, mis peaks olema mõne kriitilise analüüsi teema, toimub programmide ja spetsifikatsioonide osas. Mis on spetsifikatsioonid ja mille poolest need erinevad programmidest? Kuigi filosoofilises kirjanduses pole selle teema kohta otsest arutelu (kuid vt Smith 1985), on spetsifikatsioonide olemus arvutiteaduse kontseptuaalsete aluste jaoks põhiküsimus.

Üks seisukoht, mida tavaliselt leidub ametlike spetsifikatsioonide õpikutes, on see, et programmid sisaldavad üksikasjalikke masina juhiseid, samas kui (funktsionaalsed) kirjeldused kirjeldavad ainult sisendi ja väljundi suhet. Üks ilmne viis selle lahti pakkimiseks on kohustuslik / kirjeldav eristamine: programmid on hädavajalikud ja kirjeldavad, kuidas saavutada spetsifikatsioonis kirjeldatud eesmärki. Kindlasti näib, et imperatiivses programmeerimisparadigmas on see sisuline erinevus. Kuid see pole kõigile sobiv. Näiteks loogika, funktsionaalsed ja objektorienteeritud programmeerimiskeeled ei reguleeri seda ilmselgelt: nimiväärtuses võetakse sellistes keeltes kodeeritud programmides kasutusele definitsioonide jaod, mitte „käsud“. Lisaksmittefunktsionaalseid spetsifikatsioone ei saa sõnastada sisendi ja väljundi vahelise seose kohta avaldustena, kuna need seavad nõuded kavandile ja juhistele, mis võivad mis tahes programmis sisalduda.

Veel üks seisukoht nõuab, et spetsifikatsioonide ja programmide erinevus tuleks leida rakendamise mõistes, st kas seda saab koostada ja täita? Aga mida selle all mõeldakse? Kas see on mõeldud olemasoleva kompilaatori olemasolu mõttes? See tõlgendus on üsna madal, kuna see ei paku eristamise kontseptuaalset kriteeriumi, vaid tingimuslikku. Näiteks on programmeerimiskeelte esimese viie põlvkonna jooksul (20. sajandi teine pool) ühe põlvkonna rekursiivsed, modulaarsed, funktsionaalsed ja objektorienteeritud spetsifikatsioonid tulnud liigendada järgmistes programmides, st tänapäeva spetsifikatsioonikeeltes. muutuvad sageli homseks programmeerimiskeeleks.

Teine seisukoht viitab sellele, et programmeerimiskeeled on need keeled, millel on põhimõtteline rakendamine, samas kui spetsifikatsioonide keeled on need, mida ei saa. Ja arvatavasti on põhjus, miks nad seda ei saa, see, et spetsifikatsioonkeeled võimaldavad väljendada mõisteid, mis pole Turingi arvutatavad. See eristamine on kooskõlas paljude olemasolevate spetsifikatsioonikeeltega, mis põhinevad Zermelo-Fraenkeli komplekti teoorial ja kõrgema astme loogikal. Siiski tundub veider, et spetsifikatsioonikeelt peaks iseloomustama asjaolu, et see suudab väljendada mittearvutatavaid omadusi ja seoseid. Kas mõni neist mittearvestatavatest nõudmistest on praktikas tõesti vajalik (Jones & Hayes 1990; Fuchs 1994)?

Nende vaadete mitmekesisus viitab sellele, et traditsiooniline binaarne lõhe spetsifikatsioonide ja programmide vahel on näide PCS-i küsimusest, mis väärib suuremat tähelepanu mitte ainult kontseptuaalse selgituse saamiseks, vaid ka seetõttu, et sellel võib olla mõju tulevaste programmeerimis- ja spetsifikatsioonikeelte kujundamisele.

3. Semantika

Programmeerimiskeele grammatika määrab ainult selle, mis on süntaktiliselt õigustatud; see ei teavita meid oma konstruktsioonide kavandatud tähendusest. Seega ei määra programmeerimiskeele grammatika iseenesest seda, mida inimesed programmeerivad. Selle asemel võetakse aluseks semantilise (formaalse või mitteametliku) kontoga rikastatud grammatika. Semantika on mõeldud programmeerija, kirjutaja ja teoreetiku informeerimiseks, kes on huvitatud keele omaduste uurimisest. Tõepoolest, sageli väidetakse, et programmeerija ja koostaja kirjutaja erinevate nõuete täitmiseks on vaja erinevaid semantilisi kontosid, abstraktsiooni erinevatel tasemetel. Ja teoreetiku ülesanne on uurida nende suhet.

See on standardpilt, mis ilmneb semantilises kirjanduses. Kuid suur osa sellest vajab kontseptuaalset selgitamist. Selles osas käsitleme vaid mõnda küsimust, mis selle tegevusega kaasnevad.

3.1 Denotatsiooniline ja operatiivne semantika

Programmeerimiskeelte semantika üks olulisemaid eristusi keskendub operatiivse ja denatsionaalse semantika eristamisele. Operatiivne semantika (Landin 1964; Plotkin 1981) pakub programmeerimiskeele tõlgendust mingi abstraktse masina tähenduses. Täpsemalt on see programmeerimiskeeles olevate avaldiste tõlkimine abstraktse masina juhistesse või programmidesse. Näiteks pakitakse programm 1 lahti abstraktsete masinoperatsioonide jadasse, nagu „a ← 0” ja push. Operatiivset semantikat võib käsitada ka kui algoritmilist semantikat, eriti kui aluseks olev masin on suunatud algoritmi mõiste iseloomustamisele (nt Moschovakis 1997).

Seevastu denatiivne semantika (Milne & Strachey 1977) pakub tõlgendust matemaatilisteks struktuurideks, näiteks kogumiteks või kategooriateks. Näiteks annavad klassikalises lähenemisviisis matemaatilise raamistiku komplektid - terviklike võrede kujul ja nendel pidevad funktsioonid.

Kuid kas nende vahel on olulisi kontseptuaalseid erinevusi? Kas see, et denatsiooniline semantika, mis põhineb selgesõnaliselt matemaatilistel struktuuridel, näiteks hulgal, on matemaatiline, samas kui operatiivsemantika mitte? Turner (2007) ei väida: nad kõik pakuvad matemaatilisi tõlgendusi.

Või on see, et toimiv semantika on pigem masinakujuline abstraktse masina moodustamise tähenduses, samas kui denatatiivse semantikaga, mis antakse setteoreetiliselt, pole abstraktsest masinast mingit vihjet? Sellised erinevused ei ole aga kontseptuaalselt olulised osutunud, kuna denatiivseid semantilisi kontosid võib käsitleda kui struktuure, mis moodustavad abstraktse masina koos olekute ja nendel toimivate operatsioonidega. Samuti pole tegevuskontod rakendamisele lähemal: denatsionaalsed lähenemisviisid (Milne & Strachey 1977) on samuti väga paindlikud ja suudavad kajastada rakendamise eri tasandeid.

Teine võimalik eristus puudutab semantika kompositsioonilist (või muul viisil) olemust. Lahtiselt öeldes võetakse semantikat kompositsiooniliseks (Szabó 2007), kui keerulise avalduse semantiline väärtus on selle osade semantiliste väärtuste funktsioon. Kompositsioonilisust peetakse semantika oluliseks kriteeriumiks, kuna see on vajalik meie keelelise mõistmise produktiivsuse selgitamiseks: öeldakse, et see selgitab, kuidas me mõistame ja ehitame keerulisi programme. Kuid kas see pakub meile kiilu operatiivse ja denatsionaalse semantika eraldamiseks? Kahjuks tundub, et seda ei tehta: kuigi denatiivsed definitsioonid on mõeldud kompositsioonilisteks, ei ole see kindlasti nii, et kogu operatiivsemantika pole kompositsiooniline.

Lõpuks erinevad mõned semantiliste versioonide variandid rekursiivse mudeli olemasolust, st tõlgendusest Turingi või Gandy masinates (§5.1). Kuid isegi see ei vasta täpselt traditsioonilisele operatiivsele / denatiivsele lõhele. Mõnel denatsionaalsel definitsioonil on rekursiivne mudel ja mõnel mitte.

Tundub, et seda vahet on väga raske maha tõmmata. Selle taustal ei näi olevat teravat kontseptuaalset vahet operatiivse ja denatsionaalse semantika vahel.

3.2 Rakendamine ja semantiline tõlgendamine

Mis vahe on semantilise tõlgenduse ja teostuse vahel? Näiteks, mis on kontseptuaalne erinevus programmi kompileerimisel masinkoodiks ja denatiivse semantika andmiseks selle vahel? Rapaporti (2005b) sõnul vaadeldakse teostust kõige paremini semantilise tõlgendusena, kus viimast iseloomustatakse kaardistamise teel kahe domeeni vahel: süntaktiline ja semantiline. Ja neid mõlemaid määravad mõne kirjelduse reeglid. Näiteks kompileeritud kood (koos selle semantikat reguleerivate reeglitega) on lähtekoodi semantiline konto.

Mõiste 'rakendamine' üldises tähenduses pakub semantilist domeeni füüsiline masin. Teisisõnu, füüsiline masin ise ('rakendamine') määrab selle, mida programm tähendab. Näiteks programmeerimiskeeltes võrdub see väitega, et C ++ programmeerimiskeele semantika määrab Bjarne arvuti, kus töötab tema C ++ kompilaator. Kuid see seletus on ilmselgelt ebapiisav: Kui eeldada, et Bjarne masin määrab C ++ programmide tähenduse, siis ei saa rääkida rikkest või väärast tõlgendamisest: ükskõik, mida Bjarne arvuti teeb, on ipso facto programmi tähendus. Kuid kindlasti võib elektritorm põhjustada masina valesti minekut. Mida võiksime aga valesti minnes tähendada? Arvatavasti ei kehasta (rikkega) masin kavandatud tähendust. Aga,omakorda näib, et me saame seda fraasi mõista ainult tähenduse mingist masinast sõltumatust iseloomustusest lähtudes. Ja mõnel tasandil tuleb see anda sõltumatu semantilise kirjelduse kaudu. See viitab sellele, et tühja teostuse mõiste ei paku semantikast adekvaatset mõistet. (Võrdle: Kripke 1982; Wittgenstein 1953).

3.3 Semantika, võrdsus ja identiteet

Lõpetasime programmi võrdsuse (§2.1) arutelu lubadusega tuua pildile semantika. Iga programmeerimiskeele semantiline konto määrab programmide võrdsuse mõiste, nimelt peetakse kahte programmi võrdseks, kui neil on sama semantiline väärtus, st

P = Q iff || P || = || Q ||

kus || P || on programmi P semantiline väärtus. Nii et selles tähenduses määrab iga semantiline konto võrdsuse kriteeriumi. Näiteks denatsionaalse semantika üks versioon abstraktselt eemalduks kõigist arvutuslikest sammudest ja võrdsustaks programme, mis mingis mõttes arvutavad sama matemaatilise funktsiooni. Näiteks loetakse selle kriteeriumi alusel võrdseks järgmised kaks programmi:

funktsioon Faktoriaal (n: täisarv): täisarv

algab

kui n = 0, siis Faktoriaal: = 1;

else

Factorial: = (n) * Factorial (n -1);

lõpp;

1. programm

funktsioon Faktoriaal (n: täisarv): täisarv

var

x, y: täisarv;

alusta

y: = 1;

x: = 0;

kui x <n algab

x: = x +1;

y: = y * x;

lõpp

Faktoriaal: = y;

lõpp;

2. programm

Teisest küljest ei võtaks operatiivsem vaade, mis viitab arvutamise etappidele, programmi 1 ja programmi võrdseks. Tõepoolest, §3.1 valguses võime välja töötada semantilisi kontosid, mis kajastaksid rakendamise üksikasjade mis tahes taset. Erinevad semantilised kontod määravad võrdsuse erinevad mõisted, mis võivad teenida erinevaid kontseptuaalseid ja praktilisi eesmärke. Millist tuleks aga keele määramiseks võtta? Õnneks on olemas mõned soovimatused, mida saab rakendada; võime kärpida võimalusi: mõned semantilised kontod pakuvad meile identiteedi loogiliselt rahuldavat mõtet, mõned aga mitte.

Indiscernibility kohta identicals on põhimõtteliselt ehitatud tavalise predikaattilogiikalla. Selles öeldakse, et kui kaks objekti on võrdsed, jagavad nad kõiki omadusi. Vastupidine põhimõte, eristamatute identiteetväidab, et kui iga omaduse F korral on objektil x F ja ainult siis, kui objektil y on F, siis x on identne y-ga. Eristamatute identsus tähendab, et kui x ja y on erinevad, siis on olemas vähemalt üks omadus, millel x on ja y mitte. Mõnikord nimetatakse mõlema põhimõtte koosmõju Leibnizi seaduseks (Forrest 2006). Leibnizi seadust peetakse sageli kõigi võrdsuse mõistete jaoks oluliseks. Need seadused sõnastatakse tavaliselt loogiliste teooriatena, näiteks teise astme loogika. Kuid meid huvitab kõige rohkem nende võime eristada erinevaid programmeerimiskeele semantikaid. Tõepoolest, Leibnizi seadus on moodsa semantilise teooria üks keskseid mõisteid. Identiteedikriteerium on täpsustatud vaatlusliku samaväärsuse osas.

Kaks programmi M ja N on määratletud kui vaatluslikult samaväärsedja ainult siis, kui kõigis kontekstides C […], kus C [M] on kehtiv programm, on nii, et ka C [N] on sama semantilise väärtusega kehtiv programm. Näiteks ütleme, et Oracle ja DB2 (relatsiooniandmebaase manipuleerivad programmid) on vastavalt relatsiooniandmebaaside toimingute mõnele semantilisele kirjeldusele vaatluslikult samaväärsed, ja ainult siis, kui teostatakse neid samas kontekstis (opsüsteem, masina arhitektuur, sisend jne).) annab sama andmebaasi. Mõistet vaatluslikult samaväärne tuleb muidugi võtta näputäis soola. Me ei saa selgelt jälgida saate käitumist kõigis kontekstides. Vaatluslik samaväärsus peegeldab siiski põhimõttelist kontseptuaalset nõudmist, mis tuleneb identiteetide eristamatuse põhimõtetest ja tuvastamatute identiteedist.

Kui semantikas on kõigil vaadeldavalt eristatavatel programmidel eristatavad semantilised väärtused, siis öeldakse, et semantika on usaldusväärne. Järelikult vastab heli semantika järgmisele põhimõttele:

|| P || = || Q || tähendab, et igas kontekstis C, || C [P] || = || C [Q] ||

Peaks olema selge, et heli semantikast tulenev identiteedi mõiste vastab identsuste eristamatusele.

Semantika loetakse täielikuks, kui mõni teine programm, millel on selgelt eristuvad semantilised väärtused, on märgatavalt eristatav. Täpsemalt vastab täielik semantika järgmisele:

Kõigis olukordades C, || C [P] || = || C [Q] || vihjab || P || = || Q ||

Jällegi peaks olema ilmne, et täielik semantika vastab eristamatute identiteedi põhimõttele.

Lõpuks öeldakse, et semantika on täiesti abstraktne, kui see on mõistlik ja täielik. Järelikult vastab täielikult abstraktne semantika Leibnizi seadusele.

See loogiline taust annab täielikult abstraktse semantika arengule filosoofilise põhjenduse. Seega pakub see meile viisi semantiliste kontode valimiseks, mis pakuvad võrdsusest filosoofiliselt vastuvõetavaid mõisteid. Muidugi ei määra see ühtegi ainsat mõistet. See pakub ainult tööriista nende tagasilükkamiseks, mis ei suuda saavutada kontseptuaalselt vastuvõetavat. Paljud niinimetatud denatsionaalsed semantikad ei ole täielikult abstraktsed, samas kui paljud operatiivsed. Tõepoolest, üks semantika lähiajaloo keskseid teemasid on hõlmanud täiesti abstraktsete määratluste otsimist, mis kuuluvad semantiliste definitsioonitehnikate klassi, mis võetakse kasutusele denatsionaalse semantika jaoks.

Semantika mängib informaatikas normatiivset või määratlevat rolli. Ilma semantiliste definitsioonideta pole keeltel ja struktuuridel sisu, mis ületaks süntaktiliste kirjelduste sisu. Ja viimastest vaevalt piisab praktilistel või filosoofilistel eesmärkidel. Ehkki oleme alustanud kesksete probleemide analüüsi, oleme kriimustanud vaid pinda.

4. Tõendid ja programmid

Spetsifikatsioonid (punkt 2.3) kutsuvad esile teatud õigsuse idee. Selle mõiste abstraktse tõlgenduse kohaselt loetakse programm (funktsionaalse) spetsifikatsiooni suhtes korrektseks, kui selle sisendi ja väljundi vaheline suhe vastab spetsifikatsioonis sätestatule. Täpsemalt, kui p on programm, siis vastab see spetsifikatsioonile R, mis loetakse seoseks sisenditüübi I ja väljunditüübi O vahel, kui kehtib järgmine:

Kõigi I tüüpi sisendite i korral vastab paar (i, p (i)) suhtele R

kus p (i) on programmi p sisendil i käitamise tulemus. Siin väljendatakse R mõnes kirjelduskeeles ja p mõnes programmeerimiskeeles. Esimene on tavaliselt mõni (tüpitud) predikaatloogika variant ja õigsuse tõestamine (st et väide (1) kehtib) viiakse läbi loogika tõestussüsteemis. Näiteks kasutatakse sageli Hoare loogikat (Hoare 1969), kus korrektsuse tõendid toimuvad järeldustena kolmikute vahel, kirjutatud

B {P} A

kus P on programm ja B ja A on väited (programmi olekud enne ja pärast), mis on väljendatud predikaatloogika mõnes versioonis funktsioonidega, mis hõlbustavad programmi muutujatega seotud väärtuste väljendamist.

Üks filosoofiline poleemika, mis ümbritseb õigsuse küsimust, keskendub selliste tõendite olemusele; teised vaidlustavad selle, mida sellised tõendid pakuvad.

4.1 Tõendid arvutiteaduses

Kas programmi õigsuse tõendid on tõelised matemaatilised tõendid, st kas sellised tõendid on samaväärsed tavaliste matemaatiliste tõenditega? DeMillo jt. (1979) väidavad, et kuna õigsuse tõendid on pikad ja matemaatiliselt madalad, on need erinevalt matemaatika tõenditest, mis on kontseptuaalselt huvitavad, köitvad ja köidavad teiste matemaatikute tähelepanu, kes soovivad neid uurida ja neile tugineda. Näiteks Hoare loogika tõend selle kohta, et programm 2 arvutab faktorifunktsiooni, sisaldaks üksikasju oleku alusmõiste kohta, kasutaks induktiivset argumenti ja loogikavariandi põhjendusi.

Kuid sellised tõestused oleksid palju pikemad kui programm ise. Lisaks nõuaks arutluskäigu kodeerimise tase Hoare loogikas paljude detailide väljendamist ja esitamist, mis tavaliselt kaudseks jäetakse. See oleks tüütu ja enamiku saadete puhul kontseptuaalselt triviaalne.

See argument on paralleelne matemaatikafilosoofias esitatud haaratavuse argumentidega (nt Tymoczko 1979; Burge 1988). Selle keskmes on epistemoloogilised mured: liiga pikad, kohmakad ja ebahuvitavad tõendid ei saa olla tavalise matemaatilise tõestusega omistatud kindluse kandjad. Väidetakse, et õigsuse tõenditest saadud teadmiste laad erineb teadmistest, mida võib saada matemaatika tõenditest [1].

Samuti tuleb eristada seda sisuliselt tõendite sotsioloogilist vaatenurka sellest, mis väidab, et tõendid on õiged või valed viisil, mis on sõltumatu sellistest epistemoloogilistest otsustest. Võimalik on kinni hoida realistlikumast positsioonist, mille kohaselt kõik esitatud tõendid on kas õiged või valed, loobumata nõudmisest, et tõendid, et neid saaks sisse võtta ja kinnitada, peavad olema haaratavad.

Mõnevõrra võiks proovida jõuda, propageerides, et õigsustõendeid peaks kontrollima arvuti, mitte inimene. Kuid loomulikult vajab tõestamiskontroll ise kontrollimist. Arkoudas ja Bringsjord (2007) väidavad, et kui on vaja kontrollida ainult ühte õigsuse tõendit, nimelt tõestamiskontrollija enda oma, siis väheneb vigade võimalus märkimisväärselt.

4.2 Tõendid matemaatikas

Matemaatilised tõendid, näiteks Gödeli mittetäielikkuse teoreemi tõestus, on samuti pikad ja keerulised. Kuid see, mis muudab need matemaatilise kogukonna poolt läbipaistvaks, huvitavaks ja haaratavaks ('jälgitavaks'), on modulaarsuse tehnikate (nt lemmad) kasutamine ja abstraktsiooni kasutamine matemaatilise loomise toimingus. Uute kontseptsioonide kasutuselevõtt võimaldab tõendusmaterjali järk-järgult konstrueerida, muutes tõendid tõestatavamaks. Matemaatika areneb, leiutades uusi matemaatilisi kontseptsioone, mis võimaldavad ehitada kõrgemat taset ja üldisemaid tõestusi, mis oleksid ilma nendeta palju keerukamad ja isegi võimatud. Näiteks võimaldab eksponendimärgistus arvutamist läbi viia korrutamise keerukusest kaugemale ja vaielda tulemuste üle. Teises äärmuseskategooriateooria leiutamine hõlbustas algebraliste struktuuride kohta väga üldiste tulemuste kinnitamist ja tõestamist, mis rakenduvad automaatselt tervele reale sellistele. Matemaatika ei tähenda ainult tõestust; see hõlmab ka abstraktsioonide võtmist ning uute kontseptsioonide ja märkuste loomist. Selle taustal ei kasuta ametlikud õigsuse tõestamised üldiselt uute mõistete loomist ega osale matemaatilise abstraktsiooni protsessis. Arvutiteaduse abstraktsioon (punkt 6.1) on seevastu keskendunud mõistetele, mida on vaja programmi kujundamiseks. Kuid kuidas on need kaks abstraktsiooni mõistet omavahel seotud? Me räägime sellest veidi hiljem.see hõlmab ka abstraktsioonide võtmist ning uute kontseptsioonide ja märkuste loomist. Selle taustal ei kasuta ametlikud õigsuse tõestamised üldiselt uute mõistete loomist ega osale matemaatilise abstraktsiooni protsessis. Arvutiteaduse abstraktsioon (punkt 6.1) on seevastu keskendunud mõistetele, mida on vaja programmi kujundamiseks. Kuid kuidas on need kaks abstraktsiooni mõistet omavahel seotud? Me räägime sellest veidi hiljem.see hõlmab ka abstraktsioonide võtmist ning uute kontseptsioonide ja märkuste loomist. Selle taustal ei kasuta ametlikud õigsuse tõestamised üldiselt uute mõistete loomist ega osale matemaatilise abstraktsiooni protsessis. Arvutiteaduse abstraktsioon (punkt 6.1) on seevastu keskendunud mõistetele, mida on vaja programmi kujundamiseks. Kuid kuidas on need kaks abstraktsiooni mõistet omavahel seotud? Me räägime sellest veidi hiljem.

4.3 Füüsiline ja abstraktne korrektsus

Isegi kui need epistemoloogilised mured kõrvale jätta, tõestab teine ja pealtnäha hävitavam kriitika õigsuse osas kahtluse alla selle, mis nende poolt tegelikult paika pandud. Näib, et õigsuse tõend tagab õigsuse ainult kuni programmi tekstilise esituseni. Mingisugune formaalne töö ei suuda meid abstraktsest / füüsilisest barjäärist ületada: me ei saa kunagi garanteerida, et programmi konkreetne täitmine füüsilisel masinal kulgeb tegelikult ootuspäraselt (Fetzer 1988; Fetzer 1999; Colburn 2004).

Kuid mida tähendab, et programmi p peab olema õige? Oletame, et meil on programmi spetsifikatsioon ja see võib olla ametlik või mitteametlik. Seejärel oletame, et viime läbi rea testimisi, et kontrollida, kas programm vastab spetsifikatsioonile. Kui need õnnestuvad, on meil empiirilisi tõendeid selle kohta, et tekstprogrammi füüsiline vaste on tõepoolest õige, kuna see toimib vastavalt spetsifikatsioonile. Selles vaates katsetati just füüsilist vastaspoolt; mitte tekstprogramm.

See analüüs viitab programmide õigsuse mõiste kahesusele. Kooskõlas programmide kahetise olemusega võiksime öelda, et tekstiline programm on matemaatiliselt korrektne, samas kui selle füüsiline vaste on empiiriliselt kontrollitav.

5. Arvutatavus

Arvutatavus on üks vanimaid teemasid, mida saab märgistada PCS-na. Kuid see on mitme SEP-i sissekande objekt (nt Barker-Plummer 2004) ja seetõttu mainime ainult mõnda teemat ja nende seoseid ülejäänud käesoleva sissekandega.

5.1 Kiriku-Turingi väitekiri

Üks keskseid teemasid on Kiriku-Turingi väitekiri. Ja siin on kaks vaidlust, üks ajalooline ja teine empiiriline. Need keskenduvad lõputöö kahele võimalikule tõlgendusele:

  1. Turingimasinad võivad teha kõike, mida võiks kirjeldada kui “rusikareeglit” või “puhtalt mehaanilist”.
  2. Ükskõik, mida masin saab arvutada (töötamine piiratud andmetega vastavalt juhiste programmile), on Turingi arvutatav masinaga.

I tõlgendus on mõeldud efektiivse või mehaanilise meetodi mõiste loogikas ja matemaatikas haaramiseks. See on mõeldud peegeldama matemaatikas sisalduvat algoritmi mitteametlikku mõistet, mille tõi esile Hilberti programm. II tõlgendus on mõeldud füüsiliste masinate haldamiseks. Tõepoolest, (Gandy 1980) võib vaadelda II edasist pakkimist. Gandy pakub välja neli põhimõtet, mille eesmärk on iseloomustada arvutamist füüsilise masina abil. Ta näitab, et sellised masinad vastavad täpselt Turingi iseloomustusele (Gandy teoreem). Seoses erinevate semantiliste paradigmade aruteluga on selge, et paljud masinad, millel on denatsionaalne semantika (§3.1), ei kvalifitseeru Gandy masinateks. Need töötavad enamasti kõrgema järgu funktsiooniväljadega,ja neid ei saa käsitada lõplike andmetena ning need ei vasta Gandy tingimustele.

Mõned väidavad (Copeland 2004; Copeland 2008), et kiriku ja Turingi pakutud väitekiri puudutab ainult I tõlgendust ega sea masinatele üldist piiri. Hodges (2007) pole nõus. Ta väidab, et Church ja Turing ei eristanud neid kahte tõlgendust. See on ajalooline vaidlus.

Füüsiline vaidlus puudutab tegelike masinate võimalusi (tõlgendus II.) Paljud peavad enesestmõistetavaks, et Kiriku-Turingi väitekiri iseloomustab ja näeb ette tegeliku füüsilise arvutuse. Näiteks näib, et see on tavapärase arvutiteaduse kaudne eeldus. Kindlasti on nii, et iga olemasolevas rakendatud programmeerimiskeeles kirjutatud programm on Turing arvutatav ja vastupidi, kõik üldotstarbelised programmeerimiskeeled on Turing valmis, st need sisaldavad kõiki universaalse Turingi masina simuleerimiseks vajalikke juhtimiskonstruktsioone.

Copeland (2007) väidab, et Gandy diskreetne deterministlik mehaaniline seade on liiga kitsas ja seetõttu on näiteid võimalikest füüsilistest masinatest, mille võimalused ületavad Turingi arvutatavate funktsioonide klassi. Paljud neist nõuavad lõpmatut kiirendamist, kusjuures lõpmatu arvu arvutusi saab füüsiliselt teostada piiratud aja jooksul. Selliste masinate võimaliku näitena on nimetatud kvantarvutust, kuid see on vaidlustatud (Hodges 2007; Hagar 2007).

Hodges tegeleb ka tavalise matemaatilise argumentatsiooni rakendatavusega füüsikas neil juhtudel, kui tegemist on lõpmatu täpsusega. See viitab sellele, et see vaidlus pole lihtne empiiriline. Tõepoolest, on neid, kes kahtlevad, kas on füüsiliselt võimalik lõpmatu arv ülesandeid piiratud aja jooksul täita. Dummett (2006) küsib, kas füüsilises valdkonnas täidetava lõpmatu ülesande mõiste pole mitte ainult füüsiline võimatus, vaid ka kontseptuaalne. Nii et vaidlus ei ole ainult empiiriline, vaid läheb ka meie teadmiste keskmesse matemaatiliste mudelite ja füüsilise reaalsuse suhetest.

6. Programmeerimis- ja programmeerimiskeeled

Programmide ja programmeerimiskeelte kujundamine on üks arvutiteaduse traditsioonilisi tegevusi. Neid ümbritseb hulk kontseptuaalseid küsimusi (§ 1), millest paljud pole saanud mingit filosoofilist tähelepanu. Siin käsitleme lühidalt kahte neist probleemidest.

6.1 Abstraktsioon

Abstraktsioon on üks informaatika kontseptuaalseid nurgakive. See on programmi kavandamise ja ehituse lahutamatu osa ning moodustab põhilise metoodika programmeerimiskeelte kujundamisel. Tõepoolest, see juhib uute programmeerimisparadigmade loomist. See põhineb selliste mõistete leiutamisel nagu protseduuriline ja funktsionaalne abstraktsioon, polümorfism, andmete abstraktsioon, objektid ja klassid, kujundusmustrid, arhitektuuristiilid, alamtüübid ja pärimine. Paljud tarkvaratehnika harud (nt tarkvara modelleerimine, programmi mõistmine, programmi visualiseerimine, pöördprojekteerimine ja ümberehitamine) on seotud peamiselt programmi abstraktsioonide jaoks sobivate mehhanismide uurimisega. Ja suur osa tarkvaratehnika edusammudest on saavutatud tänu uutele abstraktsioonimehhanismidele.

Milline on abstraktsiooni olemus arvutiteaduses? Mis on selle aluseks olev filosoofiline seletus? Kahjuks on abstraktsiooni idee filosoofiliselt problemaatiline. Traditsioonilise arvamuse kohaselt, mis on pärit filosoofilisest psühholoogiast, on abstraktsioon mentaalne protsess, mille käigus uued kontseptsioonid moodustatakse mitme objekti või idee kaalumisel ja neid eristavate tunnuste väljajätmisel. (Rosen 2001). Kuid sellel lähenemisel on vähe, kui üldse, kaasaegseid filosoofilisi pooldajaid.

Loogilisem lähenemine abstraktsiooni analüüsile, millel on siiski tugev pooldus (Wright 1983; Hale 1987). Kuid pole selge, kas need ideed, mis töötati välja matemaatiliseks abstraktsiooniks, on arvutiteaduses rakendatavad. On selge, et mõned arvutiteaduse abstraktsiooni mõisted olid kas matemaatikas inspireeritud või uuritud abstraktsioonide abil. Milline on nendel erialadel abstraktsiooni kontseptuaalne suhe? Kas nad on põhimõtteliselt erinevad? Kahjuks, kuigi matemaatilise abstraktsiooni filosoofiliste aluste kohta on palju kirjandust (vt Wright 1983; Hale 1987; Fine 2002), on abstraktsiooni kontseptuaalne uurimine arvutiteaduses alles lapsekingades. Colburn (2007) väidab, et erinevus matemaatika abstraktsiooni ja arvutiteaduse abstraktsiooni vahel seisneb selles, et matemaatikas on abstraktsioon teabe unarusse jätmine, arvutiteaduses aga teabe varjamine. See tähendab, et matemaatika abstraktsioonides eiratakse seda, mida peetakse ebaoluliseks (nt sarnaste kolmnurkade värv). Seevastu arvutiteaduses ei tohi üks madalama taseme (nt virtuaalne) tähelepanuta jätta üksikasju, mida ei võeta ühel abstraktsiooni tasemel (nt Java programmeerijad ei pea muretsema konkreetse muutujaga seotud mälu täpse asukoha pärast). masin tegeleb kõigi mälu eraldistega).abstraktsioonid matemaatikas eiravad seda, mida peetakse ebaoluliseks (nt sarnaste kolmnurkade värv). Seevastu arvutiteaduses ei tohi üks madalama taseme (nt virtuaalne) tähelepanuta jätta üksikasju, mida ei võeta ühel abstraktsiooni tasemel (nt Java programmeerijad ei pea muretsema konkreetse muutujaga seotud mälu täpse asukoha pärast). masin tegeleb kõigi mälu eraldistega).abstraktsioonid matemaatikas eiravad seda, mida peetakse ebaoluliseks (nt sarnaste kolmnurkade värv). Seevastu arvutiteaduses ei tohi üks madalama taseme (nt virtuaalne) tähelepanuta jätta üksikasju, mida ei võeta ühel abstraktsiooni tasemel (nt Java programmeerijad ei pea muretsema konkreetse muutujaga seotud mälu täpse asukoha pärast). masin tegeleb kõigi mälu eraldistega).

Kuid kas see põhineb matemaatikas liiga lihtsustatud mõistel abstraktsioon? Kas on olemas ainult ühte laadi mõiste? Näiteks Bishopi analüüsis (Bishop 1970) varjatud teave erineb Wrighti abstraktsiooni mõistest üsna erinevalt - on tõepoolest üsna sarnane arvutiteadusega.

6.2 Tüübid ja ontoloogia

Programmeerimiskeeled on enamasti trükitud keeled, kus tänapäevane tüüptõlge pärineb Frege'ist ja Russellist ning eriti Russelli lihtsast tüüpi teooriast (Irvine 2003). Muidugi motiveerisid Russelli loogilised ja semantilised paradoksid ning see funktsioon ei ole tüüpide rakendamisel arvutiteaduses keskne. Teisest küljest nikerdavad Russelli tüübid diskursuse universumit viisil, millel on nii grammatiline kui ka semantiline import. Ja see idee on kantud üle arvutiteaduses. Tüüpi teooriad on tõepoolest inspireerinud ja rikastanud arvutiteadus. Näiteks on Russelli tüüpi teooria, ehkki matemaatiliselt võimas, oma väljendusjõu osas mõneti vaesunud, võrreldes tänapäevaste arvutikeelte tüübiteooriatega (Coquand 2006; Pierce 2002). Lisaks paljudele põhitüüpidele, nagu numbrid ja tõeväärtused, sisaldavad programmeerimiskeeled tüübikonstruktorite kogumit (kuidas vanu uusi tüüpe ehitada). Nende hulka kuulub näiteks võime moodustada mingit Cartesiuse toodet ja piiratud komplekte. Paljudes objektorienteeritud programmeerimiskeeltes võivad tüübid (klassid) teistest tüüpidest toiminguid importida (ja neid alistada) ning pakkuda keerukamaid konstruktoreid, mis toetavad abstraktsete andmetüüpide ja polümorfismi erinevate vormide moodustamist.tüübid (klassid) võivad importida (ja alistada) toiminguid teistest tüüpidest ja pakkuda keerukamaid konstruktoreid, mis toetavad abstraktsete andmetüüpide ja mitmesuguste polümorfismi vormide teket.tüübid (klassid) võivad importida (ja alistada) toiminguid teistest tüüpidest ja pakkuda keerukamaid konstruktoreid, mis toetavad abstraktsete andmetüüpide ja mitmesuguste polümorfismi vormide teket.

Arvutiteaduses mängivad tüübid rolli, mis on süntaksi ja semantika vahel poolel teel. Esiteks laiendavad need meie tavapärast kontekstivaba grammatika mõistet. Mõned keelefunktsioonid, eriti need, mis võimaldavad muutuja tüüpi konteksti abil fikseerida (st keeledeklaratsioonid), vajavad tavalisest paindlikumat grammatikavormi. Nn kahetasemelised grammatikad, ehkki tehniliselt sobivad, ei hõlma muutujate tüüpide omistamise viisi moodsates keeltes. Ja neid on väga kohmakas kasutada. Samuti ei suuda nad end kergesti kohandada paljude keelte polümorfsete tüübisüsteemidega. Kaasaegsetel tüübisüsteemidel läheb paremini: muutujatele omistatakse nende tüübid deklaratsioonide kaudu, nt x: Boolean. Seejärel saab kompilaator programmi tüüpkontrollida, nt.see võib tagada muutuja esinemise järgmistes avaldustes (nt

Kuid tüübid täidavad ka korrektsusrolli, mida tavaliselt süntaktiliselt ei kirjeldata. See teeb seda, laiendades mõõtmete analüüsi traditsioonilist füüsikalist mõistet palju rikkamale tüübisüsteemile. Programmi jaoks õige tüübi ülesehituse saamine aitab tagada selle õigsuse. Ja selle määrab struktuur, mille tüübid keelele kehtestavad. Tüübid määravad programmeerimiskeeles olemas olevad asjad. Nii näiteks kehtestab iga programmeerimiskeel, mis aktsepteerib numbreid, tooteid ja klasse ega midagi muud, programmeerijale kontseptuaalse raamistiku, milles ta peab töötama. Probleemid tuleb liigendada ja lahendused leida tüübisüsteemi pakutavate esindamisvõimaluste kaudu. Kui programmeerimiskeele tüübistruktuur on paika pandud, on suur osa selle ontoloogilisest seadistusest fikseeritud.

Või on? Võib-olla peame tagasi astuma ja kõigepealt küsima, kuidas määrata kindlaks keele ontoloogilised kohustused. Kas määravad semantika (Turner & Eden 2007)? Frege’ist pärinev pikk traditsioon soovitab seda (Dummett 1991). Kui eeldada, et analoogia looduslike keeltega on õigustatud, määravad keele ontoloogia selle semantiliste domeenide sisustamiseks vajalikud struktuurid. Kuid millise semantilise teooria peaksime omaks võtma? Kuigi igasugune semantika peab arvestama tüüpidega, läheks semantiliselt kindlaksmääratud ontoloogia neist kaugemale ja kajastaks semantilisi valdkondi ning need kajastaksid semantikas sisalduvat rakenduse detaili. Nii nagu ka võrdsuse puhul, määravad erinevad semantilised tõlgendused erinevad ontoloogiad. Sellest järeldub, et pole mõistlik rääkida programmeerimiskeele ontoloogiast, vaid mitmest ontoloogiast, mis sõltuvad semantikas kasutatava abstraktsiooni tasemest. Näiteks võib ontoloogia osaliselt kindlaks määrata ka programmeerimisparadigma.

7. Juriidilised ja eetilised küsimused

Mõned arvutieetika probleemid kuuluvad PCS-i, kuna tarkvara loomise ja kasutamisega seotud tegevus tõstatab eetilisi küsimusi. Paljud ei ole aga infotehnoloogia spetsiifilised selle sissekande kitsamas tähenduses; need puudutavad kogu infotehnoloogiat ja arvutirakendusi (Bynum 2001). Järelikult mainime ainult kahte, mis tunduvad arvutiteaduses kesksel kohal.

7.1 Autoriõigused, patendid ja identiteet

Autoriõigused pakuvad tarkvarale teatavat kaitset, kuid nad ei suuda selle semantilist tuuma kaitsta. Ja me arvame, et viimane tuleb kindlaks määrata programmeerimiskeele semantilise konto abil (§3), milles programm kirjutatakse. Eeldatavasti puudutab selle küsimuse sisu programmi identiteedi probleemi (§3.3). Kuid kui identiteedi semantilisi mõisteid on palju, siis milline neist on õiguslikuks kohaldamiseks sobiv?

Üks mitteametlik semantiline konto, mida sageli seaduses viidatakse, identifitseerib programmi selles väljendatud ideedega, enamasti võetakse aluseks selle algoritm. Kuid mitte ainult pole sageli raske täpselt öelda, mis see algoritm endast kujutab, vaid ka nagu matemaatiliste teoreemide puhul, ei saa algoritme autoriõigustega kaitsta. Ja peaaegu sama saatus ootab ka mis tahes formaalset semantilist kontot, kuna sellise määrab mingi matemaatiline mõiste, olgu see siis algoritmid või mõni toimingu või matemaatilise funktsiooni mõiste.

Kuid isegi kui me leiaksime semantilise konto, mis vastaks autoriõiguse seadustele, ei oleks juriidiline pilt täielik. Autoriõiguse rikkumine sõltub sageli mitte ainult mingist identiteedist, vaid ka sellest, kas on usutav arvata, et keegi tuleks välja sama programmiga. Nii et tahtlikud kaalutlused satuvad raami. Teisisõnu, isegi kui kahte programmi loetakse meie semantilise kriteeriumi kohaselt võrdväärseks, siis autoriõiguse rikkumist ei peeta, kui võiks uskuda, et need on loodud iseseisvalt.

Patendid (eriti kasulike patentide puhul) pole paremad. Neid on tarkvara jaoks veelgi raskem hankida, kuna vaimseid protsesse, abstraktseid ideid ja algoritme ei saa patenteerida. Ja sageli sisaldavad uued ideed pigem algoritmid kui lähtekood. Kuid jällegi on keskseks filosoofiliseks mureks identifitseerimise ja identiteedi probleemid. Ja need hõlmavad nii semantilisi kui ka tahtlikke kaalutlusi.

7.2 Korrektsus ja vastutus

Kas on õige, et tarkvara müüakse vähese eesmärgiga sobivuse garantiiga? (Coleman 2008) on pühendatud sellele küsimusele. See on eriti asjakohane küsimus ohutuskriitiliste süsteemide jaoks, nt süsteemid, mis jälgivad terviseseisundit, käitavad tuumaelektrijaamu ja suhtlevad kosmosesüstikutega. Rangema testimise ja õigsuse tõestamise jõustamine näib siin hädavajalik. Kuid kas eetilises plaanis on programmeerija juhtum, kes ei suuda oma programmi analüüsida ja testida, teisiti kui see, mis puudutab ehitusinsenerit, kes ei vii läbi ehitise nõutavat matemaatilist modelleerimist ja katseid? Moraalsed kohustused tunduvad sarnased.

Üks viis, kuidas need võivad erineda, on seotud tarkvara keerukusega (Brooks 1987), mis ületab suurusjärkude võrra mis tahes muu inimliku eseme keerukuse. Paljud väidavad, et sellise õigsuse garantii pakkumine pole teostatav (DeMillo jt 1979); tarkvara on nii keeruline, et range matemaatilise tõestuse ja tarkvara testimise protsess on võimatu. Ja arvatavasti võib inimesel olla ainult (moraalne või juriidiline) kohustus teostada teostatav protsess.

Kuid kuidas tasakaalustada tarkvaraarenduse tõestamis- ja testimisaspekte tarkvara kavandatud kasutamisega? Kas meelelahutuseks väljatöötatud tarkvara suhtes tuleks kohaldada sama ranget tõestamist ja testimist kui ohutusele kriitilise tähtsusega tarkvara suhtes? Eeldatavasti mitte, kuid meil võib siiski tekkida kiusatus küsida, kas need on uued eetilised probleemid või pakuvad need meile lihtsalt olemasolevate eetiliste dilemmade edasisi juhtumianalüüse? Näiteks võivad isegi meelelahutustööstuses kasutatava tarkvara turvaprobleemid kaasa tuua rahalisi karistusi.

8. Uued keerdkäigud või uued probleemid?

Isegi see üsna lühike ülevaade PCS-istpeaks lugejat veenma, et infotehnoloogia tõstatab huvitavaid ja nõudlikke filosoofilisi küsimusi. Tõepoolest, üks ülimuslik mulje on see, et sellel on olulised sidemed enamiku traditsiooniliste filosoofiaharudega. Ontoloogia, eetika, epistemoloogia ning matemaatika, füüsika ja keele filosoofiatega on selged seosed. Meie esialgne küsimuste loetelu tõstatab tõepoolest palju teisi teemasid, mis on seotud teiste filosoofia valdkondadega. Eelkõige on arvukalt kirjandust infotehnoloogia rakenduste kohta. Tehisintellekt ja kognitiivne teadus annavad filosoofilisi küsimusi, mis kuuluvad meelefilosoofia juurde (McLaughlin 2004). Muidugi pärineb suur osa sellest Turingist (1950). Muud arvutiteaduse rakendused traditsioonilistes teadusvaldkondades, nn arvutusteadus,luua küsimusi teadusfilosoofia jaoks: milline on arvutisimulatsioonide epistemoloogiline mõju, eriti kui need on eksperimenteerimise ainus elujõuline vorm? Arvutuslik pööre ontoloogias toob uusi tehnikaid, mis mõjutavad igasuguse kontseptuaalse ontoloogia ülesehitust. Loogikafilosoofiat rikastab suur hulk materjali: arvutisüsteemide esitlemiseks ja põhjendamiseks on tekkinud arvukalt uusi loogilisi süsteeme.arvutisüsteemide kajastamiseks ja põhjendamiseks on tekkinud arvukalt uusi loogilisi süsteeme.arvutisüsteemide kajastamiseks ja põhjendamiseks on tekkinud arvukalt uusi loogilisi süsteeme.

Ehkki on selge, et arvutiteadus tekitab palju olulisi pöördeid traditsiooniliste filosoofiliste probleemide suhtes, on vähem selge, kas see tekitab mingeid tõeliselt uusi filosoofilisi probleeme: kas PCS-is on küsimusi, millel pole paralleeli üheski teises filosoofiaharus?

Bibliograafia

  • Allison, A., Currall, J., Moss, M. ja Stuart, S., 2005, “Digitaalse identiteedi küsimused”, American Society Information Science and Technology ajakiri 56 (4): 364–372.
  • Arkoudas, K. ja Bringsjord, S., 2007, “Arvutid, põhjendamine ja matemaatilised teadmised”, meeled ja masinad 17 (2): 185–202.
  • Barendregt, HP, 1993, “Lambda tüüpi kalkulaadid”, in: Infotehnoloogia loogika käsiraamat, kd. 2, New York, NY: Oxford University Press Inc.
  • Barker-Plummer, D., 2008, “Turing Machines”, Stanfordi filosoofia entsüklopeedia (2008. aasta sügisväljaanne), Edward N. Zalta (toim.), URL = .
  • Bishop, Errett, 1977, Konstruktiivse analüüsi alused, McGraw-Hill.
  • Blass, Andreas ja Gurevitš, Juri, 2003, “Algoritmid: Absoluutsete määratluste otsimine”, Euroopa Teoreetilise Arvutiteaduse Assotsiatsiooni (EATCS) bülletään nr.81: 195-225.
  • Bowen, JP ja Hinchey, MG, 1995, “Kümme käsku ametlikest meetoditest”, IEEE Computer 28 (4): 56–63.
  • Bowen, JP ja Hinchey, MG, 2005, “Ametlike meetodite kümme käsku: kümme aastat hiljem”, IEEE arvuti 39 (1): 40–48.
  • Brooks, FP, 1987, “No Silver Bullet: Tarkvaraehituse olemus ja õnnetused”, IEEE Computer 20 (4): 10-19.
  • Burge, T., 1998, “Arvutikinnitus, Priori teadmised ja muud mõtted”, filosoofilised vaatenurgad 12: 1–37.
  • Bynum, T., 2001, “Arvutieetika: põhikontseptsioonid ja ajalooline ülevaade”, Stanfordi filosoofia entsüklopeedia (2001. aasta talve väljaanne), Edward N. Zalta (toim.), URL =
  • Colburn, T., 2004, “Arvutiteaduse metoodika”, arvutustehnika ja teabe filosoofia Blackwelli juhend, Luciano Floridi (toim), Malden: Blackwell, lk 318–326.
  • Colburn, T., ja Shute, G., 2007, “Abstraktsioon arvutiteaduses”, Minds and Machines 17 (2): 169–184.
  • Coleman, KG, 2008, “Arvutustehnika ja moraalne vastutus”, Stanfordi filosoofia entsüklopeedia (2008. aasta sügisväljaanne), Edward N. Zalta (toim.), URL = .
  • Copeland, B. Jack, 2008, “The Church-Turing Thesis”, Stanfordi filosoofia entsüklopeedia (2008. aasta sügisväljaanne), Edward N. Zalta (toim.), URL = .
  • Copeland, B. Jack, 2004, “Arvutamine”, arvutustehnika ja teabe filosoofia Blackwelli juhend, Luciano Floridi (toim), Malden: Blackwell, lk 3–17.
  • Coquand, Thierry, 2006, “Tüüpide teooria”, Stanfordi filosoofia entsüklopeedia (2006. aasta talve väljaanne), Edward N. Zalta (toim.), URL = .
  • DeMillo, RA, Lipton, RJ ja Perlis, AJ, 1979, “Teoreemide ja programmide sotsiaalsed protsessid ja tõendid”, ACMi teatised 22 (5): 271–280.
  • Denning, PJ, 1980, “Rahvateooriate ja rahvamüütide kohta”, ACM-i teatised 23 (9): 493–494.
  • Denning, PJ, 1980b, “Mis on eksperimentaalne arvutiteadus?” ACM 23 (10) kommunikatsioon: 534–544.
  • Denning, PJ, 1981, “Toimivuse analüüs: eksperimentaalne arvutiteadus oma parimatena”, ACMi teatised 24 (11): 725–727.
  • Denning, PJ, 1985, “Arvutusteadus: mis on arvutiteadus?” Ameerika teadlane 73 (1): 16–19.
  • Denning, PJ (toim.) Jt, 1989, “Arvutustehnika kui distsipliin”, ACM 32 (1): 9–23.
  • Dijkstra, E., 1968. “Minge kahjulikeks peetavate väidete juurde”, ACMi teatised 11 (3): 147–148.
  • Dummett, M., 1991, “Metafüüsika loogilised alused”, Harvard University Press.
  • Dummett, M., 2006, “Mõte ja tegelikkus”, Oxford University Press.
  • Eden, Amnon, 2007, “Kolm paradigmat arvutiteaduses”, mõtted ja masinad 17 (2): 135–167.
  • Feferman, S., 1992, “Funktsionaalsete programmide lõpetamise ja korrektsuse loogika”, arvutiteaduse loogika: 95–127, MSRI pubid. vol. 21, New York, NY: Springer-Verlag.
  • Fetzer, JH, 1988, “Programmi kontrollimine: väga idee”, ACM 31 (9): 1048–1063, teatised.
  • Fetzer, JH, 1999, “Mudelite roll informaatikas”, The Monist 82 (1): 20–36.
  • Fine, K., 2008, “Abstraktsiooni piirid”. Oxford: Oxford University Press.
  • Floridi, Luciano, 2004. “Informatsioon”, arvutustehnika ja teabe filosoofia Blackwelli juhend, Luciano Floridi (toim), Malden: Blackwell, lk 40–62.
  • Floridi, Luciano 2007, “Informatsiooni semantilised kontseptsioonid”, Stanfordi filosoofia entsüklopeedia (2007. aasta kevade väljaanne), Edward N. Zalta (toim), URL = .
  • Forrest, P., 2006, “Nähtamatute identiteet”, Stanfordi filosoofia entsüklopeedia (2008. aasta sügisväljaanne), Edward N. Zalta (toim.), Peatselt ilmuv URL =. >.
  • Fuchs, NE, 1992, “Spetsifikatsioonid on (eelistatavalt) teostatavad”. Tarkvaraehituse ajakiri 7 (5): 323–334.
  • Gandy, R., 1980, “Kiriku väitekiri ja mehhanismide põhimõtted”, Kleene sümpoosion, Barwise, J., Keisler, HJ ja Kunen, K. (toim), Amsterdam: Põhja-Holland.
  • Hagar, Amit, 2007, “Kvantalgoritmid: filosoofilised õppetunnid”, mõtted ja masinad 17 (2): 233–247.
  • Hale, B. ja Wright, C., 2001, “The Reason's Proper Study: Essees for Neo-Fregean matemaatikafilosoofia”, Oxfordi stipendiumid on-line, Oxford: Oxford University Press.
  • Hartmanis, J., 1993, “Mõned tähelepanekud arvutiteaduse olemusest”, loengumärkused arvutiteaduses 761, Shyamasundar, RK (toim): 1–12.
  • Hartmanis, J., 1994, “Turingi auhinna loeng: arvutuslikust keerukusest ja arvutiteaduse olemusest”, ACMi teatised 37 (10): 37–43.
  • Hoare, CAR, 1969, “Aksiomaatiline alus arvuti programmeerimiseks”. ACM 12 (10): 576–585. [Kordustrükk on veebis saadaval]
  • Hodges, A., 2006, “Kas kirikul ja Turingil oli väitekirja masinate kohta?”, Kiriku väitekiri pärast 70 aastat Olszewski, Adam (toim)
  • Hodges, A., 2007, "Kas kvantarvutused saavad lahendada klassikaliselt lahendamatuid probleeme?"
  • Horsten, L., 2008, “Matemaatikafilosoofia”, Stanfordi filosoofia entsüklopeedia (2008. aasta sügisväljaanne), Edward N. Zalta (toim.), URL = .
  • Immerman, N., 2006, “Arvutatavus ja keerukus”, Stanfordi filosoofia entsüklopeedia (2006. aasta sügisel väljaanne), Edward N. Zalta (toim.), URL = .
  • Irvine, AD, 2003, “Russelli paradoks”, Stanfordi filosoofia entsüklopeedia (2006. aasta sügisel väljaanne), Edward N. Zalta (toim), URL =
  • Jones, CB ja Hayes, IJ, 1990, “Spetsifikatsioonid ei ole (tingimata) kahjulikud”, Software Engineering Journal 4 (6): 330–339.
  • Krishnamurthi, S., 2003. Programmeerimiskeeled: rakendamine ja tõlgendamine,
  • Kreisel, G., Gandy, RO, 1975, “Mõningad põhjused rekursiooniteooria üldistamiseks”. Teataja Symbolic Logic 40 (2): 230–232.
  • Kripke, S., 1982, Wittgenstein reeglite ja erakeele kohta. Harvard University Press.
  • Kuhn, TS, 1970, Teaduslike revolutsioonide struktuur, 2. osa. toim., Chicago: Univ. Chicago Pressist.
  • Landin, PJ, 1964, “Lausete mehaaniline hindamine”, Computer Journal 6 (4): 308–320.
  • Milne, R. ja Strachey, C., 1977, Keelesemantika programmeerimise teooria, New York, NY: Halsted Press.
  • McLaughlin, B., 2004, “Computationalism, Connectionism, and Philosophy of Mind”, Blackwelli juhend arvutuste ja teabe filosoofia kohta, Floridi, Luciano (toim.) Malden: Blackwell, lk 135–152.
  • Minsky, M., 1970, “ACM Turingi loeng: vorm ja sisu arvutiteaduses”, Arvutimasinate ühingu ajakiri 17 (2): 197–215.
  • Moor, JH, 1978, “Arvutiteaduse kolm müüti”, Briti ajakiri teaduse filosoofia kohta 29 (3): 213–222.
  • Moschovakis, YN, 1998, “Algoritmiteooria asutamise kohta”, Truth in Mathematics Dales, Harold G. ja Oliveri, Gianluigi (toim), Oxford: Oxford University Press.
  • Pierce, Benjamin C., 2002, tüübid ja programmeerimiskeeled, Cambridge, MA: MIT Press.
  • Plotkin, GD, 1981, “Struktuuriline lähenemine operatiivsele semantikale”, tehn. Rep. DAIMI FN-19, Århusi ülikooli arvutiteaduse osakond, Aarhus, Taani.
  • Rapaport, WJ, 2005a, “Arvutiteaduse filosoofia: sissejuhatav kursus”, filosoofia õpetamine 28 (4): 319–341.
  • Rapaport, WJ, 2005b, “Rakendamine on semantiline tõlgendus: edasised mõtted.” Eksperimentaalse ja teoreetilise tehisintellekti ajakiri 17 (4): 385–417.
  • Rosen, Gideon, 2001. “Abstraktsed objektid”, Stanfordi filosoofia entsüklopeedia (2001. aasta sügisel väljaanne), Edward N. Zalta (toim), URL = .
  • Shapiro, S., 1997, Matemaatikafilosoofia: struktuur ja ontoloogia, Oxford: Oxford University Press.
  • Sieg, Wilfried, 2008, “Kirik ilma dogmata: arvutatavuse aksioomid”, uued arvutuslikud paradigmad, Lowe, B., Sorbi, A. ja Cooper, B. (toim.), Springer-Verlag, 139–152.
  • Smith, BC, 1996, “Arvutite korrektsuse piirid”, arvutistamine ja poleemika, Kling, R. (toim.), Morgan Kaufman, lk 810–825.
  • Szabó, ZG, 2007, “Kompositsioonilisus”, Stanfordi filosoofia entsüklopeedia (2007. aasta kevade väljaanne), Edward N. Zalta (toim), URL = .
  • Thomason, R., 2005, “Loogika ja tehisintellekt”, Stanfordi filosoofia entsüklopeedia (2005. aasta suve väljaanne), Edward N. Zalta (toim.), URL = .
  • Turner, Raymond ja Eden, Amnon H., 2007, “Programmeerimiskeele ontoloogia poole”, arvutamine, teave, tunnetus - Nexus ja Liminal, Dodig-Crnkovic, Gordana ja Stuart, Susan (toim), Cambridge, Suurbritannia: Cambridge Scholars Press, lk 147–159.
  • Turner, Raymond, 2005, “Spetsifikatsiooni alused”, ajakiri Logic Computation 15: 623–662.
  • Turner, Raymond, 2007, “Programmeerimiskeelte mõistmine”. Minds and Machines 17 (2): 129–133
  • Tymoczko, T., 1979, “Neljavärviline probleem ja selle filosoofiline tähtsus”, ajakiri Filosoofia 76 (2): 57–83.
  • White, G., 2004, “Arvutikeelte filosoofia”, arvutustehnika ja teabe filosoofia Blackwelli juhend, Floridi, Luciano (toim), Malden: Blackwell, lk 318–326.
  • Wing, JM, 2006, “Computational Thinking”, ACMi kommunikatsioon, 49 (3): 33–35.
  • Wittgenstein, L., 1953. Filosoofilised uurimised. Kirjastus Blackwell.
  • Wright, Crispin, 1983, Frege kontseptsioon numbritest kui objektidest, Aberdeen University Press.

Muud Interneti-ressursid

  • Essexi ülikoolis arvutiteaduse filosoofia
  • Rahvusvaheline Arvutustehnika ja Filosoofia Assotsiatsioon

Soovitatav: