Filozofie Informatiky

Obsah:

Filozofie Informatiky
Filozofie Informatiky

Video: Filozofie Informatiky

Video: Filozofie Informatiky
Video: 01 Základy filosofie : Praktická a teoretická filosofie 2023, Prosinec
Anonim

Toto je soubor v archivech Stanfordské encyklopedie filozofie. Informace o autorovi a citaci Přátelé PDF Náhled | InPho Search | PhilPapers Bibliography

Filozofie informatiky

První publikováno 12. prosince 2008

Filozofie informatiky (PCS) se zabývá filosofickými problémy, které vyvstávají z reflexe povahy a praxe akademické disciplíny informatiky. Ale co je to druhé? To rozhodně není jen programování. Konec konců, mnoho lidí, kteří píšou programy, nejsou počítačoví vědci. Například fyzici, účetní a chemici. Počítačová věda by byla ve skutečnosti lépe popsána jako činnost související s metaaktivitou spojenou s programováním. Obecněji a přesněji se zabývá návrhem, vývojem a zkoumáním konceptů a metodik, které usnadňují a napomáhají specifikaci, vývoji, implementaci a analýze výpočetních systémů. Příklady této činnosti mohou zahrnovat návrh a analýzu programovacích, specifikačních a architektonických popisných jazyků;konstrukce a optimalizace kompilátorů, tlumočníků, prokladů vět a systémů odvozování typů; vynález logických rámců a návrh vestavěných systémů a mnoho dalšího. Tyto činnosti obklopují a podporují mnohé z ústředních filosofických otázek informatiky a mnoho z nich se soustředí na logické, ontologické a epistemologické problémy, které se ho týkají. Nakonec je však informatika tím, co počítačoví vědci dělají, a žádná přesná formulační definice nemůže fungovat jen jako průvodce následující diskusí. Opravdu je to nadějeTyto činnosti obklopují a podporují mnohé z ústředních filosofických otázek informatiky a mnoho z nich se soustředí na logické, ontologické a epistemologické problémy, které se ho týkají. Nakonec je však informatika tím, co počítačoví vědci dělají, a žádná přesná formulační definice nemůže fungovat jen jako průvodce následující diskusí. Opravdu je to nadějeTyto činnosti obklopují a podporují mnohé z ústředních filosofických otázek informatiky a mnoho z nich se soustředí na logické, ontologické a epistemologické problémy, které se ho týkají. Nakonec je však informatika tím, co počítačoví vědci dělají, a žádná přesná formulační definice nemůže fungovat jen jako průvodce následující diskusí. Opravdu je to naděje PCS nakonec přispěje k hlubšímu pochopení podstaty informatiky.

Mapování filosofického prostředí informatiky není snadný úkol. Naštěstí tradiční odvětví filozofie mohou poskytovat intelektuální a strukturální vedení. Například ve filosofiích matematiky a fyziky existují ústřední otázky týkající se povahy řešených předmětů, toho, co tvoří znalosti a prostředků k jejich získání. Filozofie jazyka vyvolává otázky týkající se obsahu a formy sémantické teorie přirozeného jazyka. Přináší do popředí základní ontologické a epistemologické předpoklady sémantického podniku. Ontologie ukazuje, jaké druhy věcí existují, jak je individualizovat a jejich roli při vytváření našich koncepčních schémat. Filozofie logiky poskytuje přehled a analýzu různých druhů logických systémů a jejich roli v každodenním a specializovaném diskurzu. Analogie a podobnosti z těchto a dalších oborů filosofie by měly být užitečné při identifikaci a objasnění některých ústředních filosofických problémů počítačové vědy. Existující vliv těchto disciplín na PCS se objeví, jak budeme pokračovat. Zejména druhá, třetí a čtvrtá sekce budou odrážet dopad ontologie a filozofie jazyka a matematiky.

  • 1. Některé ústřední problémy
  • 2. Existence a identita

    • 2.1 Duální povaha programů
    • 2.2 Programy a algoritmy
    • 2.3 Programy a specifikace
  • 3. Sémantika

    • 3.1 Denotační a operační sémantika
    • 3.2 Implementace a sémantická interpretace
    • 3.3 Sémantika, rovnost a identita
  • 4. Důkazy a programy

    • 4.1 Důkazy v informatice
    • 4.2 Důkazy v matematice
    • 4.3 Fyzická a abstraktní korektnost
  • 5. Vyčíslitelnost

    5.1 Církevně-Turingova práce

  • 6. Programování a programovací jazyky

    • 6.1 Abstrakce
    • 6.2 Typy a ontologie
  • 7. Právní a etické otázky

    • 7.1 Autorská práva, patenty a totožnost
    • 7.2 Správnost a odpovědnost
  • 8. Nové zvraty nebo nové problémy?
  • Bibliografie
  • Další internetové zdroje
  • Související záznamy

1. Některé ústřední problémy

Nejprve si vyjmenujeme, co považujeme za některé z hlavních otázek a otázek. To poskytne čtenáři rychlý přehled věcí, které doplní podrobnější diskusi, která má přijít. Ačkoli mnoho z nich se v literatuře přímo nezabývalo a potřebují nějaké vysvětlení, tyto otázky ilustrují druhy problémů, se kterými se zabýváme PCS.

  1. Jaké věci jsou programy? Jsou abstraktní nebo konkrétní? (Moor 1978; Colburn 2004)
  2. Jaké jsou rozdíly mezi programy a algoritmy? (Rapaport 2005a)
  3. Co je specifikace? A co je specifikováno? (Smith 1985; Turner 2005)
  4. Liší se specifikace zásadně od programů? (Smith 1985)
  5. Co je implementace? (Rapaport 2005b)
  6. Co odlišuje hardware od softwaru? Existují programy ve fyzické i symbolické formě? (Moor 1978; Colburn 2004)
  7. Jaké věci jsou digitální objekty? Potřebujeme novou ontologickou kategorii, abychom je mohli ubytovat? (Allison et al. 2005)
  8. Jaké jsou cíle různých sémantických teorií programovacích jazyků? (White 2004; Turner 2007)
  9. Jak se otázky ve filozofii programovacích jazyků týkají paralelních otázek ve filozofii jazyka? (White 2004)
  10. Souvisí zásada modularity (např. Dijkstra 1968) s koncepčními otázkami plné abstrakce a kompozičnosti?
  11. Jaké jsou základní koncepční rozdíly mezi následujícími programovacími paradigmaty: strukturované, funkční, logické a objektově orientované programování?
  12. Jaké jsou role typů v informatice? (Barandregt 1992; Pierce 2002)
  13. Jaký je rozdíl mezi operační a denotační sémantikou? (Turner 2007)
  14. Co to znamená, že program je správný? Jaký je epistemologický stav důkazů správnosti? Liší se zásadně od důkazů v matematice? (DeMillo a kol. 1979; Smith 1985)
  15. Co dokazují důkazy o správnosti? (Fetzer 1988; Fetzer 1999; Colburn 2004)
  16. Co je abstrakce v informatice? Jak to souvisí s abstrakcí v matematice? (Colburn & Shute 2007; Fine 2008; Hale & Wright 2001)
  17. Jaké jsou formální metody? Co je formální o formálních metodách? Jaký je rozdíl mezi formální a neformální metodou? (Bowen & Hinchey 2005; Bowen & Hinchey 1995)
  18. Jaký druh disciplíny je informatika? Jaké jsou role matematického modelování a experimentování? (Minsky 1970; Denning 1980; Denning 1981; Denning a kol. 1989; Denning 1985; Denning 1980b; Hartmanis 1994; Hartmanis1993; Hartmanis 1981; Colburn 2004; Eden 2007)
  19. Měly by být programy považovány za vědecké teorie? (Rapaport 2005a)
  20. Jak se matematika používá v informatice? Používají se matematické modely popisným nebo normativním způsobem? (White 2004; Turner 2007)
  21. Zachycuje Ture-Turingova teze matematický pojem účinné nebo mechanické metody v logice a matematice? Zachycuje výpočty, které může provádět člověk? Vztahuje se jeho oblast působnosti na fyzické stroje? (Copeland 2004; Copeland 2007; Hodges 2006)
  22. Dokáže pojem výpočetní myšlení vydržet filozofické zkoumání? (Wing 2006)
  23. Jaká logika je vhodná pro správnost a ukončení programu? (Hoare 1969; Feferman 1992) Jak je logika závislá na základním programovacím jazyce?
  24. Co jsou informace? (Floridi 2004; Floridi 2005) Zdůrazňuje tento pojem některé z zde uvedených otázek?
  25. Proč existuje tolik programovacích jazyků a programovacích paradigmat? (Krishnamurthi 2003)
  26. Mají programovací jazyky (a paradigma) povahu vědeckých teorií? Co způsobuje posun paradigmatu programování? (Kuhn 1970)
  27. Vyvolává softwarové inženýrství nějaké filozofické problémy? (Eden 2007)

V následujícím textu si na několik těchto otázek položíme nějaké tělo.

2. Existence a identita

Jak kategorizujeme a individualizujeme entity a koncepty informatiky? Jaké jsou věci a co určuje jejich identitu? Například některé jsou jasně konkrétními fyzickými objekty (např. Čipy, směrovače, notebooky, grafické karty) a některé ne (např. Formální gramatiky, abstraktní stroje, provizorní věty, logické rámce, algebry procesů, abstraktní datové typy). Charakterizace některých ústředních pojmů, jako jsou programy a data, byla však problematičtější. Především se považuje za ontologický stav programů, aby nebyl zcela přímočarý, ani se nevyjadřuje otázka jejich kritérií identity.

2.1 Duální povaha programů

Mnoho autorů (Moor 1978; Rapaport 2005b; Colburn 2004) diskutuje o tzv. Duální povaze programů. Na první pohled se zdá, že program má jak textovou, tak mechanickou nebo procesní podobu. Jako text lze program upravovat. Zdá se však, že její projev na strojově čitelném disku má zcela odlišné vlastnosti. Zejména může být proveden na fyzickém stroji. Takže podle principu nerozeznatelnosti identit (§3.3) nemohou být tyto dvě masky stejnou entitou. Každý, kdo je přesvědčen o této dualitě, má samozřejmě povinnost něco říci o vztahu mezi těmito dvěma zjevnými formami existence.

Jeden okamžitý návrh je, že jeden projev programu je implementace druhého, tj. Fyzický projev je implementace textového. I v mezích počítačové vědy však není hned jasné, že slovo implementace odkazuje pouze na jeden pojem. Často se používá k odkazu na výsledek procesu kompilace, kdy se program ve vysokém jazyce (zdrojový kód) transformuje do strojového jazyka (kód objektu). Stejně často se však používá k označení procesu, ve kterém je zdrojový kód nějak realizován přímo v hardwaru (např. Konkrétní implementace v polovodičích). A pravděpodobně to je relevantní pojem. Ale bez podrobnější filozofické analýzy pojmu implementace (§3.2) samotného (Rapaport 2005b),není jasné, jak to vede k diskusi; zdá se, že jsme jen pojmenovali vztah mezi dvěma zjevnými formami existence. V podobném duchu ostatní popsali vztah mezi programovým textem a programovým procesem jako podobný vztahu mezi plánem a jeho projevem jako sérii fyzických akcí. Nezdá se však, že by to bylo docela analogické párování program-proces: nejsme v pokušení odkazovat na plán a fyzický proces jako na různé projevy stejné věci. Například jsme v pokušení přemýšlet o plánu jít na procházku a na skutečnou procházku jako na různé aspekty stejné věci?jiní popsali vztah mezi programovým textem a programovým procesem jako podobný vztahu mezi plánem a jeho projevem jako sérii fyzických akcí. Nezdá se však, že by to bylo docela analogické párování program-proces: nejsme v pokušení odkazovat na plán a fyzický proces jako na různé projevy stejné věci. Například jsme v pokušení přemýšlet o plánu jít na procházku a na skutečnou procházku jako na různé aspekty stejné věci?jiní popsali vztah mezi programovým textem a programovým procesem jako podobný vztahu mezi plánem a jeho projevem jako sérii fyzických akcí. Nezdá se však, že by to bylo docela analogické párování program-proces: nejsme v pokušení odkazovat na plán a fyzický proces jako na různé projevy stejné věci. Například jsme v pokušení přemýšlet o plánu jít na procházku a na skutečnou procházku jako na různé aspekty stejné věci?jsme v pokušení přemýšlet o plánu jít na procházku a skutečnou procházku jako na různé aspekty stejné věci?jsme v pokušení přemýšlet o plánu jít na procházku a skutečnou procházku jako na různé aspekty stejné věci?

Možná jsou záležitosti nejlépe popsány tím, že programy jako textové objekty způsobují mechanické procesy? Zdá se, že myšlenka je, že textový objekt fyzicky způsobuje mechanický proces. Zdálo by se však, že to vyžaduje trochu pečlivou analýzu povahy takového příčinného vztahu. Colburn (2004) popírá, že symbolický text má příčinný účinek; má to takový fyzický projev (věc na disku). Software je konkrétní abstrakce, která má médium popisu (text, abstrakce) a médium exekuce (např. Konkrétní implementace v polovodičích).

Trochu odlišný pohled na tyto otázky začíná otázkou identity programu. Kdy jsou dva programy považovány za stejné? Takové problémy vznikají například při pokusech o určení právní identity kusu softwaru. Pokud identifikujeme program s jeho textovým projevem, pak identita programu je citlivá na změny v jeho vzhledu (např. Změna písma). Je zřejmé, že to není pouze text, který nám poskytuje filosoficky zajímavé pojetí identity programu. Spíše, abychom dosáhli informovaného kritéria identity, musíme více zohlednit sémantiku a implementaci. K tomuto tématu se vrátíme v §3 a §6.

2.2 Programy a algoritmy

Ať už vezmeme jakýkoli názor na programy, rozlišení algoritmus-program vyžaduje také další koncepční vyjasnění. Algoritmy jsou často považovány za matematické objekty. Pokud je to pravda, pak mnoho filozofických otázek, které se jich týkají, patří také do filozofie matematiky. Algoritmy jsou však pravděpodobně více centrální pro počítačové vědy než pro matematiku a zaslouží si více filosofické pozornosti, než jaké jim bylo věnováno. Přestože došlo k určitému značnému matematickému studiu algoritmů v teoretické informatice a matematické logice (např. Moschovakis 1997; Blass & Gurevich 2003), nedošlo k velkému množství filozofické diskuse, která by byla soustředěna na povahu algoritmů a rozdíly mezi algoritmy a programy.

Je to, že algoritmy jsou abstraktní objekty ve smyslu nabízeném Rosenem (2001), zatímco programy jsou konkrétní? Přesněji, jsou algoritmy abstraktním matematickým protějškem textového objektu, který je programem? Tento obrázek se přirozeně hodí k formě ontologického platonismu (Shapiro 1997), kde algoritmy mají ontologickou prioritu a programy poskytují jazykové prostředky, jak se k nim dostat. Z tohoto pohledu by algoritmy mohly být použity k poskytnutí sémantiky (§3) programovacích jazyků. Tento obrázek samozřejmě zdědí všechny výhody a problémy s platonickou perspektivou (Shapiro 1997).

Méně platonický pohled má to, že algoritmy obsahují myšlenky vyjádřené v programu. Podle zákona to bylo považováno za důvod, že algoritmy, na rozdíl od programů, nejsou chráněny autorskými právy (§7.1). Pojem myšlenka samozřejmě vyžaduje další filozofickou analýzu. Opravdu lze tvrdit, že holé pojetí algoritmu vyžaduje mnohem méně objasnění než standardní popis myšlenek a související pojmy abstrakce (Rosen 2001).

Konečně, je to téměř folklórní názor, že Turingovy stroje nám poskytují formální analýzu naší představy o algoritmu. Přizpůsobuje se to však současnému pojmu, který je používán v moderní informatice, s jeho sofistikovanými představami o reprezentaci a kontrole? Moschovakis (1997) nabízí analýzu, která je o něco lepší.

2.3 Programy a specifikace

Další populární rozlišení, které by mělo být tématem některé kritické analýzy, nastává s ohledem na programy a specifikace. Jaké jsou specifikace a jak se liší od programů? I když ve filosofické literatuře o tomto problému není přímá diskuse (viz Smith 1985), povaha specifikací je základním tématem pro koncepční základy počítačové vědy.

Jeden pohled, který se běžně vyskytuje v učebnicích o formálních specifikacích, spočívá v tom, že programy obsahují podrobné strojové pokyny, zatímco (funkční) specifikace popisují pouze vztah mezi vstupem a výstupem. Jeden zřejmý způsob, jak to rozbalit, je z hlediska imperativního / popisného rozlišení: programy jsou nezbytné a popisují, jak dosáhnout cíle popsaného ve specifikaci. Zdá se, že v imperativním paradigmatu programování to jistě zachycuje podstatný rozdíl. Není to však vhodné pro všechny. Například logické, funkční a objektově orientované programovací jazyky se tím zjevně nespravují: programy převzaté v nominální hodnotě obsahují programy definované v těchto jazycích ze sekvencí definic, nikoli z „instrukcí“. Dále,nefunkční specifikace nemohou být vyjádřeny jako prohlášení o vztahu mezi vstupem a výstupem, protože ukládají požadavky na konstrukci a na druh pokynů, které mohou být obsaženy v jakémkoli programu.

Jiný pohled trvá na tom, že rozdíl mezi specifikacemi a programy má být lokalizován z hlediska pojmu implementace, tj. Lze jej sestavit a provést? Co to ale znamená? Znamená to ve smyslu existujícího kompilátoru? Tato interpretace je poněkud mělká, protože nenabízí konceptuální kritérium rozlišování, ale podmíněné. Například během prvních pěti generací programovacích jazyků (2. polovina 20. století) se rekurzivní, modulární, funkční a objektově orientované specifikace jedné generace začaly artikulovat jako programy v další, tj. V dnešních specifikačních jazycích. často se stanou zítřejšími programovacími jazyky.

Jiný pohled navrhuje, že programovací jazyky jsou ty jazyky, které mají implementaci v zásadě, zatímco specifikační jazyky jsou ty, které nemohou. A pravděpodobně, důvodem, proč nemohou, je to, že specifikační jazyky umožňují člověku vyjádřit pojmy, které nejsou Turingovy kompatibilní. Tento rozdíl je v souladu s mnoha existujícími specifikačními jazyky, které jsou založeny na teorii množin Zermelo-Fraenkel a logice vyššího řádu. Zdá se však divné, že to, co by mělo charakterizovat specifikační jazyk, je skutečnost, že dokáže vyjádřit nekompatibilní vlastnosti a vztahy. Jsou některé z těchto nekompatibilních požadavků v praxi skutečně nutné (Jones & Hayes 1990; Fuchs 1994)?

Rozmanitost těchto názorů naznačuje, že tradiční binární propast mezi specifikacemi a programy je příkladem problému v PCS, který si zaslouží více pozornosti, a to nejen kvůli koncepčnímu objasnění, ale také proto, že by to mohlo mít důsledky pro návrh budoucích programovacích a specifikačních jazyků..

3. Sémantika

Gramatika programovacího jazyka určuje pouze to, co je syntakticky legitimní; neinformuje nás o zamýšleném smyslu jejích konstruktů. Gramatika programovacího jazyka tedy sama o sobě neurčuje to, v čem lidé programují. Místo toho je to gramatika obohacená sémantickým účtem (formálním nebo neformálním). Sémantika má informovat programátora, spisovatele kompilátoru a teoretika, který má zájem prozkoumat vlastnosti jazyka. Ve skutečnosti se často tvrdí, že pro splnění různých požadavků programátora a spisovatele kompilátoru jsou vyžadovány různé sémantické účty na různých úrovních abstrakce. Úkolem teoretika je prozkoumat jejich vztah.

Toto je standardní obrázek, který se objevuje v sémantické literatuře. Ale hodně z toho potřebuje koncepční vyjasnění. V této části se zabýváme několika problémy, které z této činnosti vyplývají.

3.1 Denotační a operační sémantika

Jeden z nejdůležitějších rozdílů v sémantice programovacích jazyků se soustředí na rozlišení mezi operační a denotační sémantikou. Operativní sémantika (Landin 1964; Plotkin 1981) poskytuje interpretaci programovacího jazyka v podobě nějakého abstraktního stroje. Přesněji řečeno jde o překlad výrazů v programovacím jazyce do instrukcí nebo programů abstraktního stroje. Například program 1 by byl rozbalen do posloupnosti abstraktních strojních operací, jako je „a ← 0“a push. Operační sémantiku lze také chápat jako algoritmickou sémantiku, zejména pokud je základní stroj zaměřen na charakterizaci samotného pojmu algoritmus (např. Moschovakis 1997).

Naproti tomu denotační sémantika (Milne & Strachey 1977) poskytuje interpretaci do matematických struktur, jako jsou sady nebo kategorie. Například, v klasickém přístupu, sady - ve formě kompletních mříží a spojitých funkcí na nich - poskytují matematický rámec.

Existuje však mezi nimi nějaký významný koncepční rozdíl? Je to, že denotační sémantika, která je explicitně založena na matematických strukturách, jako jsou množiny, je matematická, zatímco operační sémantika není? Turner (2007) tvrdí, že ne: všichni poskytují matematické interpretace.

Nebo je to, že operační sémantika je více podobná stroji, ve smyslu vytvoření abstraktního stroje, zatímco u denotační sémantiky, která je dána teoretickými pojmy, neexistuje náznak abstraktního stroje? Takové rozdíly se však neprokázaly koncepčně významné, protože denotační sémantické účty lze považovat za struktury, které představují abstraktní stroj se státy a operacemi, které na nich působí. Rovněž provozní účty nejsou blíže implementaci: denotační přístupy (Milne & Strachey 1977) jsou také velmi flexibilní a jsou schopny odrážet různé úrovně podrobností provádění.

Další možné rozlišení se týká kompoziční (nebo jiné) povahy sémantiky. Volně řečeno, sémantika je považována za kompoziční (Szabó 2007), pokud sémantická hodnota komplexního výrazu je funkcí sémantických hodnot jeho částí. Kompozičnost je považována za klíčové kritérium sémantiky, protože se zdá, že je třeba vysvětlit produktivitu našeho jazykového porozumění: říká se, že vysvětluje, jak chápeme a konstruujeme komplexní programy. Poskytuje nám však klín k oddělení operační a denotační sémantiky? Bohužel se zdá, že tak neučiní: zatímco denotační definice jsou navrženy jako kompoziční, rozhodně to tak není, že všechny operační sémantiky nejsou kompoziční.

Konečně, některé verze sémantiky se liší, pokud jde o existenci rekurzivního modelu, tj. Interpretace v Turingových strojích nebo Gandyho strojích (§5.1). Ani to však není přesně v souladu s tradičním provozním / denotačním dělením. Některé denotační definice mají rekurzivní model a jiné ne.

Zdá se, že je velmi obtížné tuto odlišnost připnout. Na první pohled se nejeví žádné ostré koncepční rozlišení mezi operační a denotační sémantikou.

3.2 Implementace a sémantická interpretace

Jaký je rozdíl mezi sémantickou interpretací a implementací? Jaký je například koncepční rozdíl mezi kompilací programu do strojového kódu a udělením denotační sémantiky? Podle Rapaporta (2005b) je implementace nejlépe vnímána jako sémantická interpretace, kde je druhá implementace charakterizována mapováním mezi dvěma doménami: syntaktickou a sémantickou. A obě jsou určena pravidly nějakého popisu. Například kompilovaný kód (v kombinaci s pravidly, kterými se řídí jeho sémantika) je sémantický účet zdrojového kódu.

V běžném chápání pojmu „implementace“je sémantická doména dodávána fyzickým strojem. Jinými slovy, samotný fyzický stroj („implementace“) určuje, co program znamená. Například v programovacích jazycích je toto ekvivalentní tvrzení, že sémantika pro programovací jazyk C ++ je určena počítačem Bjarne, na kterém běží jeho kompilátor C ++. Ale toto vysvětlení je zjevně nedostatečné: Pokud předpokládáme, že Bjarneův stroj určuje význam C ++ programů, pak neexistuje žádná představa o nesprávné funkci nebo nesprávné interpretaci: cokoli, co Bjarne počítač dělá, je, ipso facto, význam programu. Ale elektrická bouře může způsobit, že se stroj pokazí. Co bychom ale mohli myslet tím, že se pokazíme? Je pravděpodobné, že (nefunkční) stroj neztělesňuje zamýšlený význam. Ale,zase se zdá, že jsme schopni tuto větu pochopit pouze na základě strojově nezávislé charakterizace významu. A na určité úrovni to musí být poskytnuto prostřednictvím nezávislého sémantického popisu. To naznačuje, že pojem holé implementace nenabízí adekvátní pojem sémantiky. (Porovnejte s: Kripke 1982; Wittgenstein 1953).

3.3 Sémantika, rovnost a identita

Uzavřeli jsme diskusi o programové rovnosti (§2.1) slibem přenést sémantiku do obrazu. Každý sémantický účet programovacího jazyka určuje pojem rovnosti pro programy, konkrétně dva programy jsou považovány za rovnocenné, pokud mají stejnou sémantickou hodnotu, tj.

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

kde || P || je sémantická hodnota programu P. V tomto smyslu tedy každý sémantický účet určuje kritérium rovnosti. Například jedna verze denotační sémantiky by se odtrhla od všech výpočtových kroků a srovnávala programy, které v jistém smyslu počítají stejnou matematickou funkci. Například tímto kritériem by se považovaly následující dva programy:

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

začíná

pokud n = 0, pak Factorial: = 1;

else

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

konec;

Program 1

funkce Factorial (n: integer): integer

var

x, y: integer;

začátek

y: = 1;

x: = 0;

zatímco x <n začít

x: = x +1;

y: = y * x;

konec

Factorial: = y;

konec;

Program 2

Na druhé straně, operativnější pohled, který odkazuje na kroky výpočtu, by nepovažoval Program 1 a Program 2 za rovnocenné. Ve skutečnosti s ohledem na §3.1 můžeme navrhnout sémantické účty, které odrážejí jakoukoli úroveň detailů implementace. Různé sémantické účty určují různé pojmy rovnosti, které mohou sloužit různým koncepčním a praktickým cílům. Ale který z nich by měl být použit k určení jazyka? Naštěstí existují některá desiderata, která lze použít; můžeme omezit možnosti: některé sémantické účty nám poskytují logicky uspokojivou představu o identitě a některé ne.

Indiscernibility of identicals je princip zabudovaný do běžného predikátové logiky. Uvádí, že pokud jsou dva objekty stejné, sdílejí všechny vlastnosti. Princip obrácení, identita nerozlišitelnýchuvádí, že pokud pro každou vlastnost F má objekt x F a pouze tehdy, má-li objekt y F, pak x je identické s y. Identita nerozlišitelných znamená, že pokud jsou x a y zřetelné, pak existuje alespoň jedna vlastnost, kterou má x a y ne. Spojení obou principů se někdy nazývá Leibnizův zákon (Forrest 2006). Leibnizův zákon je často považován za zásadní pro jakýkoli pojem rovnosti. Tyto zákony jsou obvykle formulovány v logických teoriích, jako je logika druhého řádu. Nejvíce nás však bude zajímat jejich schopnost rozlišovat mezi různými druhy sémantiky programovacího jazyka. Leibnizův zákon je skutečně jedním z ústředních pojmů moderní sémantické teorie. Kritérium identity je upřesněno z hlediska pozorovací ekvivalence.

Dva programy M a N jsou definovány jako pozorovatelně ekvivalentnípokud a pouze tehdy, pokud ve všech kontextech C […], kde C [M] je platný program, platí, že C [N] je také platný program se stejnou sémantickou hodnotou. Například říkáme, že Oracle a DB2 (programy manipulující s relačními databázemi) jsou pozorovatelně ekvivalentní podle nějakého sémantického účtu operací na relačních databázích pouze tehdy, pokud je provádějí v „stejném“kontextu (operační systém, architektura počítače, vstup atd.)) poskytuje „stejnou“databázi. Pojem pozorovatelně rovnocenný je samozřejmě třeba vzít s špetkou soli. Zjevně nemůžeme sledovat chování programu ve všech kontextech. Observační ekvivalence však odráží základní koncepční požadavek, který vychází z principů nerozeznatelnosti identit a z totožnosti nerozlišitelností.

V sémantice, jestliže všechny pozorovatelně odlišné programy mají odlišné sémantické hodnoty, je sémantika považována za zdravou. Zvuková sémantika tedy splňuje následující zásadu:

|| P || = || Q || znamená, že pro všechny kontexty C, || C [P] || = || C [Q] ||

Mělo by být jasné, že pojem identity vyvolaný zvukovou sémantikou uspokojuje nerozeznatelnost identit.

Sémantika je považována za úplnou, pokud jsou jakékoli dva programy s odlišnými sémantickými hodnotami zřetelně odlišné. Přesněji řečeno, úplná sémantika splňuje následující požadavky:

Pro všechny kontexty C, || C [P] || = || C [Q] || implikuje || P || = || Q ||

Znovu by mělo být zřejmé, že úplná sémantika splňuje princip identity nerozlišitelných.

Konečně, sémantika je říkána být úplně abstraktní jestliže to je zdravé a úplné. V důsledku toho plně abstraktní sémantika splňuje Leibnizův zákon.

Toto logické pozadí poskytuje filozofické zdůvodnění vývoje zcela abstraktní sémantiky. Nabízí nám tak způsob výběru sémantických účtů, které poskytují filosoficky přijatelné představy o rovnosti. Neurčuje samozřejmě žádný jediný pojem. Poskytuje pouze nástroj pro odmítnutí těch, kteří nemohou poskytnout koncepčně přijatelný. Mnoho tzv. Denotační sémantiky není úplně abstraktní, zatímco mnoho operačních je. Ve skutečnosti jedno z ústředních témat v nedávné historii sémantiky zahrnovalo hledání zcela abstraktních definic, které jsou obsažené ve třídě sémantických definičních technik, které jsou přijímány k poskytování denotační sémantiky.

Sémantika hraje v informatice normativní nebo definující roli. Bez sémantických definic nemají jazyky a struktury žádný obsah nad rámec jejich syntaktických popisů. A ty druhé jsou stěží dostačující pro praktické nebo filozofické účely. Zatímco jsme začali s analýzou ústředních problémů, pouze jsme poškrábali povrch.

4. Důkazy a programy

Specifikace (§2.3) vyvolávají zvláštní představu o správnosti. Podle abstraktní interpretace tohoto pojmu je program považován za správný ve vztahu k (funkční) specifikaci, pokud vztah, který vytváří mezi vstupem a výstupem, odpovídá vztahu stanovenému specifikací. Přesněji, pokud p je program, pak splňuje specifikaci R, která se považuje za vztah mezi vstupním typem I a výstupním typem O, pokud platí následující:

Pro všechny vstupy i typu I pár (i, p (i)) splňuje vztah R

kde p (i) je výsledkem spuštění programu p na vstupu i. Zde R je vyjádřen v určitém specifikačním jazyce ap v nějakém programovacím jazyce. První je obvykle některá varianta (typizované) predikátové logiky a důkazy o správnosti (tj. Že prohlášení (1) platí) jsou prováděny v důkazním systému logiky. Například se často používá logika Hoare (Hoare 1969), ve které Důkazy správnosti nabývají podoby závěrů mezi trojicemi, psaných

B {P} A

kde P je program a B a A jsou tvrzení (stavy „před“a „po“programu) vyjádřené v některé verzi predikátové logiky se znaky, které usnadňují vyjádření hodnot připojených k programovým proměnným.

Jedna filozofická diskuse, která obklopuje otázku správnosti, se soustředí na povahu takových důkazů; další výzvy, které takové důkazy přinášejí.

4.1 Důkazy v informatice

Jsou důkazy o správnosti programu skutečné matematické důkazy, tj. Jsou takové důkazy srovnatelné se standardními matematickými? DeMillo a kol. (1979) tvrdí, že protože důkazy o správnosti jsou dlouhé a matematicky mělké, jsou na rozdíl od důkazů v matematice, které jsou pojmově zajímavé, přesvědčivé a přitahují pozornost dalších matematiků, kteří se na nich chtějí studovat a stavět na nich. Například důkaz v logice Hoare o tom, že program 2 vypočítává faktoriální funkci, by obsahoval podrobnosti o základní představě o státě, použil induktivní argument a zahrnoval uvažování o invarianci smyčky.

Ale takové důkazy by byly mnohem delší než samotný program. Kromě toho by úroveň, na které je zdůvodnění zakódováno v Hoare logice, vyžadovala vyjádření a zobrazení mnoha podrobností, které by za normálních okolností zůstaly implicitní. Bylo by to únavné a v případě většiny programů koncepčně triviální.

Tento argument paraleluje s pochopitelnými argumenty učiněnými ve filozofii matematiky (např. Tymoczko 1979; Burge 1988). V jeho srdci jsou epistemologické starosti: důkazy, které jsou příliš dlouhé, těžkopádné a nezajímavé, nemohou být nositeli jistoty, která se připisuje standardním matematickým důkazům. Povaha znalostí získaných z důkazů správnosti se prohlašuje, že se liší od znalostí, které lze získat z důkazů v matematice [1].

Tento zásadně sociologický pohled na důkazy je třeba také odlišit od pohledu, který tvrdí, že důkazy jsou správné nebo nesprávné způsobem nezávislým na takových epistemologických soudech. Je možné držet se realističtějšího postavení, podle kterého je jakýkoli daný důkaz buď správný nebo nesprávný, aniž by se musel vzdát požadavku, aby důkazy, aby mohly být převzaty a validovány, musely být pochopitelné.

Člověk by se mohl pokusit získat určitou půdu obhajováním toho, aby důkazy o správnosti měly být kontrolovány spíše počítačem než člověkem. Ovšem samozřejmě je třeba, aby si ověřovatel sám ověřil. Arkoudas a Bringsjord (2007) tvrdí, že pokud existuje pouze jeden důkaz správnosti, který musí být zkontrolován, a to samotný důkazní technik, pak je možnost chyb výrazně snížena.

4.2 Důkazy v matematice

Matematické důkazy, jako je důkaz Gödelovy věty o neúplnosti, jsou také dlouhé a komplikované. Matematickou komunitou je ale činí transparentními, zajímavými a pochopitelnými („kontrolovatelnými“) pomocí techniky modularity (např. Lemmat) a použití abstrakce při aktu matematické tvorby. Zavedení nových konceptů umožňuje, aby byl důkaz konstruován postupně, a tím byly důkazy lépe pochopitelné. Matematika postupuje vynalézáním nových matematických konceptů, které umožňují konstrukci vyšších úrovní a obecnějších důkazů, které by byly bez nich mnohem složitější a dokonce nemožné. Například notace exponentů umožňuje provádět výpočet mimo složitost multiplikace a argumentovat o výsledcích. Na druhém konci,vynález teorie kategorií usnadnil prohlášení a důkaz velmi obecných výsledků o algebraických strukturách, které se automaticky vztahují na celou řadu takových. Matematika není jen o důkazu; zahrnuje také abstrakci a vytváření nových konceptů a notace. Naproti tomu formální korektnosti důkazů obecně nevyužívají vytváření nových konceptů ani se neúčastní procesu matematické abstrakce. Naproti tomu abstrakce v informatice (§6.1) je soustředěna do pojmů potřebných pro návrh programu. Jak ale tyto dva pojmy abstrakce souvisejí? O tom řekneme později.zahrnuje také abstrakci a vytváření nových konceptů a notace. Naproti tomu formální korektnosti důkazů obecně nevyužívají vytváření nových konceptů ani se neúčastní procesu matematické abstrakce. Naproti tomu abstrakce v informatice (§6.1) je soustředěna do pojmů potřebných pro návrh programu. Jak ale tyto dva pojmy abstrakce souvisejí? O tom řekneme později.zahrnuje také abstrakci a vytváření nových konceptů a notace. Naproti tomu formální korektnosti důkazů obecně nevyužívají vytváření nových konceptů ani se neúčastní procesu matematické abstrakce. Naproti tomu abstrakce v informatice (§6.1) je soustředěna do pojmů potřebných pro návrh programu. Jak ale tyto dva pojmy abstrakce souvisejí? O tom řekneme později.

4.3 Fyzická a abstraktní korektnost

I když odložíme tyto epistemologické starosti, druhá a zdánlivě ničivější kritika správnosti dokazuje, co je ve skutečnosti prokázáno. Je zřejmé, že důkaz o správnosti poskytuje správnost pouze do textové reprezentace programu. Žádná část formální práce nás nemůže dostat za abstraktní / fyzickou bariéru: nikdy nemůžeme zaručit, že jakékoli konkrétní provedení programu na fyzickém stroji bude skutečně probíhat podle očekávání (Fetzer 1988; Fetzer 1999; Colburn 2004).

Co to ale znamená pro program p být správný? Předpokládejme, že máme specifikaci programu - a že to může být formální nebo neformální. Předpokládejme tedy, že provedeme řadu testovacích běhů, abychom ověřili, zda program splňuje jeho specifikaci. Pokud uspějí, máme empirické důkazy o tom, že fyzický protějšek textového programu je skutečně správný, protože funguje podle specifikace. Z tohoto pohledu byl testován fyzický protějšek; ne textový program.

Tato analýza naznačuje, že ve správnosti programů existuje dualita. V souladu s duální povahou programů můžeme říci, že textový program podléhá matematické korektnosti, zatímco jeho fyzický protějšek podléhá empirickému ověření.

5. Vyčíslitelnost

Vyčíslitelnost je jedno z nejstarších témat, které lze označit jako PCS. Je však předmětem několika položek SEP (např. Barker-Plummer 2004), proto zmíníme pouze několik témat a jejich souvislosti se zbytkem této položky.

5.1 Církevně-Turingova práce

Jedním z ústředních témat je Turingova teze. A tady jsou dva spory, jeden historický a jeden empirický. Zaměřují se na následující dvě možné interpretace práce:

  1. Turingovy stroje mohou dělat cokoli, co by se dalo označit jako „pravidlo palce“nebo „ryze mechanické“.
  2. Ať už je stroj schopen počítat cokoli (pracuje na konečných datech v souladu s konečným programem instrukcí), je Turingův stroj kompatibilní.

Interpretace I má za cíl zachytit pojem efektivní nebo mechanické metody v logice a matematice. Účelem je odrážet neformální představu o algoritmu implicitním v matematice a přivedeném do popředí Hilbertovým programem. Interpretace II je určena k řízení fyzických strojů. (Gandy 1980) lze skutečně považovat za další vybalení II. Gandy navrhuje čtyři principy, které mají charakterizovat výpočet fyzickým strojem. Ukazuje, že takové stroje přesně souhlasí s Turingovou charakterizací (Gandyho věta). V souvislosti s naší diskusí o různých sémantických paradigmatech je jasné, že mnoho strojů, které jsou základem denotační sémantiky (§ 3.1), se nekvalifikuje jako Gandyho stroje. Nejčastěji pracují s rozšířenými funkcemi vyšších řádů,a nelze je považovat za konečná data a nesplňují Gandyho podmínky.

Někteří tvrdí (Copeland 2004; Copeland 2008), že práce, jak ji navrhl Church and Turing, se týká pouze interpretace I a nestanovuje limit na stroje obecně. Hodges (2007) nesouhlasí. Tvrdí, že Church a Turing nerozlišovali mezi těmito dvěma interpretacemi. Toto je historický spor.

Fyzický spor se týká schopností skutečných strojů (interpretace II.) Mnozí považují za samozřejmé, že teze Church-Turing charakterizuje a předepisuje skutečné fyzické výpočty. Například se zdá, že se jedná o implicitní předpoklad v běžné počítačové informatice. Jistě je to tak, že každý program napsaný ve stávajícím implementovaném programovacím jazyce je Turing kompatibilní a naopak, že všechny programovací jazyky pro obecné použití jsou Turing kompletní, tj. Obsahují všechny řídicí konstrukty nezbytné pro simulaci univerzálního Turingova stroje.

Copeland (2007) tvrdí, že Gandyho charakterizace diskrétního deterministického mechanického zařízení je příliš úzká, a proto existují příklady možných fyzických strojů, jejichž schopnosti přesahují třídu Turingových vypočítatelných funkcí. Mnoho z nich vyžaduje nekonečné zrychlení, přičemž nekonečný počet výpočtů může být fyzicky proveden v konečném čase. Kvantový výpočetní systém byl citován jako možný příklad pro takové stroje, ale to bylo sporné (Hodges 2007; Hagar 2007).

Hodges se také zabývá aplikovatelností standardní matematické argumentace ve fyzice na případy, kdy se jedná o nekonečnou přesnost. To naznačuje, že tento spor není jednoduchý empirický. Opravdu existují lidé, kteří se ptají, zda je fyzicky možné dokončit nekonečný počet úkolů v konečném čase. Dummett (2006) se ptá, zda samotná představa nekonečného úkolu, který má být vykonán ve fyzické říši, není jen fyzickou nemožností, ale také koncepční. Spor tedy není jen empirický, ale jde do jádra našeho porozumění vztahu mezi našimi matematickými modely a fyzickou realitou.

6. Programování a programovací jazyky

Návrh programů a programovacích jazyků je jednou z tradičních činností informatiky. Obklopuje je řada koncepčních otázek (§1), z nichž mnohým nebyla věnována žádná filosofická pozornost. Zde stručně zhodnotíme dva z těchto problémů.

6.1 Abstrakce

Abstrakce je jedním z koncepčních pilířů informatiky. Je nedílnou součástí návrhu a konstrukce programu a tvoří základní metodiku pro navrhování programovacích jazyků. Ve skutečnosti řídí vytváření nových programovacích paradigmat. Je základem vynálezu pojmů, jako jsou procedurální a funkční abstrakce, polymorfismus, abstrakce dat, objekty a třídy, návrhové vzory, architektonické styly, subtypování a dědičnost. Mnoho oborů softwarového inženýrství (např. Softwarové modelování, porozumění programu, vizualizace programu, reverzní a re-inženýrství) se zabývá především zkoumáním vhodných mechanismů pro abstrakci programů. A hodně pokroku v softwarovém inženýrství bylo dosaženo díky zavedení nových abstrakčních mechanismů.

Jaká je však povaha abstrakce v informatice? Jaké je jeho základní filozofické vysvětlení? Bohužel obecně je samotná myšlenka abstrakce filozoficky problematická. Podle tradičního pohledu, který má svůj původ ve filosofické psychologii, je abstrakce mentálním procesem, ve kterém se vytvářejí nové koncepty zvažováním několika objektů nebo myšlenek a vynecháním prvků, které je odlišují. (Rosen 2001). Tento přístup však má jen málo, pokud vůbec nějaké, současných filozofických obhájců.

Logičtější přístup k analýze abstrakce, který má určitou silnou obhajobu (Wright 1983; Hale 1987). Není však jasné, zda se tyto myšlenky, které byly vyvinuty pro matematickou abstrakci, vztahují na informatiku. Je zřejmé, že některé z pojmů abstrakce v informatice byly buď inspirovány, nebo zkoumány pomocí abstrakcí v matematice. Jaký je však pojmový vztah mezi abstrakcí v těchto oborech? Jsou zásadně odlišné? Bohužel, zatímco existuje značná literatura o filozofických základech matematické abstrakce (viz Wright 1983; Hale 1987; Fine 2002), koncepční zkoumání abstrakce v informatice je teprve v plenkách. Colburn (2007) naznačuje, že rozdíl mezi abstrakcí v matematice a abstrakcí v informatice spočívá ve skutečnosti, že v matematice je abstrakce informací zanedbáváním, zatímco v informatice se skrývá informace. To znamená, že abstrakce v matematice ignorují to, co se považuje za irelevantní (např. Barva podobných trojúhelníků). Naproti tomu v informatice nesmí být žádné podrobnosti, které jsou ignorovány na jedné úrovni abstrakce (např. Java programátoři nemusí starat o přesné umístění v paměti spojené s konkrétní proměnnou), nesmí ignorovat jedna z nižších úrovní (např. Virtuální stroj zpracovává všechna přidělení paměti).abstrakce v matematice ignorují to, co se považuje za irelevantní (např. barva podobných trojúhelníků). Naproti tomu v informatice nesmí být žádné podrobnosti, které jsou ignorovány na jedné úrovni abstrakce (např. Java programátoři nemusí starat o přesné umístění v paměti spojené s konkrétní proměnnou), nesmí ignorovat jedna z nižších úrovní (např. Virtuální stroj zpracovává všechna přidělení paměti).abstrakce v matematice ignorují to, co se považuje za irelevantní (např. barva podobných trojúhelníků). Naproti tomu v informatice nesmí být žádné podrobnosti, které jsou ignorovány na jedné úrovni abstrakce (např. Java programátoři nemusí starat o přesné umístění v paměti spojené s konkrétní proměnnou), nesmí ignorovat jedna z nižších úrovní (např. Virtuální stroj zpracovává všechna přidělení paměti).

Je to však založeno na příliš zjednodušujícím pojetí abstrakce v matematice? Existuje jen jeden druh pojmu? Například informace skrývající se v Bishopově analýze (Bishop 1970) se docela liší od Wrightovy představy abstrakce - skutečně je docela podobná té počítačové vědy.

6.2 Typy a ontologie

Programovací jazyky jsou většinou psané jazyky, kde moderní pojem typu má svůj původ ve Frege a Russell a zejména v Russellově jednoduché teorii typů (Irvine 2003). Russell byl samozřejmě motivován logickými a sémantickými paradoxy a tato vlastnost není pro aplikaci typů na informatiku ústřední. Na druhé straně, pro typy Russell vyřezávají vesmír diskursu způsoby, které mají jak gramatický, tak sémantický význam. A tato myšlenka se přenesla do počítačové vědy. Teorie typu byly ve skutečnosti inspirovány a obohaceny počítačovou vědou. Například Russellova teorie typů, byť matematicky silná, je ve své expresivní síle poněkud ochuzena ve srovnání s teoriemi typů moderních počítačových jazyků (Coquand 2006; Pierce 2002). Programovací jazyky obsahují kromě řady základních typů, jako jsou čísla a Booleovci, také sbírku typových konstruktérů (způsoby vytváření nových typů ze starých). Patří sem například schopnost tvořit nějaký druh kartézského produktu a konečné sady. V mnoha objektově orientovaných programovacích jazycích mohou typy (třídy) importovat (a potlačovat) operace z jiných typů a nabízejí sofistikovanější konstruktéry, které podporují tvorbu abstraktních datových typů a různých forem polymorfismu.typy (třídy) mohou importovat (a potlačovat) operace z jiných typů a nabízejí sofistikovanější konstruktory, které podporují tvorbu abstraktních datových typů a různých forem polymorfismu.typy (třídy) mohou importovat (a potlačovat) operace z jiných typů a nabízejí sofistikovanější konstruktory, které podporují tvorbu abstraktních datových typů a různých forem polymorfismu.

V informatice hrají typy roli, která je na půli cesty mezi syntaxí a sémantikou. Za prvé, rozšiřují naši běžnou představu o gramatice bez kontextu. Některé jazykové vlastnosti, zejména ty, které umožňují fixaci typu proměnné kontextem (tj. Prohlášení jazyka), vyžadují formu gramatiky, která je flexibilnější než standardní. Takzvané dvouúrovňové gramatiky, i když jsou technicky přiměřené, nezachycují způsob, jakým jsou proměnné přiřazovány jejich typy v moderních jazycích. A jsou velmi nemotorní. Ani se snadno nepřizpůsobí polymorfním typovým systémům mnoha jazyků. Moderní typy systémů fungují lépe: proměnným se přiřazují jejich typy prostřednictvím deklarací, např. X: Boolean. Následně kompilátor může program zkontrolovat typ, např.může zajistit, že výskyt proměnné v následných příkazech (např. x

Typy však také hrají roli správnosti, která by za normálních okolností nebyla popsána syntakticky. Dělá to rozšířením tradičního fyzického pojmu dimenzionální analýzy na mnohem bohatší systém typů. Získání správné struktury typu pro program jde nějakým způsobem k zajištění jeho správnosti. A to je určeno strukturou, kterou typy ukládají jazyku. Typy opravují druhy věcí, které jsou v programovacím jazyce. Například jakýkoli programovací jazyk, který přiznává čísla, produkty a třídy a nic jiného, ukládá programátorovi koncepční rámec, v němž musí pracovat. Problémy musí být vyjádřeny a řešení nalezena v prostředcích reprezentace poskytovaných typovým systémem. Jakmile byla stanovena typová struktura programovacího jazyka, většina jeho ontologického nastavení byla opravena.

Nebo ano? Možná musíme ustoupit a nejprve se zeptat, jak budou určeny ontologické závazky jazyka. Je to sémantika, která určuje záležitosti (Turner & Eden 2007)? Navrhovala by to dlouhá tradice, která vychází z Frege (Dummett 1991). Za předpokladu, že analogie s přirozenými jazyky je legitimní, je ontologie jazyka určována strukturami potřebnými pro poskytnutí jeho sémantických domén. Ale jakou sémantickou teorii bychom měli přijmout? Jakákoli sémantika musí brát v úvahu typy, sémanticky určená ontologie by přesahovala jejich rozsah a odrážela zúčastněné sémantické domény, a to by odráželo detaily implementace, které jsou zahrnuty do sémantiky. Z tohoto důvodu, stejně jako u rovnosti, různé sémantické interpretace určují různé ontologie. Z toho vyplývá, že není rozumné mluvit o ontologii programovacího jazyka, ale o vícenásobných ontologiích, které závisí na úrovni abstrakce v sémantice. Například, ontologie může být také částečně určena programovacím paradigmatem.

7. Právní a etické otázky

Některé problémy v počítačové etice patří PCS v tom, že činnost při vytváření a používání softwaru vyvolává etické otázky. Mnoho z nich však není pro počítačovou vědu v úzkém smyslu této položky specifické; zasahují do celé informační technologie a počítačových aplikací (Bynum 2001). V důsledku toho zmíníme pouze dva, které se zdají být ústředním bodem počítačové vědy.

7.1 Autorská práva, patenty a totožnost

Autorská práva poskytují určitou ochranu softwaru, ale nemohou chránit své sémantické jádro. A my bereme na vědomí, že tento má být určen sémantickým účtem (§3) programovacího jazyka, ve kterém je program napsán. Podstata této otázky se pravděpodobně týká problému identity programu (§3.3). Ale pokud existuje mnoho možných sémantických pojmů identity, která z nich je vhodná pro legální použití?

Jeden neformální sémantický účet, který je často citován v zákoně, identifikuje program s myšlenkami v něm uvedenými, nejčastěji považovanými za jeho základní algoritmus. Nejenže je často těžké přesně říci, co je tento algoritmus, ale také, jako u matematických vět, nemohou být algoritmy chráněny autorskými právy. A téměř stejný osud očekává jakýkoli formální sémantický účet, protože jakýkoli takový by byl určen nějakou matematickou představou, ať už jde o algoritmy nebo nějakou představu o operaci nebo matematické funkci.

Ale i kdybychom mohli najít sémantický účet, který by vyhovoval zákonům o autorských právech, právní obraz by nebyl úplný. Porušení autorských práv často závisí nejen na nějakém účtu identity, ale také na tom, zda je pravděpodobné, že někdo přijde se stejným programem. Takže tyto úmyslné úvahy vstupují do rámce. Jinými slovy, i kdyby dva programy byly považovány za rovnocenné podle našeho sémantického kritéria, pokud by bylo možné považovat za věrohodné, že byly vytvořeny nezávisle, nedošlo by k porušení autorských práv.

Patenty (konkrétně patenty na užitečnost) nejsou o nic lepší. Ještě těžší je získat software, protože člověk nemůže patentovat mentální procesy, abstraktní myšlenky a algoritmy. Nové myšlenky často obsahují spíše algoritmy než zdrojový kód. Hlavním filozofickým zájmem je však opět otázka identifikace a identity. A to zahrnuje sémantické i úmyslné úvahy.

7.2 Správnost a odpovědnost

Je správné, že se software prodává s malou zárukou vhodnosti pro daný účel? (Coleman 2008) je věnována této otázce. Toto je zvláště důležitá otázka pro systémy kritické z hlediska bezpečnosti, např. Systémy, které monitorují zdravotní stav, provozují jaderné elektrárny a komunikují s raketoplány. Zde by se prosadilo přísnější testování a důkazy o správnosti. Ale z etického hlediska je případ programátora, který nedokáže analyzovat a otestovat svůj program, odlišný od programu stavebního inženýra, který neprovede požadované matematické modelování a testy na pozemní stavbě? Morální závazky se zdají podobné.

Jeden způsob, jak by se mohli lišit, se týká složitosti softwaru (Brooks 1987), která přesahuje složitost jakéhokoli jiného druhu lidského artefaktu o řádovou velikost. Mnozí by tvrdili, že není možné nabídnout jakoukoli takovou záruku správnosti (DeMillo et al. 1979); software je tak složitý, že proces přísného matematického testování a testování softwaru je nemožný. A pravděpodobně existuje pouze (morální nebo zákonná) povinnost provést proveditelný proces.

Jak ale lze vyvážit zkušební a testovací aspekty vývoje softwaru s zamýšleným použitím softwaru? Měl by software vyvinutý pro zábavu podléhat stejnému stupni přísného testování a testování jako software, který je kritický z hlediska bezpečnosti? Pravděpodobně ne, ale můžeme být stále v pokušení se zeptat, jsou tyto nové etické problémy, nebo nám jen poskytují další případové studie stávajících etických dilemat? Například i bezpečnostní závady v softwaru používaném v zábavním průmyslu mohou nést finanční pokuty.

8. Nové zvraty nebo nové problémy?

I tento poměrně stručný přehled PCSby měl přesvědčit čtenáře, že informatika vyvolává zajímavé a náročné filozofické problémy. Jedním z prvořadých dojmů je, že má podstatné vazby na většinu tradičních filozofických odvětví. Existují jasné souvislosti s ontologií, etikou, epistemologií a filozofiemi matematiky, fyziky a jazyka. Náš počáteční seznam otázek skutečně vyvolává mnoho dalších témat, která se týkají jiných oblastí filozofie. Zejména existuje značná literatura o aplikacích informatiky. Umělá inteligence a kognitivní věda přinášejí filozofické otázky, které patří do filozofie mysli (McLaughlin 2004). Většina z toho samozřejmě vychází z Turinga (1950). Další aplikace informatiky na tradiční oblasti vědy, tzv. Výpočetní věda,vytvářet problémy pro filozofii vědy: jaký je epistemologický dopad počítačových simulací, zejména tam, kde jsou jedinou realizovatelnou formou experimentování? Výpočtový obrat v ontologii přináší nové techniky, které mají vliv na strukturu jakéhokoli konceptuálního ontologie. Filozofie logiky je obohacena množstvím materiálu: vzniklo velké množství nových logických systémů pro účely reprezentace a uvažování o výpočetních systémech.za účelem reprezentace a zdůvodnění výpočtových systémů se objevilo velké množství nových logických systémů.za účelem reprezentace a zdůvodnění výpočtových systémů se objevilo velké množství nových logických systémů.

I když je jasné, že informatika vyvolává mnoho významných zvratů k tradičním filosofickým problémům, co je méně jasné, je to, zda generuje nějaké skutečně nové filosofické obavy: existují v PCS otázky, které nemají paralelu v žádné jiné filosofické oblasti?

Bibliografie

  • Allison, A., Currall, J., Moss, M. a Stuart, S., 2005, „záležitosti digitální identity“, Journal of American Society Information Science and Technology 56 (4): 364–372.
  • Arkoudas, K. a Bringsjord, S., 2007, „Počítače, odůvodnění a matematické znalosti“, Minds and Machines 17 (2): 185–202.
  • Barendregt, HP, 1993, „Lambda kalkulu s typy“, in: Handbook of logic in computer science, roč. 2, New York, NY: Oxford University Press Inc.
  • Barker-Plummer, D., 2008, „Turing Machines“, Stanfordská encyklopedie filozofie (vydání z podzimu 2008), Edward N. Zalta (ed.), URL = .
  • Bishop, Errett, 1977, Základy konstruktivní analýzy, McGraw-Hill.
  • Blass, Andreas a Gurevich, Yuri, 2003, „Algoritmy: Hledání absolutních definic“, Bulletin Evropské asociace pro teoretickou informatiku (EATCS) č. 81: 195-225.
  • Bowen, JP a Hinchey, MG, 1995, „Desatero přikázání formálních metod“, IEEE Computer 28 (4): 56–63.
  • Bowen, JP a Hinchey, MG, 2005, „Desatero přikázání formálních metod: deset let později“, 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ý přehled“, Stanfordská encyklopedie filozofie (vydání Winter 2001), Edward N. Zalta (ed.), URL =
  • Colburn, T., 2004, „Methodology of Computer Science“, Blackwell Průvodce po filozofii výpočetní techniky a informací, Luciano Floridi (ed.), Malden: Blackwell, s. 318–326.
  • Colburn, T. a Shute, G., 2007, „Abstrakce v informatice“, Minds and Machines 17 (2): 169–184.
  • Coleman, KG, 2008, „Výpočetní a morální odpovědnost“, Stanfordská encyklopedie filozofie (vydání z podzimu 2008), Edward N. Zalta (ed.), URL = .
  • Copeland, B. Jack, 2008, „The Church-Turing Thesis“, Stanfordská encyklopedie filozofie (vydání z podzimu 2008), Edward N. Zalta (ed.), URL = .
  • Copeland, B. Jack, 2004, „Výpočet“, Blackwell Průvodce po filozofii výpočetní techniky a informací, Luciano Floridi (ed.), Malden: Blackwell, s. 3–17.
  • Coquand, Thierry, 2006, „Teorie typů“, Stanfordská encyklopedie filozofie (vydání Winter 2006), Edward N. Zalta (ed.), URL = .
  • DeMillo, RA, Lipton, RJ a Perlis, AJ, 1979, „Sociální procesy a důkazy teorémů a programů“, Komunikace ACM 22 (5): 271–280.
  • Denning, PJ, 1980, „O lidových větách a lidových mýtech“, Komunikace ACM 23 (9): 493–494.
  • Denning, PJ, 1980b, „Co je experimentální informatika?“Komunikace ACM 23 (10): 534–544.
  • Denning, PJ, 1981, „Analýza výkonu: Experimentální informatika jako nejlepší“, Komunikace ACM 24 (11): 725–727.
  • Denning, PJ, 1985, „The Science of Computing: Co je to informatika?“American Scientist 73 (1): 16–19.
  • Denning, PJ (ed.), Et al., 1989, „Computing as a Discipline“, Komunikace ACM 32 (1): 9–23.
  • Dijkstra, E., 1968. „Jdi na prohlášení považováno za škodlivé“, Komunikace ACM 11 (3): 147–148.
  • Dummett, M., 1991, „Logická základna metafyziky“, Harvard University Press.
  • Dummett, M., 2006, „Myšlení a realita“, Oxford University Press.
  • Eden, Amnon, 2007, „Tři paradigmy v informatice“, Minds and Machines 17 (2): 135–167.
  • Feferman, S., 1992, „Logika pro ukončení a správnost funkčních programů“, Logic for Computer Science: 95–127, MSRI Pubs. sv. 21, New York, NY: Springer-Verlag.
  • Fetzer, JH, 1988, „Ověření programu: samotný nápad“, komunikace ACM 31 (9): 1048–1063.
  • Fetzer, JH, 1999, „Role modelů v informatice“, Monist 82 (1): 20–36.
  • Fine, K., 2008, „Meze abstrakce“. Oxford: Oxford University Press.
  • Floridi, Luciano, 2004. „Informace“, Průvodce Blackwellovou filozofií výpočetní techniky a informací, Luciano Floridi (ed.), Malden: Blackwell, s. 40–62.
  • Floridi, Luciano 2007, „Sémantické pojetí informací“, Stanfordská encyklopedie filozofie (vydání jaro 2007), Edward N. Zalta (ed.), URL = .
  • Forrest, P., 2006, „The Identity of Indiscernibles“, Stanfordská encyklopedie filozofie (vydání z podzimu 2008), Edward N. Zalta (ed.), Nadcházející URL =. >.
  • Fuchs, NE, 1992, „Specifikace jsou (nejlépe) spustitelné“. Software Engineering Journal 7 (5): 323–334.
  • Gandy, R., 1980, „Církevní teze a principy mechanismů“, Kleeneovo sympozium, Barwise, J., Keisler, HJ a Kunen, K. (ed.), Amsterdam: Severní Holandsko.
  • Hagar, Amit, 2007, „Quantum Algorithms: Philosophical Lessons“, Minds and Machines 17 (2): 233–247.
  • Hale, B. and Wright, C., 2001, „Správná studie o důvodech: Eseje k neo-fregejské filozofii matematiky“, Oxfordská stipendia na lince, Oxford: Oxford University Press.
  • Hartmanis, J., 1993, „Některá pozorování o povaze informatiky“, Přednášky z informatiky 761, Shyamasundar, RK (ed.): 1-12.
  • Hartmanis, J., 1994, „Přednáška Turingovy ceny: Výpočtová složitost a povaha informatiky“, Komunikace ACM 37 (10): 37–43.
  • Hoare, CAR, 1969, „Axiomatický základ pro počítačové programování“. Komunikace ACM 12 (10): 576–585. [Opakovaný tisk k dispozici online]
  • Hodges, A., 2006, „Měli Church and Turing práci o strojích?“, Církevní práce po 70 letech Olszewski, Adam (ed.)
  • Hodges, A., 2007, „Dokáže kvantové výpočty řešit klasicky neřešitelné problémy?“
  • Horsten, L., 2008, „Filozofie matematiky“, Stanfordská encyklopedie filozofie (vydání z podzimu 2008), Edward N. Zalta (ed.), URL = .
  • Immerman, N., 2006, „Vyčíslitelnost a složitost“, Stanfordská encyklopedie filozofie (podzim 2006), Edward N. Zalta (ed.), URL = .
  • Irvine, AD, 2003, „Russellův paradox“, Stanfordská encyklopedie filozofie (podzim 2006 vydání), Edward N. Zalta (ed.), URL =
  • Jones, CB a Hayes, IJ, 1990, „Specifikace nejsou (nutně) škodlivé“, Software Engineering Journal 4 (6): 330–339.
  • Krishnamurthi, S., 2003. Programovací jazyky: Aplikace a interpretace,
  • Kreisel, G., Gandy, RO, 1975, „Některé důvody pro zobecnění teorie rekurze.“The Journal of Symbolic Logic 40 (2): 230–232.
  • Kripke, S., 1982, Wittgenstein o pravidlech a soukromém jazyce. Harvard University Press.
  • Kuhn, TS, 1970, Struktura vědeckých revolucí, 2.. ed., Chicago: Univ. of Chicago Press.
  • Landin, PJ, 1964, „Mechanické vyhodnocení výrazů“, 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, Connectionism, and Philosophy of Mind“, Blackwell Průvodce po filozofii výpočetní techniky a informací, Floridi, Luciano (ed.) Malden: Blackwell, p. 135–152.
  • Minsky, M., 1970, „ACM Turingova přednáška: Forma a obsah v informatice“, časopis Asociace pro výpočetní techniku 17 (2): 197–215.
  • Moor, JH, 1978, „Tři mýty informatiky“, Britský časopis pro filozofii vědy 29 (3): 213–222.
  • Moschovakis, YN, 1998, „O založení teorie algoritmů“, Pravda v matematice Dales, Harold G. a Oliveri, Gianluigi (ed.), Oxford: Oxford University Press.
  • Pierce, Benjamin C., 2002, Druhy a programovací jazyky, Cambridge, MA: MIT Press.
  • Plotkin, GD, 1981, „Strukturální přístup k operační sémantice“, Tech. Rep. DAIMI FN-19, Katedra informatiky, Aarhus University, Aarhus, Dánsko.
  • Rapaport, WJ, 2005a, „Filozofie informatiky: úvodní kurz“, výuka filozofie 28 (4): 319–341.
  • Rapaport, WJ, 2005b, „Implementace je sémantická interpretace: další myšlenky.“Žurnál experimentální a teoretické umělé inteligence 17 (4): 385–417.
  • Rosen, Gideon, 2001. „Abstraktní objekty“, Stanfordská encyklopedie filozofie (podzim 2001 vydání), Edward N. Zalta (ed.), URL = .
  • Shapiro, S., 1997, Filozofie matematiky: Struktura a ontologie, Oxford: Oxford University Press.
  • Sieg, Wilfried, 2008, „Církev bez dogmat: Axiomy pro počítatelnost“, Nové počítačové paradigmy, Lowe, B., Sorbi, A. a Cooper, B. (ed.), 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, „Compositionality“, Stanfordská encyklopedie filozofie (jaro 2007), Edward N. Zalta (ed.), URL = .
  • Thomason, R., 2005, „Logická a umělá inteligence“, Stanfordská encyklopedie filozofie (vydání léta 2005), Edward N. Zalta (ed.), URL = .
  • Turner, Raymond a Eden, Amnon H., 2007, „Směrem k programovací jazykové ontologii“, výpočet, informace, poznávání - Nexus a liminal, Dodig-Crnkovic, Gordana a Stuart, Susan (ed.), Cambridge, Velká Británie: Cambridge Scholars Press, str. 147–159.
  • Turner, Raymond, 2005, „The Foundations of Specification“, Journal of Logic Computation 15: 623–662.
  • Turner, Raymond, 2007, „Porozumění programovacím jazykům“. Minds and Machines 17 (2): 129-133
  • Tymoczko, T., 1979, „Čtyřbarevný problém a jeho filozofický význam“, Journal of Philosophy 76 (2): 57–83.
  • White, G., 2004, „Filozofie počítačových jazyků“, Blackwell Průvodce po filozofii počítačů a informací, Floridi, Luciano (ed.), Malden: Blackwell, s. 318–326.
  • Wing, JM, 2006, „Computational Thinking“, Komunikace ACM, 49 (3): 33–35.
  • Wittgenstein, L., 1953. Filozofické vyšetřování. Blackwell Publishing.
  • Wright, Crispin, 1983, Fregeova koncepce čísel jako objektů, Aberdeen University Press.

Další internetové zdroje

  • Filozofie informatiky na Essex University
  • Mezinárodní asociace pro práci na počítači a filozofii

Doporučená: