Filozofia Informatiky

Obsah:

Filozofia Informatiky
Filozofia Informatiky

Video: Filozofia Informatiky

Video: Filozofia Informatiky
Video: ИТМО, 01.09.2017, философия информатики 2023, Septembra
Anonim

Toto je dokument v archívoch Stanfordskej encyklopédie filozofie. Informácie o autorovi a citácii Priatelia PDF Náhľad | Vyhľadávanie InPho PhilPapers Bibliography

Filozofia informatiky

Prvýkrát publikované 12. decembra 2008

Filozofia informatiky (PCS) sa zaoberá filozofickými otázkami, ktoré vyplývajú z úvah o povahe a praxi akademickej disciplíny informatiky. Čo je to druhé? Určite to nie je len programovanie. Koniec koncov, veľa ľudí, ktorí píšu programy, nie sú počítačoví vedci. Napríklad fyzici, účtovníci a chemici. V skutočnosti by sa informatika lepšie opísala ako oblasť metaaktivity, ktorá je spojená s programovaním. Všeobecnejšie a presnejšie sa zaoberá návrhom, vývojom a skúmaním koncepcií a metodík, ktoré uľahčujú a pomáhajú pri špecifikácii, vývoji, implementácii a analýze výpočtových systémov. Medzi príklady tejto činnosti môže patriť návrh a analýza jazykov programovania, špecifikácií a architektúry;konštrukcia a optimalizácia kompilátorov, tlmočníkov, overovateľov vety a systémov odvodenia typov; vynález logických rámcov a návrh vstavaných systémov a ešte oveľa viac. Tieto činnosti obklopujú a podporujú tieto ústredné filozofické otázky počítačovej vedy a mnohé z nich sa sústreďujú na logické, ontologické a epistemologické problémy, ktoré sa ich týkajú. Nakoniec, počítačová veda je to, čo počítačoví vedci robia, a žiadna presná formulačná definícia nemôže slúžiť iba ako vodítko pre nasledujúcu diskusiu. V skutočnosti je to nádejTieto činnosti obklopujú a podporujú tieto ústredné filozofické otázky počítačovej vedy a mnohé z nich sa sústreďujú na logické, ontologické a epistemologické problémy, ktoré sa ich týkajú. Nakoniec, počítačová veda je to, čo počítačoví vedci robia, a žiadna presná formulačná definícia nemôže slúžiť iba ako vodítko pre nasledujúcu diskusiu. V skutočnosti je to nádejTieto činnosti obklopujú a podporujú tieto ústredné filozofické otázky počítačovej vedy a mnohé z nich sa sústreďujú na logické, ontologické a epistemologické problémy, ktoré sa ich týkajú. Nakoniec, počítačová veda je to, čo počítačoví vedci robia, a žiadna presná formulačná definícia nemôže slúžiť iba ako vodítko pre nasledujúcu diskusiu. V skutočnosti je to nádej PCS nakoniec prispeje k hlbšiemu pochopeniu podstaty informatiky.

Mapovanie filozofického prostredia počítačovej vedy však nie je ľahkou úlohou. Našťastie tradičné filozofické odvetvia môžu poskytovať intelektuálne a štrukturálne vedenie. Napríklad vo filozofiách matematiky a fyziky sú ústredné otázky týkajúce sa povahy predmetov, o ktorých sa jedná, čo predstavuje vedomosti a prostriedky na ich získanie. Filozofia jazyka vyvoláva otázky týkajúce sa obsahu a formy sémantickej teórie prírodného jazyka. Zdôrazňuje základné ontologické a epistemologické predpoklady sémantického podnikania. Ontológia naznačuje, aké druhy vecí existujú, ako ich individualizovať a ich úlohu pri vytváraní našich koncepčných schém. Filozofia logiky poskytuje prehľad a analýzu rôznych druhov logických systémov a ich úlohu v každodennom a špecializovanom diskurze. Analógie a podobnosti z týchto a iných filozofických odborov by mali byť nápomocné pri identifikácii a objasňovaní niektorých ústredných filozofických záujmov počítačovej vedy. Existujúci vplyv týchto disciplín na PCS sa objaví, keď budeme pokračovať. Druhá, tretia a štvrtá časť budú odrážať najmä vplyv ontológie a filozofie jazyka a matematiky.

  • 1. Niektoré hlavné problémy
  • 2. Existencia a identita

    • 2.1 Dvojaký charakter programov
    • 2.2 Programy a algoritmy
    • 2.3 Programy a špecifikácie
  • 3. Sémantika

    • 3.1 Denotačná a operatívna sémantika
    • 3.2 Implementácia a sémantická interpretácia
    • 3.3 Sémantika, rovnosť a identita
  • 4. Dôkazy a programy

    • 4.1 Dôkazy v informatike
    • 4.2 Dôkazy v matematike
    • 4.3 Fyzická a abstraktná korektnosť
  • 5. Vyčísliteľnosť

    5.1 Cirkevná Turingova práca

  • 6. Programovanie a programovacie jazyky

    • 6.1 Abstrakcie
    • 6.2 Typy a ontológia
  • 7. Právne a etické otázky

    • 7.1 Autorské práva, patenty a totožnosť
    • 7.2 Správnosť a zodpovednosť
  • 8. Nové zvraty alebo nové čísla?
  • Bibliografia
  • Ďalšie internetové zdroje
  • Súvisiace záznamy

1. Niektoré hlavné problémy

Najprv si uvedieme, čo považujeme za niektoré z ústredných otázok a otázok. Toto poskytne čitateľovi rýchly prehľad záležitostí, ktoré doplnia podrobnejšiu diskusiu, ktorá má prísť. Aj keď mnohým z nich sa literatúra priamo nezaoberala a je potrebné ich objasniť, tieto otázky ilustrujú druhy problémov, ktorým sa zaoberáme PCS.

  1. Aké veci sú programy? Sú abstraktné alebo konkrétne? (Moor 1978; Colburn 2004)
  2. Aké sú rozdiely medzi programami a algoritmami? (Rapaport 2005a)
  3. Čo je špecifikácia? A čo je špecifikované? (Smith 1985; Turner 2005)
  4. Sú špecifikácie zásadne odlišné od programov? (Smith 1985)
  5. Čo je implementácia? (Rapaport 2005b)
  6. Čo odlišuje hardvér od softvéru? Existujú programy vo fyzickej aj symbolickej forme? (Moor 1978; Colburn 2004)
  7. Aké veci sú digitálne objekty? Potrebujeme novú ontologickú kategóriu na ich umiestnenie? (Allison a kol. 2005)
  8. Aké sú ciele rôznych sémantických teórií programovacích jazykov? (Biely 2004; Turner 2007)
  9. Ako súvisia otázky vo filozofii programovacích jazykov s paralelnými vo filozofii jazyka? (White 2004)
  10. Súvisí zásada modularity (napr. Dijkstra 1968) s koncepčnými otázkami úplnej abstrakcie a zložitosti?
  11. Aké sú základné koncepčné rozdiely medzi nasledujúcimi programovými paradigmami: štruktúrované, funkčné, logické a objektovo orientované programovanie?
  12. Aké sú úlohy typov v informatike? (Barandregt 1992; Pierce 2002)
  13. Aký je rozdiel medzi operačnou a denotačnou sémantikou? (Turner 2007)
  14. Čo to znamená, že program je správny? Aký je epistemologický stav dôkazov správnosti? Líšia sa zásadne od dôkazov v matematike? (DeMillo a kol. 1979; Smith 1985)
  15. Čo dokazujú dôkazy správnosti? (Fetzer 1988; Fetzer 1999; Colburn 2004)
  16. Čo je abstrakcia v informatike? Ako to súvisí s abstrakciou v matematike? (Colburn & Shute 2007; Fine 2008; Hale & Wright 2001)
  17. Čo sú formálne metódy? Čo je formálne o formálnych metódach? Aký je rozdiel medzi formálnou a neformálnou metódou? (Bowen & Hinchey 2005; Bowen & Hinchey 1995)
  18. Aký druh disciplíny je informatika? Aké sú úlohy matematického modelovania a experimentovania? (Minsky 1970; Denning 1980; Denning 1981; Denning a kol. 1989; Denning 1985; Denning 1980b; Hartmanis 1994; Hartmanis1993; Hartmanis 1981; Colburn 2004; Eden 2007)
  19. Mali by sa programy považovať za vedecké teórie? (Rapaport 2005a)
  20. Ako sa matematika používa v informatike? Používajú sa matematické modely deskriptívnym alebo normatívnym spôsobom? (Biely 2004; Turner 2007)
  21. Zachytáva Cirkev-Turingova téza matematický pojem efektívnej alebo mechanickej metódy v logike a matematike? Zachytáva výpočty, ktoré môže vykonať človek? Vzťahuje sa jeho pôsobnosť na fyzické stroje? (Copeland 2004; Copeland 2007; Hodges 2006)
  22. Dokáže pojem počítačové myslenie vydržať filozofickú kontrolu? (Wing 2006)
  23. Aká logika je dôvodom správnosti a ukončenia programu? (Hoare 1969; Feferman 1992) Ako je logika závislá od základného programovacieho jazyka?
  24. Čo sú informácie? (Floridi 2004; Floridi 2005) Zdvíha tento pojem svetlo na niektoré z tu uvedených otázok?
  25. Prečo je toľko programovacích jazykov a programovacích paradigiem? (Krishnamurthi 2003)
  26. Majú programovacie jazyky (a paradigmy) povahu vedeckých teórií? Čo spôsobuje zmenu paradigmy programovania? (Kuhn 1970)
  27. Vyvoláva softvérové inžinierstvo nejaké filozofické problémy? (Eden 2007)

V nasledujúcom texte dáme na niektoré z týchto otázok nejaké mäso.

2. Existencia a identita

Ako kategorizujeme a individualizujeme entity a koncepty počítačovej vedy? Aké sú veci a čo určuje ich identitu? Napríklad niektoré sú jasne konkrétnymi fyzickými objektmi (napr. Čipy, smerovače, notebooky, grafické karty) a niektoré nie (napr. Formálne gramatiky, abstraktné stroje, dokázače teorémov, logické rámce, algebry procesov, abstraktné dátové typy). Charakterizácia niektorých ústredných pojmov, ako sú programy a údaje, bola však problematickejšia. Predovšetkým sa nepovažuje za ontologický stav programov, aby neboli úplne jednoznačné, ani otázka ich kritérií identity.

2.1 Dvojaký charakter programov

Mnoho autorov (Moor 1978; Rapaport 2005b; Colburn 2004) diskutuje o tzv. Duálnej povahe programov. Na prvý pohľad sa zdá, že program má textovú aj mechanickú alebo procesnú masku. Program je možné editovať ako text. Zdá sa však, že jej prejav na strojom čitateľnom disku má celkom odlišné vlastnosti. Najmä sa môže vykonať na fyzickom stroji. Podľa zásady nedeliteľnosti identít (§3.3) nemôžu byť tieto dve masky tou istou entitou. Každý, kto je presvedčený o tejto dualite, je, samozrejme, povinný povedať niečo o vzťahu medzi týmito dvoma zjavnými formami existencie.

Jedným z okamžitých návrhov je, že jedným prejavom programu je implementácia druhého, tj fyzickým prejavom je implementácia textového prejavu. Avšak ani v rámci počítačovej vedy nie je okamžite zrejmé, že slovo implementácia sa týka iba jedného pojmu. Často sa používa na označenie výsledku procesu kompilácie, pri ktorom sa program v jazyku vysokej úrovne (zdrojový kód) transformuje do strojového jazyka (kód objektu). Rovnako často sa však používa na označenie procesu, v ktorom sa zdrojový kód nejako priamo realizuje v hardvéri (napr. Konkrétna implementácia v polovodičoch). A pravdepodobne to je relevantný pojem. Bez podrobnejšej filozofickej analýzy pojmu samotná implementácia (§3.2) (Rapaport 2005b),nie je jasné, ako to vedie k diskusii; zdá sa, že sme pomenovali iba vzťah medzi dvoma zjavnými formami existencie. V podobnom duchu iní opísali vzťah medzi textom programu a procesom programu ako podobný vzťahu medzi plánom a jeho prejavom ako sériu fyzických akcií. Nezdá sa však, že by to bolo úplne analogické párovaniu programov a procesov: nie sme v pokušení odkazovať na plán a fyzický proces ako na rôzne prejavy tej istej veci. Napríklad, sme v pokušení premýšľať o pláne na prechádzku a na skutočnú prechádzku ako o rôznych aspektoch tej istej veci?iní opísali vzťah medzi programovým textom a programovým procesom ako podobný vzťahu medzi plánom a jeho prejavom ako sériu fyzických akcií. Nezdá sa však, že by to bolo úplne analogické párovaniu programov a procesov: nie sme v pokušení odkazovať na plán a fyzický proces ako na rôzne prejavy tej istej veci. Napríklad, sme v pokušení premýšľať o pláne na prechádzku a na skutočnú prechádzku ako o rôznych aspektoch tej istej veci?iní opísali vzťah medzi programovým textom a programovým procesom ako podobný vzťahu medzi plánom a jeho prejavom ako sériu fyzických akcií. Nezdá sa však, že by to bolo úplne analogické párovaniu programov a procesov: nie sme v pokušení odkazovať na plán a fyzický proces ako na rôzne prejavy tej istej veci. Napríklad, sme v pokušení premýšľať o pláne na prechádzku a na skutočnú prechádzku ako o rôznych aspektoch tej istej veci?sme v pokušení premýšľať o pláne na prechádzku a na skutočnú prechádzku ako o rôznych aspektoch tej istej veci?sme v pokušení premýšľať o pláne na prechádzku a na skutočnú prechádzku ako o rôznych aspektoch tej istej veci?

Možno veci možno najlepšie opísať tak, že programy ako textové objekty spôsobujú mechanické procesy? Zdá sa, že textový objekt nejako fyzicky spôsobuje mechanický proces. Zdá sa však, že si to vyžaduje pomerne starostlivú analýzu povahy takéhoto príčinného vzťahu. Colburn (2004) popiera, že symbolický text má príčinný účinok; má to taký fyzický prejav (vec na disku). Softvér je konkrétna abstrakcia, ktorá má médium popisu (text, abstrakcia) a médium vykonávania (napr. Konkrétna implementácia v polovodičoch).

Trochu odlišný pohľad na tieto otázky sa začína otázkou identity programu. Kedy sa považujú dva programy za rovnaké? Takéto problémy vznikajú napríklad pri pokusoch o určenie právnej totožnosti softvéru. Ak identifikujeme program s jeho textovým prejavom, potom identita programu je citlivá na zmeny jeho vzhľadu (napr. Zmena písma). Je zrejmé, že to nie je samotný text, ktorý by nám poskytoval akúkoľvek filozoficky zaujímavú predstavu o totožnosti programu. Skôr, aby sme dosiahli informované kritérium identity, musíme viac zohľadniť sémantiku a implementáciu. K tejto téme sa vrátime v § 3 a 6.

2.2 Programy a algoritmy

Nech už uvažujeme o programoch, rozdiel medzi algoritmom a programom si vyžaduje ďalšie koncepčné objasnenie. Algoritmy sa často považujú za matematické objekty. Ak je to pravda, potom mnohé z filozofických otázok, ktoré sa ich týkajú, tiež patria do filozofie matematiky. Algoritmy sú však pravdepodobne viac dôležité pre informatiku ako pre matematiku a zaslúžia si viac filozofickej pozornosti, ako sa im venovalo. Aj keď existovalo značné matematické štúdium algoritmov v teoretickej informatike a matematickej logike (napr. Moschovakis 1997; Blass & Gurevich 2003), nevyskytlo sa veľa filozofických diskusií zameraných na povahu algoritmov a rozdiely medzi algoritmy a programy.

Je to, že algoritmy sú abstraktnými objektmi v zmysle, ktorý ponúka Rosen (2001), zatiaľ čo programy sú konkrétne? Presnejšie, sú algoritmy abstraktným matematickým náprotivkom textového objektu, ktorým je program? Tento obraz sa prirodzene hodí k forme ontologického platonizmu (Shapiro 1997), kde algoritmy majú ontologickú prioritu a programy poskytujú jazykové prostriedky, ako sa k nim dostať. Z tohto pohľadu by sa algoritmy mohli použiť na poskytnutie sémantiky (§ 3) programovacích jazykov. Tento obrázok samozrejme zdedí všetky výhody a problémy s platonickou perspektívou (Shapiro 1997).

Menej platonický pohľad hovorí, že algoritmy obsahujú myšlienky vyjadrené v programe. Podľa zákona sa to považovalo za dôvod, že algoritmy, na rozdiel od programov, nie sú chránené autorskými právami (§7.1). Pojem idea si samozrejme vyžaduje ďalšiu filozofickú analýzu. V skutočnosti by sa dalo argumentovať, že holý pojem algoritmu potrebuje oveľa menej objasnenie ako štandardný popis myšlienok a súvisiacich pojmov abstrakcie (Rosen 2001).

Nakoniec je to takmer folklórny názor, že Turingove stroje nám poskytujú formálnu analýzu našej predstavy o algoritme. Je to však v súlade so súčasnou predstavou, ktorá sa používa v modernej informatike, so sofistikovanými predstavami o reprezentácii a kontrole? Moschovakis (1997) ponúka analýzu, ktorá je o niečo lepšia.

2.3 Programy a špecifikácie

Ďalšie populárne rozlíšenie, ktoré by malo byť témou niektorých kritických analýz, sa vyskytuje v súvislosti s programami a špecifikáciami. Čo sú to špecifikácie a ako sa líšia od programov? Aj keď vo filozofickej literatúre sa o tomto probléme priamo diskutuje (pozri Smith 1985), povaha špecifikácií je základným problémom koncepčných základov počítačovej vedy.

Jeden pohľad, ktorý sa bežne vyskytuje v učebniciach o formálnych špecifikáciách, je ten, že programy obsahujú podrobné strojové pokyny, zatiaľ čo (funkčné) špecifikácie popisujú iba vzťah medzi vstupom a výstupom. Jeden zrejmý spôsob, ako to rozbaliť, je, pokiaľ ide o imperatívny / opisný rozdiel: programy sú nevyhnutné a opisujú, ako dosiahnuť cieľ opísaný v špecifikácii. Zdá sa, že v imperatívnom paradigme programovania to určite zachytáva podstatný rozdiel. Nie je to však vhodné pre všetkých. Napríklad logické, funkčné a objektovo orientované programovacie jazyky ním to zjavne neriadi: berúc do úvahy nominálnu hodnotu, programy kódované v týchto jazykoch pozostávajú zo sekvencií definícií, nie z „inštrukcií“. ďalejnefunkčné špecifikácie nemôžu byť vyjadrené ako vyjadrenia o vzťahu medzi vstupom a výstupom, pretože ukladajú požiadavky na konštrukciu a na druh pokynov, ktoré môžu byť obsiahnuté v akomkoľvek programe.

Iný pohľad trvá na tom, že rozdiel medzi špecifikáciami a programami má byť lokalizovaný z hľadiska pojmu implementácia, tj môže byť zostavený a vykonaný? Čo to však znamená? Znamená to v zmysle existujúceho prekladača? Táto interpretácia je dosť plytká, pretože neponúka koncepčné kritérium rozlišovania, ale podmienené kritérium. Napríklad v priebehu prvých piatich generácií programovacích jazykov (2. polovica 20. storočia) sa rekurzívne, modulárne, funkčné a objektovo orientované špecifikácie jednej generácie začali artikulovať ako programy v ďalšej, tj v dnešných špecifikačných jazykoch. zajtrajšie programovacie jazyky sa často stávajú.

Ďalší pohľad naznačuje, že programovacie jazyky sú tie jazyky, ktoré majú implementáciu v zásade, zatiaľ čo špecifikačné jazyky sú tie, ktoré nemôžu. Dôvodom, prečo nemôžu, je to, že jazyky špecifikácií umožňujú vyjadriť pojmy, ktoré nie sú Turingovsky porovnateľné. Toto rozlíšenie je v súlade s mnohými existujúcimi špecifikačnými jazykmi, ktoré sú založené na teórii množín Zermelo-Fraenkel a logike vyššieho poriadku. Zdá sa však zvláštne, že to, čo by malo charakterizovať jazyk špecifikácie, je skutočnosť, že môže vyjadrovať nekompatibilné vlastnosti a vzťahy. Sú niektoré z týchto nevyčísliteľných požiadaviek skutočne potrebné v praxi (Jones & Hayes 1990; Fuchs 1994)?

Rozmanitosť týchto názorov naznačuje, že tradičné binárne rozdiely medzi špecifikáciami a programami sú príkladom problému v PCS, ktorý si zaslúži väčšiu pozornosť, a to nielen kvôli koncepčnému objasneniu, ale aj preto, že by to mohlo mať dôsledky pre návrh budúcich jazykov programovania a špecifikácií.,

3. Sémantika

Gramatika programovacieho jazyka určuje iba to, čo je syntakticky legitímne; neinformuje nás o zamýšľanom význame jeho konštruktov. Gramatika programovacieho jazyka teda sama osebe neurčuje to, v čom ľudia programujú. Namiesto toho sa berie do úvahy gramatika obohatená o sémantický účet (formálny alebo neformálny). Sémantika má informovať programátora, spisovateľa kompilátora a teoretika, ktorý má záujem preskúmať vlastnosti jazyka. V skutočnosti sa často tvrdí, že na splnenie rôznych požiadaviek spisovateľa programátora a kompilátora sú potrebné rôzne sémantické účty na rôznych úrovniach abstrakcie. Úlohou teoretika je skúmať ich vzťah.

Toto je štandardný obraz, ktorý sa objavuje v sémantickej literatúre. Veľa z toho však potrebuje koncepčné objasnenie. V tejto časti sa zaoberáme iba niekoľkými problémami, ktoré z tejto činnosti vyplývajú.

3.1 Denotačná a operatívna sémantika

Jedným z najdôležitejších rozdielov v sémantike programovacích jazykov je rozlíšenie medzi operačnou a denotačnou sémantikou. Operatívna sémantika (Landin 1964; Plotkin 1981) poskytuje interpretáciu programovacieho jazyka z hľadiska nejakého abstraktného stroja. Presnejšie povedané, ide o preklad výrazov v programovacom jazyku do inštrukcií alebo programov abstraktného stroja. Napríklad program 1 by sa rozbalil do postupnosti abstraktných operácií stroja, ako napríklad „a ← 0“a stlačte. Operatívnu sémantiku možno chápať aj ako algoritmickú sémantiku, najmä ak je základný stroj zameraný na charakterizáciu samotného pojmu algoritmus (napr. Moschovakis 1997).

Naopak, denotačná sémantika (Milne & Strachey 1977) poskytuje interpretáciu do matematických štruktúr, ako sú súbory alebo kategórie. Napríklad, v klasickom prístupe, sady vo forme úplných mriežok a spojitých funkcií na nich poskytujú matematický rámec.

Existuje však medzi nimi značný koncepčný rozdiel? Je to, že denotačná sémantika, ktorá sa výslovne zakladá na matematických štruktúrach, ako sú množiny, je matematická, zatiaľ čo operatívna sémantika nie je? Turner (2007) tvrdí, že nie: všetky poskytujú matematické interpretácie.

Alebo je to tak, že operatívna sémantika je viac podobná stroju, v zmysle vytvárania abstraktného stroja, zatiaľ čo s denotačnou sémantikou, ktorá je daná teoretickými množinami, neexistuje náznak abstraktného stroja? Takéto rozdiely sa však nepreukázali koncepčne významné, pretože denotačné sémantické účty možno považovať za štruktúry, ktoré tvoria abstraktný stroj so štátmi a operáciami, ktoré na nich pôsobia. Prevádzkové účty nie sú bližšie k vykonávaniu: denotačné prístupy (Milne & Strachey 1977) sú tiež veľmi flexibilné a sú schopné odrážať rôzne úrovne podrobností vykonávania.

Ďalšie možné rozlíšenie sa týka zloženia (alebo iného) charakteru sémantiky. Voľne povedané, sémantika sa považuje za kompozičnú (Szabó 2007), ak sémantická hodnota komplexného výrazu je funkciou sémantických hodnôt jej častí. Kompozičnosť sa považuje za kľúčové kritérium sémantiky, pretože sa zdá, že je potrebné vysvetliť produktivitu nášho jazykového porozumenia: hovorí sa, že vysvetľuje, ako chápeme a budujeme komplexné programy. Poskytuje nám však klin na oddelenie operatívnej a denotačnej sémantiky? Nanešťastie sa zdá, že tak neurobí: zatiaľ čo denotačné definície sú navrhnuté ako kompozičné, určite to tak nie je, že všetky operačné sémantiky nie sú kompozičné.

Nakoniec, niektoré verzie sémantiky sa líšia v súvislosti s existenciou rekurzívneho modelu, tj interpretácie v Turingových strojoch alebo Gandyových strojoch (§5.1). Ani to však nie je úplne v súlade s tradičným prevádzkovým / denotačným rozdielom. Niektoré denotačné definície majú rekurzívny model a iné nie.

Zdá sa veľmi ťažké tento rozdiel potlačiť. Na prvý pohľad sa nejaví žiadne ostré koncepčné rozlíšenie medzi operačnou a denotačnou sémantikou.

3.2 Implementácia a sémantická interpretácia

Aký je rozdiel medzi sémantickým výkladom a implementáciou? Aký je napríklad koncepčný rozdiel medzi kompiláciou programu do strojového kódu a udelením denotačnej sémantiky? Podľa Rapaporta (2005b) je implementácia najlepšie vnímaná ako sémantická interpretácia, pričom táto je charakterizovaná pomocou mapovania medzi dvoma doménami: syntaktickou a sémantickou. A obe sú určené pravidlami nejakého opisu. Napríklad kompilovaný kód (v kombinácii s pravidlami, ktorými sa riadi jeho sémantika) je sémantický účet zdrojového kódu.

Vo všeobecnom chápaní pojmu „implementácia“je sémantická doména dodávaná fyzickým strojom. Inými slovami, samotný fyzický stroj („implementácia“) určuje, čo program znamená. Napríklad v programovacích jazykoch je to ekvivalentné tvrdeniu, že sémantiku pre programovací jazyk C ++ určuje počítač Bjarne, na ktorom beží kompilátor C ++. Toto vysvetlenie je však zjavne neprimerané: Ak predpokladáme, že stroj Bjarne určuje význam programov C ++, potom nejestvuje žiadna predstava o nesprávnom fungovaní alebo nesprávnom výklade: Čokoľvek, čo robí Bjarnov počítač, je, samozrejme, význam programu. Elektrická búrka však určite môže spôsobiť poruchu stroja. Čo by sme však mohli myslieť tým, že sa pokazí? Je pravdepodobné, že (nefunkčný) stroj nemá stelesnený význam. Ale,na druhej strane sa zdá, že túto frázu dokážeme pochopiť iba na základe strojovo nezávislej charakterizácie významu. A na určitej úrovni je to potrebné uviesť prostredníctvom nezávislého sémantického popisu. To naznačuje, že pojem holá implementácia neponúka primeraný pojem sémantiky. (Porovnaj s: Kripke 1982; Wittgenstein 1953).

3.3 Sémantika, rovnosť a identita

Svoju diskusiu o programovej rovnosti (§2.1) sme uzavreli sľubom priniesť sémantiku do obrazu. Každý sémantický účet programovacieho jazyka určuje pojem rovnosti pre programy, konkrétne, dva programy sa považujú za rovnocenné, ak majú rovnakú sémantickú hodnotu, tj

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

kde || P || je sémantická hodnota programu P. V tomto zmysle teda každý sémantický účet určuje kritérium rovnosti. Napríklad jedna verzia denotačnej sémantiky by sa odčítala od všetkých výpočtových krokov a porovnávala programy, ktoré v určitom zmysle vypočítavajú rovnakú matematickú funkciu. Týmto kritériom by sa napríklad považovali nasledujúce dva programy:

funkcia Factorial (n: celé číslo): celé číslo

začína

ak n = 0, potom Factorial: = 1;

inak

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

koniec;

Program 1

funkcia Factorial (n: integer): integer

var

x, y: integer;

začiatok

y: = 1;

x: = 0;

zatiaľ čo x <n začínajú

x: = x +1;

y: = y * x;

koniec

Factorial: = y;

koniec;

Program 2

Na druhej strane, operatívnejší pohľad, ktorý odkazuje na kroky výpočtu, by nepovažoval program 1 a program 2 za rovnocenný. Na základe §3.1 skutočne môžeme navrhnúť sémantické účty, ktoré odrážajú akúkoľvek úroveň podrobnosti implementácie. Rôzne sémantické účty určujú rôzne pojmy rovnosti, ktoré môžu slúžiť rôznym koncepčným a praktickým cieľom. Ale ktorý z nich by sa mal použiť na určenie jazyka? Našťastie existuje niekoľko desiderát, ktoré je možné uplatniť; môžeme obmedziť možnosti: niektoré sémantické účty nám poskytujú logicky uspokojivý pojem identity a niektoré nie.

Indiscernibility of identicals je princíp zabudovaný do bežného predikátovej logiky. Uvádza, že ak sú dva objekty rovnaké, zdieľajú všetky vlastnosti. Opačný princíp, identita nerozhodnuteľnýchuvádza, že ak pre každú vlastnosť F má objekt x F iba vtedy, ak objekt y má F, potom x je totožné s y. Identita nerozhodných znamená, že ak sú x a y odlišné, potom existuje aspoň jedna vlastnosť, ktorú má x a y nie. Spojenie oboch princípov sa niekedy nazýva Leibnizov zákon (Forrest 2006). Leibnizov zákon sa často považuje za zásadný pre akýkoľvek pojem rovnosti. Tieto zákony sú obvykle formulované v logických teóriách, ako je logika druhého poriadku. Najviac nás však bude zaujímať ich schopnosť rozlišovať medzi rôznymi druhmi sémantiky programovacieho jazyka. Leibnizov zákon je skutočne jedným z ústredných pojmov modernej sémantickej teórie. Kritérium identity je spresnené z hľadiska pozorovacej rovnocennosti.

Dva programy M a N sú definované ako pozorovacie ekvivalentyiba vtedy, ak vo všetkých kontextoch C […], kde C [M] je platný program, platí, že C [N] je tiež platným programom s rovnakou sémantickou hodnotou. Napríklad hovoríme, že Oracle a DB2 (programy manipulovajúce s relačnými databázami) sú pozorovateľne ekvivalentné podľa nejakého sémantického účtu operácií v relačných databázach iba vtedy, ak sú vykonávané v „rovnakom“kontexte (operačný systém, architektúra stroja, vstup atď.)) poskytuje „rovnakú“databázu. Pojem „pozorovateľne rovnocenný“treba samozrejme brať so štipkou soli. Jasne nemôžeme pozorovať správanie programu vo všetkých kontextoch. Observatívna ekvivalencia však odráža základnú koncepčnú požiadavku, ktorá vychádza zo zásad nerozdeliteľnosti totožných osôb a z totožnosti nerozhodných osôb.

V sémantike, ak všetky pozorovateľné odlišné programy majú odlišné sémantické hodnoty, je sémantika považovaná za dobrú. Dôsledná sémantika preto spĺňa túto zásadu:

|| P || = || Q || znamená, že pre všetky kontexty C, || C [P] || = || C [Q] ||

Malo by byť zrejmé, že pojem totožnosti vyvolaný spoľahlivou sémantikou uspokojuje nerozoznateľnosť identít.

Sémantika sa považuje za úplnú, ak sú dva programy s odlišnými sémantickými hodnotami zreteľne odlišné. Presnejšie povedané, úplná sémantika spĺňa tieto požiadavky:

Pre všetky kontexty C, || C [P] || = || C [Q] || znamená || P || = || Q ||

Opäť by malo byť zrejmé, že úplná sémantika spĺňa zásadu identity nerozhodných osôb.

A konečne, sémantika sa považuje za úplne abstraktnú, ak je zvuková a úplná. V dôsledku toho plne abstraktná sémantika spĺňa Leibnizov zákon.

Toto logické pozadie poskytuje filozofické zdôvodnenie vývoja úplne abstraktnej sémantiky. Ponúka teda spôsob výberu sémantických účtov, ktoré poskytujú filozoficky prijateľné predstavy o rovnosti. Neurčuje samozrejme ani jeden pojem. Poskytuje iba nástroj na odmietnutie tých, ktorí nemôžu poskytnúť koncepčne prijateľný. Mnoho takzvaných denotačných sémantík nie je úplne abstraktných, zatiaľ čo mnohé operatívne sú. Jedna z ústredných tém nedávnej histórie sémantiky skutočne spočívala v hľadaní úplne abstraktných definícií, ktoré sú obsiahnuté v triede sémantických definičných techník, ktoré sa používajú na dodanie denotačnej sémantiky.

Sémantika hrá v informatike normatívnu alebo definujúcu úlohu. Bez sémantických definícií nemajú jazyky a štruktúry žiadny obsah nad rámec ich syntaktických popisov. Posledne menované sú sotva dostatočné na praktické alebo filozofické účely. Aj keď sme začali s analýzou hlavných problémov, iba sme poškriabali povrch.

4. Dôkazy a programy

Špecifikácie (§2.3) vyvolávajú osobitnú predstavu o správnosti. Podľa abstraktného výkladu tohto pojmu sa program považuje za správny vzhľadom na (funkčnú) špecifikáciu, ak vzťah, ktorý vyvíja medzi vstupom a výstupom, vyhovuje vzťahu stanovenému špecifikáciou. Presnejšie, ak p je program, potom spĺňa špecifikáciu R, ktorá sa považuje za vzťah medzi vstupným typom I a výstupným typom O, ak platí nasledujúce:

Pre všetky vstupy i typu I pár (i, p (i)) spĺňa vzťah R

kde p (i) je výsledkom spustenia programu p na vstupe i. Tu je R vyjadrené v určitom špecifikačnom jazyku ap v niektorom programovacom jazyku. Prvý z nich je zvyčajne nejaký variant (typovanej) predikátovej logiky a dôkazy o správnosti (tj že vyhlásenie (1) platí) sa vykonávajú v skúšobnom systéme logiky. Napríklad sa často používa logika Hoare (Hoare 1969), v ktorej Dôkazy o správnosti majú formu záverov medzi trojicami, napísaných

B {P} A

kde P je program a B a A sú tvrdenia (stavy „pred“a „po“v programe) vyjadrené v určitej verzii predikátovej logiky so znakmi, ktoré uľahčujú vyjadrenie hodnôt pripojených k programovým premenným.

Jedna filozofická kontroverzia, ktorá obklopuje otázku správnosti, sa sústreďuje na povahu takýchto dôkazov; ďalšie výzvy, ktoré takéto dôkazy prinášajú.

4.1 Dôkazy v informatike

Sú dôkazy správnosti programu pravé matematické dôkazy, tj sú také dôkazy porovnateľné so štandardnými matematickými dôkazmi? DeMillo a kol. (1979) tvrdia, že pretože dôkazy korektnosti sú dlhé a matematicky plytké, sú na rozdiel od dôkazov v matematike, ktoré sú koncepčne zaujímavé, presvedčivé a priťahujú pozornosť iných matematikov, ktorí ich chcú študovať a stavať na nich. Napríklad dôkaz v logike Hoare o tom, že program 2 počíta faktoriálnu funkciu, by obsahoval podrobnosti o základnom ponímaní štátu, použil indukčný argument a zahŕňal by uvažovanie o invázii slučky.

Takéto dôkazy by však boli omnoho dlhšie ako samotný program. Okrem toho by úroveň, na ktorej je odôvodnenie zakódované v Hoare logike, vyžadovala vyjadrenie a zobrazenie mnohých detailov, ktoré by za normálnych okolností zostali implicitné. Bolo by to zdĺhavé av prípade väčšiny programov koncepčne banálne.

Tento argument je paralelný s argumentmi pochopiteľnými vo filozofii matematiky (napr. Tymoczko 1979; Burge 1988). V jeho jadre sú epistemologické starosti: dôkazy, ktoré sú príliš dlhé, ťažkopádne a nezaujímavé, nemôžu byť nositeľmi istoty, ktorá sa pripisuje štandardným matematickým dôkazom. Povaha znalostí získaných na základe dôkazov o správnosti sa tvrdí, že sa líši od poznatkov, ktoré možno získať na základe dôkazov v matematike [1].

Túto zásadne sociologickú perspektívu dôkazov je potrebné odlíšiť od tej, ktorá tvrdí, že dôkazy sú správne alebo nesprávne, a to spôsobom nezávislým od takýchto epistemologických rozsudkov. Je možné vydržať realistickejšie stanovisko, podľa ktorého je akýkoľvek daný dôkaz správny alebo nesprávny bez toho, aby sa vzdal požiadavky, že dôkazy, ktoré sa majú prijať a potvrdiť, musia byť pochopiteľné.

Jeden by sa mohol pokúsiť získať nejaký dôvod obhajovaním toho, aby dôkazy o korektnosti mali byť kontrolované skôr počítačom ako človekom. Kontrolu si však samozrejme musí sama overiť. Arkoudas a Bringsjord (2007) tvrdia, že ak existuje iba jeden dôkaz o správnosti, ktorý je potrebné skontrolovať, a to samotný korektor, potom je možnosť chýb výrazne znížená.

4.2 Dôkazy v matematike

Matematické dôkazy, ako napríklad dôkaz Gödelovej vety o neúplnosti, sú tiež dlhé a komplikované. Matematická komunita ich však stáva priehľadnou, zaujímavou a pochopiteľnou („kontrolovateľnou“), je použitie techník modularity (napr. Lemmy) a použitie abstrakcie pri akte matematickej tvorby. Zavedenie nových koncepcií umožňuje postupné budovanie dôkazov, vďaka čomu sú dôkazy lepšie pochopiteľné. Matematika postupuje vymýšľaním nových matematických konceptov, ktoré umožňujú konštrukciu vyšších úrovní a všeobecnejších dôkazov, ktoré by boli bez nich oveľa zložitejšie a dokonca nemožné. Napríklad notácia exponentov umožňuje vykonávať výpočty mimo zložitosti násobenia - a hádať sa o výsledkoch. Na druhej strane,vynález teórie kategórií uľahčil vyjadrenie a preukázanie veľmi všeobecných výsledkov o algebraických štruktúrach, ktoré sa automaticky vzťahujú na celý rad takýchto. Matematika nie je len o dôkazoch; zahŕňa to aj abstrakciu a vytváranie nových konceptov a zápisov. Na druhej strane formálne dôkazy správnosti vo všeobecnosti nevyužívajú vytváranie nových konceptov ani sa nezapájajú do procesu matematickej abstrakcie. Naopak, abstrakcia v informatike (§6.1) je sústredená v pojmoch potrebných pre návrh programu. Ako však tieto dva pojmy abstrakcie súvisia? O tejto téme povieme neskôr.zahŕňa to aj abstrakciu a vytváranie nových konceptov a zápisov. Na druhej strane formálne dôkazy správnosti vo všeobecnosti nevyužívajú vytváranie nových konceptov ani sa nezapájajú do procesu matematickej abstrakcie. Naopak, abstrakcia v informatike (§6.1) je sústredená v pojmoch potrebných pre návrh programu. Ako však tieto dva pojmy abstrakcie súvisia? O tejto téme povieme neskôr.zahŕňa to aj abstrakciu a vytváranie nových konceptov a zápisov. Na druhej strane formálne dôkazy správnosti vo všeobecnosti nevyužívajú vytváranie nových konceptov ani sa nezapájajú do procesu matematickej abstrakcie. Naopak, abstrakcia v informatike (§6.1) je sústredená v pojmoch potrebných pre návrh programu. Ako však tieto dva pojmy abstrakcie súvisia? O tejto téme povieme neskôr.

4.3 Fyzická a abstraktná korektnosť

Aj keď odložíme tieto epistemologické starosti, druhá a zdanlivo ničivejšia kritika správnosti dokazuje otázky, čo v skutočnosti dokázali. Je zrejmé, že dôkaz o správnosti poskytuje správnosť iba do textovej reprezentácie programu. Žiadne množstvo formálnej práce nás nemôže dostať za abstraktnú / fyzickú bariéru: nikdy nemôžeme zaručiť, že akékoľvek konkrétne vykonanie programu na fyzickom stroji bude skutočne pokračovať podľa očakávania (Fetzer 1988; Fetzer 1999; Colburn 2004).

Čo to však znamená pre program p byť správny? Predpokladajme, že máme špecifikáciu programu - a že môže byť formálny alebo neformálny. Potom predpokladajme, že vykonáme sériu testov, aby sme overili, či program spĺňa jeho špecifikácie. Ak uspejú, máme empirické dôkazy, že fyzický náprotivok textového programu je skutočne správny, pretože funguje podľa špecifikácie. Z tohto pohľadu sa testoval fyzický náprotivok; nie textový program.

Táto analýza naznačuje, že v ponímaní správnosti programov existuje dualita. V súlade s duálnou povahou programov by sme mohli povedať, že textový program podlieha matematickej korektnosti, zatiaľ čo jeho fyzický náprotivok podlieha empirickému overeniu.

5. Vyčísliteľnosť

Vyčísliteľnosť je jednou z najstarších tém, ktorú možno označiť ako PCS. Je však predmetom niekoľkých záznamov SEP (napr. Barker-Plummer 2004), preto uvedieme iba niekoľko tém a ich súvislosť so zvyškom tohto záznamu.

5.1 Cirkevná Turingova práca

Jedným z ústredných problémov je Turingova diela. A tu sú dva spory, jeden historický a jeden empirický. Zameriavajú sa na tieto dve možné interpretácie práce:

  1. Turingové stroje môžu robiť čokoľvek, čo by sa dalo opísať ako „pravidlo palca“alebo „čisto mechanické“.
  2. Čokoľvek môže stroj vypočítať (pracuje na konečných údajoch v súlade s konečným programom pokynov), je Turingov počítač kompatibilný.

Výklad I má za cieľ zachytiť pojem efektívnej alebo mechanickej metódy v logike a matematike. Účelom je vyjadriť neformálnu predstavu o algoritme implicitnom v matematike, ktorý Hilbertov program prinesie do popredia. Interpretácia II je určená na riadenie fyzických strojov. Naozaj, (Gandy 1980) možno vidieť ako ďalšie vybalenie II. Gandy navrhuje štyri princípy, ktoré sú určené na charakterizáciu výpočtu fyzickým strojom. Ukazuje, že takéto stroje presne súhlasia s Turingovou charakterizáciou (Gandyho teorém). V súvislosti s našou diskusiou o rôznych sémantických paradigmách je zrejmé, že veľa strojov, ktoré sú základom denotačnej sémantiky (§ 3.1), sa nekvalifikuje ako Gandyho stroje. Najčastejšie pracujú s rozšírenými funkčnými priestormi vyššieho poriadku,a tieto nemožno považovať za konečné údaje a nespĺňajú podmienky Gandyho.

Niektorí tvrdia (Copeland 2004; Copeland 2008), že téza, ktorú navrhuje Church and Turing, sa týka iba interpretácie I a nestanovuje limit na stroje všeobecne. Hodges (2007) nesúhlasí. Tvrdí, že Church a Turing nerozlišovali medzi týmito dvoma výkladmi. Toto je historický spor.

Fyzický spor sa týka schopností skutočných prístrojov (interpretácia II.) Mnohí považujú za samozrejmé, že cirkevno-Turingova diela charakterizuje a predpisuje skutočné fyzické výpočty. Napríklad sa zdá, že ide o implicitný predpoklad v bežnej informatike. Určite je to tak, že každý program napísaný v existujúcom implementovanom programovacom jazyku je Turingov počítač kompatibilný a naopak, všetky programovacie jazyky pre všeobecné použitie sú Turingovské kompletné, tj obsahujú všetky kontrolné konštrukty potrebné na simuláciu univerzálneho Turingovho stroja.

Copeland (2007) tvrdí, že Gandyho charakterizácia diskrétneho deterministického mechanického zariadenia je príliš úzka, a preto existujú príklady možných fyzických strojov, ktorých schopnosti presahujú triedu Turingových vypočítateľných funkcií. Mnohé z nich vyžadujú nekonečné zrýchlenie, pričom nekonečné množstvo výpočtov sa môže fyzicky vykonať v konečnom čase. Kvantový výpočet bol uvedený ako možný príklad pre takéto stroje, ale to bolo sporné (Hodges 2007; Hagar 2007).

Hodges sa tiež zaoberá aplikovateľnosťou štandardných matematických argumentov vo fyzike na prípady, keď ide o nekonečnú presnosť. To naznačuje, že tento spor nie je jednoduchý empirický. V skutočnosti existujú tí, ktorí sa pýtajú, či je fyzicky možné dokončiť nekonečný počet úloh v konečnom čase. Dummett (2006) sa pýta, či samotná predstava nekonečnej úlohy, ktorá sa má vykonať vo fyzickej ríši, nie je iba fyzická nemožnosť, ale aj koncepčná. Takže spor nie je iba empirický, ale ide do jadra nášho chápania vzťahu medzi našimi matematickými modelmi a fyzickou realitou.

6. Programovanie a programovacie jazyky

Návrh programov a programovacích jazykov je jednou z tradičných činností informatiky. Okolo nich je množstvo koncepčných otázok (§1), z ktorých mnohým nebola poskytnutá žiadna filozofická pozornosť. Tu stručne preskúmam dva z týchto problémov.

6.1 Abstrakcie

Abstrakcia je jedným z koncepčných pilierov počítačovej vedy. Je neoddeliteľnou súčasťou programovania a konštrukcie programov a tvorí základnú metodológiu navrhovania programovacích jazykov. V skutočnosti vedie k vytváraniu nových programovacích paradigiem. Je základom vynálezu pojmov, ako sú procedurálna a funkčná abstrakcia, polymorfizmus, abstrakcia údajov, objekty a triedy, návrhové vzory, architektonické štýly, subtypovanie a dedičnosť. Mnohé odvetvia softvérového inžinierstva (napr. Softvérové modelovanie, porozumenie programu, vizualizácia programu, spätné a opakované inžinierstvo) sa zaoberajú predovšetkým výskumom vhodných mechanizmov na abstrakciu programov. Značný pokrok v softvérovom inžinierstve sa dosiahol zavedením nových abstrakčných mechanizmov.

Aká je však povaha abstrakcie v informatike? Aké je jeho základné filozofické vysvetlenie? Bohužiaľ, vo všeobecnosti je samotná myšlienka abstrakcie filozoficky problematická. Podľa tradičného pohľadu, ktorý má svoj pôvod vo filozofickej psychológii, je abstrakcia mentálnym procesom, v ktorom sa vytvárajú nové koncepcie zvažovaním niekoľkých predmetov alebo myšlienok a vynechaním prvkov, ktoré ich odlišujú. (Rosen 2001). Tento prístup má však len málo, ak vôbec nejakých, súčasných filozofických obhajcov.

Logickejší prístup k analýze abstrakcie, ktorý má určitú silnú obhajobu (Wright 1983; Hale 1987). Nie je však jasné, či sa tieto myšlienky, ktoré boli vyvinuté pre matematickú abstrakciu, vzťahujú na informatiku. Je zrejmé, že niektoré z pojmov abstrakcie v informatike boli inšpirované abstrakciami v matematike. Aký je však koncepčný vzťah medzi abstrakciou v týchto disciplínach? Sú zásadne odlišné? Bohužiaľ, zatiaľ čo existuje veľká literatúra o filozofických základoch matematickej abstrakcie (pozri Wright 1983; Hale 1987; Fine 2002), koncepčné skúmanie abstrakcie v informatike je v plienkach. Colburn (2007) naznačuje, že rozdiel medzi abstrakciou v matematike a abstrakciou v informatike spočíva v skutočnosti, že v matematike je abstrakcia informácií zanedbávaním, zatiaľ čo v informatike sa skrýva informácia. To znamená, že abstrakcie v matematike ignorujú to, čo sa považuje za irelevantné (napr. Farba podobných trojuholníkov). Na rozdiel od toho, v informatike, žiadne podrobnosti, ktoré sú ignorované na jednej úrovni abstrakcie (napr. Java programátori sa nemusia starať o presné umiestnenie v pamäti spojené s konkrétnou premennou), nesmú byť ignorované jednou z nižších úrovní (napr. Virtuálne stroj spracováva všetky alokácie pamäte).abstrakcie v matematike ignorujú to, čo sa považuje za nepodstatné (napr. farba podobných trojuholníkov). Na rozdiel od toho, v informatike sa žiadne podrobnosti, ktoré sa ignorujú na jednej úrovni abstrakcie (napr. Programátori Java nemusia starať o presné umiestnenie v pamäti spojené s konkrétnou premennou), nesmú ignorovať ani jednou z nižších úrovní (napr. Virtuálna stroj spracováva všetky alokácie pamäte).abstrakcie v matematike ignorujú to, čo sa považuje za nepodstatné (napr. farba podobných trojuholníkov). Na rozdiel od toho, v informatike, žiadne podrobnosti, ktoré sú ignorované na jednej úrovni abstrakcie (napr. Java programátori sa nemusia starať o presné umiestnenie v pamäti spojené s konkrétnou premennou), nesmú byť ignorované jednou z nižších úrovní (napr. Virtuálne stroj spracováva všetky alokácie pamäte).

Je to však založené na príliš zjednodušujúcom chápaní abstrakcie v matematike? Existuje len jeden druh pojmu? Napríklad informácie, ktoré sa skrývajú v Bishopovej analýze (Bishop 1970), sa celkom líšia od Wrightovho pojmu abstrakcie - skutočne sú dosť podobné počítačovej vede.

6.2 Typy a ontológia

Programovacie jazyky sú väčšinou písané jazyky, kde moderný pojem typu má svoj pôvod vo Frege a Russell a najmä v Russellovej jednoduchej teórii typov (Irvine 2003). Russell bol samozrejme motivovaný logickými a sémantickými paradoxmi a táto vlastnosť nie je pre aplikáciu typov na informatiku kľúčová. Na druhú stranu, pre Russellove typy vyrezávajú vesmír diskurzu spôsobmi, ktoré majú gramatický aj sémantický význam. A táto myšlienka sa preniesla do počítačovej vedy. Teórie typu boli skutočne inšpirované a obohatené počítačovou vedou. Napríklad Russellova teória typov, aj keď je matematicky silná, je do istej miery ochudobnená o svoju expresívnu moc v porovnaní s teóriami typov moderných počítačových jazykov (Coquand 2006; Pierce 2002). Okrem mnohých základných typov, ako sú čísla a booleovské jazyky, programovacie jazyky obsahujú zbierku typových konštruktorov (spôsoby vytvárania nových typov zo starých). Patria sem napríklad schopnosť tvoriť nejaký druh karteziánskeho produktu a konečné súpravy. V mnohých objektovo orientovaných programovacích jazykoch môžu typy (triedy) importovať (a potlačovať) operácie z iných typov a ponúkajú sofistikovanejšie konštruktory, ktoré podporujú vytváranie abstraktných typov údajov a rôznych foriem polymorfizmu.typy (triedy) môžu importovať (a potlačovať) operácie z iných typov a ponúkajú sofistikovanejšie konštruktory, ktoré podporujú vytváranie abstraktných typov údajov a rôznych foriem polymorfizmu.typy (triedy) môžu importovať (a potlačovať) operácie z iných typov a ponúkajú sofistikovanejšie konštruktory, ktoré podporujú vytváranie abstraktných typov údajov a rôznych foriem polymorfizmu.

V informatike hrajú typy úlohu, ktorá je na polceste medzi syntaxou a sémantikou. Po prvé, rozširujú našu normálnu predstavu o gramatike bez kontextu. Niektoré jazykové vlastnosti, najmä tie, ktoré umožňujú, aby sa typ premennej určoval kontextom (tj vyhlásenia jazyka), vyžadujú určitú formu gramatiky, ktorá je flexibilnejšia ako štandardná. Tzv. Dvojúrovňové gramatiky, hoci sú technicky primerané, nezachytávajú spôsob, akým sú premenné priraďované ich typom v moderných jazykoch. A na použitie sú veľmi neohrabané. Neľahko sa prispôsobia aj systémom polymorfných typov mnohých jazykov. Systémy moderného typu fungujú lepšie: premenné sa priraďujú svojim typom prostredníctvom vyhlásení, napr. X: Boolean. Následne môže kompilátor skontrolovať typ programu, napr.môže zabezpečiť, že výskyt premennej v následných príkazoch (napr. x

Typy však tiež zohrávajú úlohu správnosti, ktorá by za normálnych okolností nebola opísaná syntakticky. Dosahuje to rozšírením tradičnej fyzickej predstavy rozmerovej analýzy na oveľa bohatší systém typov. Získanie správnej typovej štruktúry pre program vedie nejakým spôsobom k zabezpečeniu jeho správnosti. A to je determinované štruktúrou, ktorú typy kladú na jazyk. Typy opravujú druhy vecí, ktoré existujú v programovacom jazyku. Napríklad akýkoľvek programovací jazyk, ktorý pripúšťa čísla, produkty a triedy a nič iné, ukladá programátorovi koncepčný rámec, v ktorom musí pracovať. Problémy sa musia sformulovať a nájsť riešenia v rámci reprezentačných prostriedkov dodaných typovým systémom. Po stanovení typovej štruktúry programovacieho jazyka bola väčšina jeho ontologického nastavenia opravená.

Alebo to máte? Možno musíme ustúpiť a najprv sa opýtať, ako sa majú určiť ontologické záväzky jazyka. Záleží na sémantike (Turner & Eden 2007)? Navrhla by to dlhá tradícia, ktorá vychádza z Frege (Dummett 1991). Za predpokladu, že analógia s prírodnými jazykmi je legitímna, ontologia jazyka je určená štruktúrami potrebnými na vybavenie jeho sémantických domén. Ale ktorú sémantickú teóriu máme prijať? Zatiaľ čo každá sémantika musí brať do úvahy typy, sémanticky určená ontológia by išla nad rámec nich a odrážala príslušné sémantické oblasti, a tieto by odrážali podrobnosti implementácie, ktoré sú zahrnuté v sémantike. Z tohto dôvodu, rovnako ako pri rovnosti, rôzne sémantické interpretácie určujú rôzne ontologie. Z toho vyplýva, že nie je rozumné hovoriť o ontológii programovacieho jazyka, ale o viacnásobných ontológiách, ktoré závisia od úrovne abstrakcie v sémantike. Napríklad ontológia môže byť čiastočne determinovaná programovou paradigmou.

7. Právne a etické otázky

Niektoré problémy počítačovej etiky patria PCS v tom, že činnosť pri vytváraní a používaní softvéru vyvoláva etické otázky. Mnohé z nich však nie sú špecifické pre informatiku v užšom zmysle tohto záznamu; zasahuje celé informačné technológie a počítačové aplikácie (Bynum 2001). Preto spomenieme iba dve, ktoré sa zdajú byť stredobodom informatiky.

7.1 Autorské práva, patenty a totožnosť

Autorské práva poskytujú určitú ochranu softvéru, nemôžu však chrániť svoje sémantické jadro. A berieme na vedomie, že posledný uvedený má byť určený sémantickým popisom (§ 3) programovacieho jazyka, v ktorom je program napísaný. Podstata tejto otázky sa pravdepodobne týka problému identity programu (§3.3). Ale ak existuje veľa možných sémantických predstáv o totožnosti, ktorý z nich je vhodný na právne uplatnenie?

Jeden neformálny sémantický účet, ktorý je často citovaný v práve, identifikuje program s myšlienkami v ňom uvedenými, najčastejšie sa považuje za jeho základný algoritmus. Ale nielenže je často ťažké presne povedať, čo je tento algoritmus, ale tiež, rovnako ako v prípade matematických teórií, nemôžu byť algoritmy chránené autorskými právami. A takmer rovnaký osud čaká na akýkoľvek formálny sémantický účet, pretože akékoľvek také by bolo určené nejakou matematickou predstavou, či už ide o algoritmy alebo nejakú predstavu o prevádzke alebo matematickej funkcii.

Ale aj keby sme našli sémantický účet, ktorý by vyhovoval zákonom o autorských právach, právny obraz by nebol úplný. Porušovanie autorských práv často nie je len z nejakého dôvodu totožnosti, ale aj z toho, či je pravdepodobné, že niekto príde s rovnakým programom. Takže zámerné úvahy vstupujú do rámca. Inými slovami, aj keby sa dva programy považovali za rovnocenné podľa nášho sémantického kritéria, ak by sa mohlo považovať za pravdepodobné, že boli vytvorené nezávisle, nedošlo by k porušeniu autorských práv.

Patenty (konkrétne úžitkové patenty) nie sú lepšie. Získavanie softvéru je ešte ťažšie, pretože človek nemôže patentovať mentálne procesy, abstraktné myšlienky a algoritmy. Nové nápady často obsahujú skôr algoritmy než zdrojový kód. Hlavným filozofickým záujmom je však opäť otázka identifikácie a identity. A to zahŕňa sémantické aj úmyselné úvahy.

7.2 Správnosť a zodpovednosť

Je správne, že sa softvér predáva s malou zárukou vhodnosti na daný účel? (Coleman 2008) sa venuje tejto otázke. Toto je obzvlášť dôležitá otázka pre systémy kritické z hľadiska bezpečnosti, napr. Systémy, ktoré monitorujú zdravotný stav, prevádzkujú jadrové elektrárne a komunikujú s raketoplánmi. Zdá sa, že by bolo nevyhnutné presadzovať prísnejšie testovanie a preukázať správnosť. Ale z etického hľadiska je prípad programátora, ktorý nedokáže analyzovať a otestovať svoj program, odlišný od programu stavebného inžiniera, ktorý nevykonáva požadované matematické modelovanie a testy na stavbe budov? Morálne povinnosti sa zdajú podobné.

Jeden spôsob, akým by sa mohli líšiť, sa týka zložitosti softvéru (Brooks 1987), ktorý presahuje zložitosť akéhokoľvek iného druhu ľudského artefaktu o rádovo veľké hodnoty. Mnohí tvrdia, že nie je možné poskytnúť takúto záruku správnosti (DeMillo et al. 1979); softvér je tak zložitý, že proces prísneho matematického dôkazu a testovanie softvéru nie je možné. A pravdepodobne existuje len (morálna alebo zákonná) povinnosť vykonať uskutočniteľný proces.

Ako však vyvážiť aspekty dokazovania a testovania vývoja softvéru so zamýšľaným použitím softvéru? Mal by softvér vyvinutý pre zábavu podliehať rovnakému stupňu prísneho preukazovania a testovania ako softvér, ktorý je kritický z hľadiska bezpečnosti? Pravdepodobne nie, ale možno by sme sa mohli pokúsiť opýtať, sú tieto nové etické problémy, alebo nám iba poskytujú ďalšie prípadové štúdie existujúcich etických dilem? Napríklad aj bezpečnostné chyby v softvéri používanom v zábavnom priemysle môžu niesť finančné pokuty.

8. Nové zvraty alebo nové čísla?

Aj tento pomerne stručný prehľad o PCSby mal presvedčiť čitateľa, že informatika vyvoláva zaujímavé a náročné filozofické problémy. Jedným z najdôležitejších dojmov je, že má podstatné väzby na väčšinu tradičných filozofických odvetví. Existujú jasné súvislosti s ontológiou, etikou, epistemológiou a filozofiou matematiky, fyziky a jazyka. Náš počiatočný zoznam otázok skutočne vyvoláva mnoho ďalších tém, ktoré súvisia s inými oblasťami filozofie. Existuje najmä rozsiahla literatúra o aplikáciách informatiky. Umelá inteligencia a kognitívna veda prinášajú filozofické otázky, ktoré patria do filozofie mysle (McLaughlin 2004). Väčšina z toho samozrejme vychádza z Turinga (1950). Ďalšie aplikácie informatiky na tradičné vedné oblasti, tzv. Výpočtová veda,vytvárať problémy pre filozofiu vedy: aký je epistemologický dopad počítačových simulácií, najmä ak ide o jedinú uskutočniteľnú formu experimentovania? Výpočtový obrat v ontológii prináša nové techniky, ktoré majú vplyv na štruktúru akejkoľvek koncepčnej ontológie. Filozofiu logiky obohacuje množstvo materiálu: na účely reprezentácie a zdôvodnenia výpočtových systémov sa objavilo veľké množstvo nových logických systémov. Na účely reprezentácie a zdôvodnenia výpočtových systémov sa objavilo veľké množstvo nových logických systémov. Na účely reprezentácie a zdôvodnenia výpočtových systémov sa objavilo veľké množstvo nových logických systémov.

Aj keď je zrejmé, že informatika vedie k mnohým významným zvratom k tradičným filozofickým obavám, menej jasné je, či generuje nejaké skutočne nové filozofické obavy: existujú v PCS otázky, ktoré nemajú paralelu v žiadnej inej filozofickej oblasti?

Bibliografia

  • Allison, A., Currall, J., Moss, M. a Stuart, S., 2005, „záležitosti digitálnej identity“, Journal of American Society Information Science and Technology 56 (4): 364–372.
  • Arkoudas, K. a Bringsjord, S., 2007, „Počítače, odôvodnenie a matematické znalosti“, Minds and Machines 17 (2): 185–202.
  • Barendregt, HP, 1993, „Lambda kalkulu s typmi“, v: Handbook of logic in computer science, Vol. 2, New York, NY: Oxford University Press Inc.
  • Barker-Plummer, D., 2008, „Turing Machines“, Stanfordská encyklopédia filozofie (vydanie z jesene 2008), Edward N. Zalta (ed.), URL = ,
  • Bishop, Errett, 1977, základy konštruktívnej analýzy, McGraw-Hill.
  • Blass, Andreas a Gurevich, Yuri, 2003, „Algoritmy: hľadanie absolútnych definícií“, Bulletin Európskej asociácie pre teoretickú informatiku (EATCS) č. 81: 195 - 225.
  • Bowen, JP a Hinchey, MG, 1995, „Desatoro formálnych metód“, IEEE Computer 28 (4): 56–63.
  • Bowen, JP a Hinchey, MG, 2005, „Desatoro formálnych metód: desať rokov neskôr“, počítač IEEE 39 (1): 40–48.
  • Brooks, FP, 1987, „No Silver Bullet: Essence and Accends of Software Engineering“, IEEE Computer 20 (4): 10-19.
  • Burge, T., 1998, „Computer Proof, a priori Knowledge and Other Minds“, Philosophical Perspectives 12: 1-37.
  • Bynum, T., 2001, „Počítačová etika: základné pojmy a historický prehľad“, Stanfordská encyklopédia filozofie (vydanie Winter 2001), Edward N. Zalta (ed.), URL =
  • Colburn, T., 2004, „Metodológia informatiky“, Blackwell - Sprievodca filozofiou informatiky a informácií, Luciano Floridi (ed.), Malden: Blackwell, s. 318–326.
  • Colburn, T. a Shute, G., 2007, „Abstrakcia v informatike“, Minds and Machines 17 (2): 169–184.
  • Coleman, KG, 2008, „Počítačová a morálna zodpovednosť“, Stanfordská encyklopédia filozofie (vydanie z jesene 2008), Edward N. Zalta (ed.), URL = ,
  • Copeland, B. Jack, 2008, „The Church-Turing Thesis“, Stanfordská encyklopédia filozofie (vydanie z jesene 2008), Edward N. Zalta (ed.), URL = ,
  • Copeland, B. Jack, 2004, „Výpočet“, Blackwell Sprievodca filozofiou práce na počítači a informáciách, Luciano Floridi (ed.), Malden: Blackwell, s. 3–17.
  • Coquand, Thierry, 2006, „Teória typov“, Stanfordská encyklopédia filozofie (vydanie Winter 2006), Edward N. Zalta (ed.), URL = ,
  • DeMillo, RA, Lipton, RJ a Perlis, AJ, 1979, „Sociálne procesy a korekcie teorémov a programov“, Komunikácia ACM 22 (5): 271–280.
  • Denning, PJ, 1980, „O ľudových teorémoch a ľudových mýtoch“, komunikácia ACM 23 (9): 493–494.
  • Denning, PJ, 1980b, „Čo je experimentálna informatika?“Oznámenia ACM 23 (10): 534–544.
  • Denning, PJ, 1981, „Analýza výkonnosti: Experimentálna informatika ako najlepšia“, Komunikácia ACM 24 (11): 725–727.
  • Denning, PJ, 1985, „The Science of Computing: Čo je to informatika?“American Scientist 73 (1): 16–19.
  • Denning, PJ (ed.), A kol., 1989, „Computing as a Discipline“, komunikácia ACM 32 (1): 9–23.
  • Dijkstra, E., 1968. „Ísť na vyhlásenie považované za škodlivé“, oznámenia ACM 11 (3): 147–148.
  • Dummett, M., 1991, „Logická základňa metafyziky“, Harvard University Press.
  • Dummett, M., 2006, „Myšlienka a realita“, Oxford University Press.
  • Eden, Amnon, 2007, „Tri paradigmy v informatike“, Minds and Machines 17 (2): 135–167.
  • Feferman, S., 1992, „Logika ukončenia a správnosti funkčných programov“, Logic for Computer Science: 95–127, MSRI Pubs. vol. 21, New York, NY: Springer-Verlag.
  • Fetzer, JH, 1988, „Overenie programu: samotná myšlienka“, oznámenia ACM 31 (9): 1048–1063.
  • Fetzer, JH, 1999, „Úloha modelov v informatike“, Monist 82 (1): 20–36.
  • Fine, K., 2008, „Limity abstrakcie“. Oxford: Oxford University Press.
  • Floridi, Luciano, 2004. „Informácie“, Blackwell - Sprievodca filozofiou informatiky a informácií, Luciano Floridi (ed.), Malden: Blackwell, s. 40–62.
  • Floridi, Luciano 2007, „Sémantické koncepcie informácií“, Stanfordská encyklopédia filozofie (vydanie z jari 2007), Edward N. Zalta (ed.), URL = ,
  • Forrest, P., 2006, „The Identity of Indiscernibles“, Stanfordská encyklopédia filozofie (vydanie z jesene 2008), Edward N. Zalta (ed.), Pripravovaná adresa URL =. >.
  • Fuchs, NE, 1992, „Špecifikácie sú (pokiaľ možno) vykonateľné“. Software Engineering Journal 7 (5): 323–334.
  • Gandy, R., 1980, „Cirkevná téza a princípy mechanizmov“, Kleeneho sympózium, Barwise, J., Keisler, HJ a Kunen, K. (vyd.), Amsterdam: Severný Holland.
  • Hagar, Amit, 2007, „Quantum Algorithms: Philosophical Lessons“, Minds and Machines 17 (2): 233–247.
  • Hale, B. and Wright, C., 2001, „Správna štúdia odôvodnenia: Eseje k neof Fregejskej filozofii matematiky“, Oxfordské štipendiá, Line, Oxford: Oxford University Press.
  • Hartmanis, J., 1993, „Niektoré pozorovania o povahe informatiky“, prednášky v informatike 761, Shyamasundar, RK (ed.): 1-12.
  • Hartmanis, J., 1994, „Prednáška Turing Award: O výpočtovej zložitosti a povahe informatiky“, Komunikácia ACM 37 (10): 37–43.
  • Hoare, CAR, 1969, „Axiomatický základ pre počítačové programovanie“. Oznámenia ACM 12 (10): 576–585. [Opakovaná tlač je k dispozícii online]
  • Hodges, A., 2006, „Vedeli cirkev a Turingova práca o strojoch?“, Práca cirkvi po 70 rokoch Olszewski, Adam (ed.)
  • Hodges, A., 2007, „Dokáže kvantové výpočty vyriešiť klasicky neriešiteľné problémy?“
  • Horsten, L., 2008, „Filozofia matematiky“, Stanfordská encyklopédia filozofie (vydanie z jesene 2008), Edward N. Zalta (ed.), URL = ,
  • Immerman, N., 2006, „Computability and Complexity“, Stanfordská encyklopédia filozofie (vydanie 2006), Edward N. Zalta (ed.), URL = ,
  • Irvine, AD, 2003, „Russell's Paradox“, Stanfordská encyklopédia filozofie (jeseň 2006), Edward N. Zalta (ed.), URL =
  • Jones, CB a Hayes, IJ, 1990, „Špecifikácie nie sú (nevyhnutne) škodlivé“, Software Engineering Journal 4 (6): 330–339.
  • Krishnamurthi, S., 2003. Programovacie jazyky: Aplikácia a interpretácia,
  • Kreisel, G., Gandy, RO, 1975, „Niektoré dôvody na zovšeobecnenie teórie rekurzie.“The Journal of Symbolic Logic 40 (2): 230–232.
  • Kripke, S., 1982, Wittgenstein o pravidlách a súkromnom jazyku. Harvard University Press.
  • Kuhn, TS, 1970, Štruktúra vedeckých revolúcií, 2.. ed., Chicago: Univ. spoločnosti Chicago Press.
  • Landin, PJ, 1964, „Mechanické vyhodnotenie výrazov“, Computer Journal 6 (4): 308–320.
  • Milne, R. a Strachey, C., 1977, Theory of Programming Language Sémantics, New York, NY: Halsted Press.
  • McLaughlin, B., 2004, „Computationalism, Connecionism and Philosophy of Mind“, Blackwell Sprievodca filozofiou informatiky a informácií, Floridi, Luciano (ed.) Malden: Blackwell, str. 135–152.
  • Minsky, M., 1970, „ACM Turingová prednáška: Forma a obsah v informatike“, Journal of Association for Computing Machinery 17 (2): 197–215.
  • Moor, JH, 1978, „Tri mýty o počítačovej vede“, Britský časopis pre filozofiu vedy 29 (3): 213–222.
  • Moschovakis, YN, 1998, „O založení teórie algoritmov“, Pravda v matematike Dales, Harold G. a Oliveri, Gianluigi (ed.), Oxford: Oxford University Press.
  • Pierce, Benjamin C., 2002, Druhy a programovacie jazyky, Cambridge, MA: MIT Press.
  • Plotkin, GD, 1981, „Štrukturálny prístup k prevádzkovej sémantike“, Tech. Rep. DAIMI FN-19, Katedra informatiky, Aarhus University, Aarhus, Denmark.
  • Rapaport, WJ, 2005a, „Filozofia informatiky: úvodný kurz“, učiteľstvo filozofie 28 (4): 319–341.
  • Rapaport, WJ, 2005b, „Implementácia je sémantická interpretácia: ďalšie myšlienky.“Žurnál experimentálnej a teoretickej umelej inteligencie 17 (4): 385–417.
  • Rosen, Gideon, 2001. „Abstraktné objekty“, Stanfordská encyklopédia filozofie (jeseň 2001, vydanie), Edward N. Zalta (ed.), URL = ,
  • Shapiro, S., 1997, Filozofia matematiky: Štruktúra a ontológia, Oxford: Oxford University Press.
  • Sieg, Wilfried, 2008, „Cirkev bez dogmy: Axiómy pre počítateľnosť“, Nové počítačové paradigmy, Lowe, B., Sorbi, A. a Cooper, B. (vyd.), Springer-Verlag, 139–152.
  • Smith, BC, 1996, „Limits of Correctness in Computers“, Computerization and Controversy, Kling, R. (ed.), Morgan Kaufman, s. 810–825.
  • Szabó, ZG, 2007, „Kompozičnosť“, Stanfordská encyklopédia filozofie (vydanie z jari 2007), Edward N. Zalta (ed.), URL = ,
  • Thomason, R., 2005, „Logická a umelá inteligencia“, Stanfordská encyklopédia filozofie (vydanie Summer 2005), Edward N. Zalta (ed.), URL = ,
  • Turner, Raymond a Eden, Amnon H., 2007, „Smerom k jazykovej ontológii programovania“, výpočty, informácie, poznanie - Nexus a Liminal, Dodig-Crnkovic, Gordana a Stuart, Susan (ed.), Cambridge, Spojené kráľovstvo: Cambridge. Scholars Press, str. 147 - 159.
  • Turner, Raymond, 2005, „The Foundations of Specification“, Journal of Logic Computation 15: 623–662.
  • Turner, Raymond, 2007, „Porozumenie programovacích jazykov“. Minds and Machines 17 (2): 129-133
  • Tymoczko, T., 1979, „Štvorfarebný problém a jeho filozofický význam“, Journal of Philosophy 76 (2): 57–83.
  • White, G., 2004, „Filozofia počítačových jazykov“, Blackwell - Sprievodca filozofiou informatiky a informácií, Floridi, Luciano (ed.), Malden: Blackwell, s. 318–326.
  • Wing, JM, 2006, „Computational Thinking“, Komunikácia ACM, 49 (3): 33–35.
  • Wittgenstein, L., 1953. Filozofické vyšetrenia. Vydavateľstvo Blackwell.
  • Wright, Crispin, 1983, Fregeova koncepcia čísel ako objektov, Aberdeen University Press.

Ďalšie internetové zdroje

  • Filozofia informatiky na Essex University
  • Medzinárodná asociácia pre informatiku a filozofiu

Odporúčaná: