Filosofien For Datalogi

Indholdsfortegnelse:

Filosofien For Datalogi
Filosofien For Datalogi

Video: Filosofien For Datalogi

Video: Filosofien For Datalogi
Video: Master i Datadrevet Organisationsudvikling, Aalborg Universitet 2024, Marts
Anonim

Dette er en fil i arkiverne fra Stanford Encyclopedia of Philosophy. Forfatter & citatinfo | Venner PDF-forhåndsvisning | InPho-søgning | PhilPapers bibliografi

Filosofien for datalogi

Først offentliggjort fredag 12. december 2008

Filosofien for datalogi (PCS)) er optaget af filosofiske spørgsmål, der stammer fra reflektion over arten og praksis af den akademiske disciplin inden for datalogi. Men hvad er sidstnævnte? Det er bestemt ikke kun programmering. Når alt kommer til alt er mange mennesker, der skriver programmer, ikke datalogi. F.eks. Gør fysikere, revisorer og kemikere. Faktisk ville datalogi bedre beskrives som værende beskæftiget med meta-aktiviteten, der er forbundet med programmering. Mere generelt og mere præcist beskæftiger det sig med design, udvikling og undersøgelse af koncepter og metoder, der letter og hjælper med specifikation, udvikling, implementering og analyse af beregningssystemer. Eksempler på denne aktivitet kan omfatte design og analyse af programmerings-, specifikations- og arkitektoniske beskrivelsessprog;konstruktion og optimering af kompilatorer, tolke, teorem provers og type inferenssystemer; opfindelsen af logiske rammer og design af indlejrede systemer og meget mere. Mange af de centrale filosofiske spørgsmål inden for datalogi omgiver og understøtter disse aktiviteter, og mange af dem er koncentreret om de logiske, ontologiske og epistemologiske spørgsmål, der vedrører den. I sidste ende er datalogi, hvad datalogi gør, og ingen nøjagtig formel definition kan fungere som mere end en guide til den diskussion, der følger. Det er faktisk håbetMange af de centrale filosofiske spørgsmål inden for datalogi omgiver og understøtter disse aktiviteter, og mange af dem er koncentreret om de logiske, ontologiske og epistemologiske spørgsmål, der vedrører den. I sidste ende er datalogi, hvad datalogi gør, og ingen nøjagtig formel definition kan fungere som mere end en guide til den diskussion, der følger. Det er faktisk håbetMange af de centrale filosofiske spørgsmål inden for datalogi omgiver og understøtter disse aktiviteter, og mange af dem er koncentreret om de logiske, ontologiske og epistemologiske spørgsmål, der vedrører den. I sidste ende er datalogi, hvad datalogi gør, og ingen nøjagtig formel definition kan fungere som mere end en guide til den diskussion, der følger. Det er faktisk håbet PCS vil til sidst bidrage til en dybere forståelse af arten af datalogi.

Men at kortlægge det filosofiske landskab inden for datalogi er ingen let opgave. Heldigvis kan traditionelle filialfilialer give intellektuel og strukturel vejledning. For eksempel i filosofierne om matematik og fysik er der centrale spørgsmål vedrørende arten af de behandlede genstande, hvad der udgør viden og midlerne til at opnå denne viden. Sprogfilosofien rejser spørgsmål om indholdet og formen af en semantisk teori for naturligt sprog. Det bringer de underliggende ontologiske og epistemologiske antagelser fra den semantiske virksomhed op på forgrunden. Ontologi angiver, hvilke slags ting der er, hvordan man individualiserer dem og deres rolle i udformningen af vores konceptuelle ordninger. Logikfilosofien giver en redegørelse for og analyse af forskellige slags logiske systemer og deres rolle i hverdagen og specialiseret diskurs. Analogier og ligheder fra disse og andre filosofiske grene skulle vise sig at være nyttige til at identificere og tydeliggøre nogle af de centrale filosofiske bekymringer inden for datalogi. Disse disciplines nuværende indflydelse på PCS vil dukke op, når vi fortsætter. Især afspejler den anden, tredje og fjerde sektion virkningen af ontologi og sprogfilosofier og matematik.

  • 1. Nogle centrale problemer
  • 2. Eksistens og identitet

    • 2.1 Programmernes dobbelte karakter
    • 2.2 Programmer og algoritmer
    • 2.3 Programmer og specifikationer
  • 3. Semantik

    • 3.1 Denotational og operationel semantik
    • 3.2 Implementering og semantisk fortolkning
    • 3.3 Semantik, lighed og identitet
  • 4. Beviser og programmer

    • 4.1 Bevis i datalogi
    • 4.2 Bevis i matematik
    • 4.3 Fysisk og abstrakt korrekthed
  • 5. Beregnelighed

    5.1 Den kirke-turing afhandling

  • 6. Programmering og programmeringssprog

    • 6.1 Abstraktion
    • 6.2 Typer og Ontologi
  • 7. Juridiske og etiske spørgsmål

    • 7.1 Ophavsret, patenter og identitet
    • 7.2 Korrekthed og ansvar
  • 8. Nye vendinger eller nye problemer?
  • Bibliografi
  • Andre internetressourcer
  • Relaterede poster

1. Nogle centrale problemer

Til at begynde med opregner vi, hvad vi tager for at være nogle af de centrale spørgsmål og spørgsmål. Dette giver læseren en hurtig oversigt over sager, der supplerer den mere detaljerede diskussion, der kommer. Selvom mange af dem ikke er blevet direkte behandlet i litteraturen og har brug for en vis afklaring, illustrerer disse spørgsmål, hvilke slags problemer vi tager PCS til at være opmærksomme på.

  1. Hvilke slags ting er programmer? Er de abstrakte eller konkrete? (Moor 1978; Colburn 2004)
  2. Hvad er forskellene mellem programmer og algoritmer? (Rapaport 2005a)
  3. Hvad er en specifikation? Og hvad er der specificeret? (Smith 1985; Turner 2005)
  4. Er specifikationer grundlæggende forskellige fra programmer? (Smith 1985)
  5. Hvad er en implementering? (Rapaport 2005b)
  6. Hvad adskiller hardware fra software? Eksisterer programmer i både fysiske og symbolske former? (Moor 1978; Colburn 2004)
  7. Hvilke slags ting er digitale objekter? Har vi brug for en ny ontologisk kategori for at huse dem? (Allison et al. 2005)
  8. Hvad er målene for de forskellige semantiske teorier om programmeringssprog? (White 2004; Turner 2007)
  9. Hvordan relateres spørgsmål i filosofien om programmeringssprog til parallelle spørgsmål i sprogfilosofien? (Hvid 2004)
  10. Forholder princippet om modularitet (f.eks. Dijkstra 1968) de begrebsmæssige spørgsmål om fuld abstraktion og kompositionalitet?
  11. Hvad er de underliggende begrebsmæssige forskelle mellem følgende programmeringsparadigmer: struktureret, funktionel, logisk og objektorienteret programmering?
  12. Hvilke roller har typer inden for datalogi? (Barandregt 1992; Pierce 2002)
  13. Hvad er forskellen mellem operationel og denotational semantik? (Turner 2007)
  14. Hvad betyder det for et program at være korrekt? Hvad er den epistemologiske status for korrekthedsbeviser? Er de grundlæggende forskellige fra bevis i matematik? (DeMillo et al. 1979; Smith 1985)
  15. Hvad fastlægger korrektionsbeviser? (Fetzer 1988; Fetzer 1999; Colburn 2004)
  16. Hvad er abstraktion inden for datalogi? Hvordan er det relateret til abstraktion i matematik? (Colburn & Shute 2007; Fine 2008; Hale & Wright 2001)
  17. Hvad er formelle metoder? Hvad er formelt ved formelle metoder? Hvad er forskellen mellem en formel og uformel metode? (Bowen & Hinchey 2005; Bowen & Hinchey 1995)
  18. Hvilken type disciplin er datalogi? Hvilke roller har matematisk modellering og eksperimentering? (Minsky 1970; Denning 1980; Denning 1981; Denning et al. 1989; Denning 1985; Denning 1980b; Hartmanis 1994; Hartmanis1993; Hartmanis 1981; Colburn 2004; Eden 2007)
  19. Bør programmer betragtes som videnskabelige teorier? (Rapaport 2005a)
  20. Hvordan bruges matematik i datalogi? Bruges matematiske modeller på en beskrivende eller normativ måde? (White 2004; Turner 2007)
  21. Fanger Church-Turing-afhandlingen den matematiske opfattelse af en effektiv eller mekanisk metode inden for logik og matematik? Fanger det de beregninger, der kan udføres af et menneske? Gælder dens anvendelsesområde for fysiske maskiner? (Copeland 2004; Copeland 2007; Hodges 2006)
  22. Kan begrebet computertankegang modstå filosofisk kontrol? (Wing 2006)
  23. Hvad er den passende logik til at resonnere om programmets korrekthed og afslutning? (Hoare 1969; Feferman 1992) Hvordan er logikken afhængig af det underliggende programmeringssprog?
  24. Hvad er information? (Floridi 2004; Floridi 2005) Kaster denne opfattelse lys over nogle af de spørgsmål, der er anført her?
  25. Hvorfor er der så mange programmeringssprog og programmeringsparadigmer? (Krishnamurthi 2003)
  26. Har programmeringssprog (og paradigmer) karakter af videnskabelige teorier? Hvad forårsager et programmeringsparadigmeskift? (Kuhn 1970)
  27. Er softwareteknologien opmærksom på filosofiske problemer? (Eden 2007)

I det følgende skal vi sætte noget kød på et par af disse spørgsmål.

2. Eksistens og identitet

Hvordan kategoriserer og individualiserer vi videnskabernes enheder og begreber? Hvilke ting er de, og hvad bestemmer deres identitet? For eksempel er nogle tydeligt konkrete fysiske objekter (f.eks. Chips, routere, laptops, grafikkort), og andre er ikke (f.eks. Formelle grammatik, abstrakte maskiner, teorem provers, logiske rammer, proces algebras, abstrakte datatyper). Men karakteriseringen af nogle af de centrale begreber som programmer og data har været mere problematisk. Specielt har programmernes ontologiske status ikke taget hensyn til at være helt ligetil, og heller ikke spørgsmålet om deres kriterier for identitet.

2.1 Programmernes dobbelte karakter

Mange forfattere (Moor 1978; Rapaport 2005b; Colburn 2004) diskuterer den såkaldte dual-karakter af programmer. På baggrund af det ser det ud til, at et program har både en tekstlig og en mekanisk eller proceslignende forklædning. Som tekst kan et program redigeres. Men dens manifestation på en maskinlæsbar disk ser ud til at have ganske forskellige egenskaber. Især kan det udføres på en fysisk maskine. Så i henhold til princippet om identiske uskilelighed (§3.3), kan de to dække ikke være den samme enhed. Naturligvis er enhver, der overtales af denne dualitet, forpligtet til at sige noget om forholdet mellem disse to tilsyneladende eksistensformer.

Et øjeblikkeligt forslag er, at den ene manifestation af et program er en implementering af den anden, dvs. at den fysiske manifestation er en implementering af det tekstuelle. Selv inden for computervidenskabens rammer er det imidlertid ikke umiddelbart klart, at ordimplementeringen kun refererer til en forestilling. Ofte bruges det til at henvise til resultatet af en kompilationsproces, hvor et program på et højt niveau sprog (kildekoden) omdannes til maskinsprog (objektkoden). Men lige så ofte bruges det til at henvise til processen, hvor kildekoden på en eller anden måde direkte realiseres i hardware (f.eks. En konkret implementering i halvledere). Og antagelig er dette den relevante opfattelse. Men uden en mere detaljeret filosofisk analyse af selve forestillingen om implementering (§3.2) (Rapaport 2005b),det er uklart, hvordan dette fremmer diskussionen; vi ser ud til kun at have navngivet forholdet mellem de to tilsyneladende eksistensformer. På lignende måde har andre beskrevet forholdet mellem programteksten og programprocessen som at det svarer til det mellem en plan og dens manifestation som en række fysiske handlinger. Men dette ser ikke ud til at være helt analogt med program-processparringen: Vi er ikke fristet til at referere til planen og den fysiske proces som værende forskellige manifestationer af den samme ting. Er vi for eksempel fristet til at tænke på en plan for at gå en tur og den faktiske gåtur som forskellige facetter af den samme ting?andre har beskrevet forholdet mellem programteksten og programprocessen som at ligner den mellem en plan og dens manifestation som en række fysiske handlinger. Men dette ser ikke ud til at være helt analogt med program-processparringen: Vi er ikke fristet til at referere til planen og den fysiske proces som værende forskellige manifestationer af den samme ting. Er vi for eksempel fristet til at tænke på en plan for at gå en tur og den faktiske gåtur som forskellige facetter af den samme ting?andre har beskrevet forholdet mellem programteksten og programprocessen som at ligner den mellem en plan og dens manifestation som en række fysiske handlinger. Men dette ser ikke ud til at være helt analogt med program-processparringen: Vi er ikke fristet til at referere til planen og den fysiske proces som værende forskellige manifestationer af den samme ting. Er vi for eksempel fristet til at tænke på en plan for at gå en tur og den faktiske gåtur som forskellige facetter af den samme ting?er vi fristet til at tænke på en plan for at gå en tur og den faktiske gåtur som forskellige facetter af den samme ting?er vi fristet til at tænke på en plan for at gå en tur og den faktiske gåtur som forskellige facetter af den samme ting?

Måske beskrives forhold bedst ved at sige, at programmer som tekstobjekter forårsager mekaniske processer? Ideen ser ud til at være, at den tekstlige genstand på en eller anden måde fysisk forårsager den mekaniske proces. Men dette ser ud til at kræve nogen ret nøje analyse af arten af en sådan årsagssammenhæng. Colburn (2004) benægter, at den symbolske tekst har kausal virkning; det er dens fysiske manifestation (den på disken), der har en sådan effekt. Software er en konkret abstraktion, der har et beskrivelsesmedium (teksten, abstraktionen) og et eksekveringsmedium (f.eks. En konkret implementering i halvledere).

Et lidt andet perspektiv på disse spørgsmål starter fra spørgsmålet om programidentitet. Hvornår tager to programmer det samme? Sådanne problemer opstår for eksempel i forsøg på at bestemme den juridiske identitet af et stykke software. Hvis vi identificerer et program med dets tekstmæssige manifestation, er et programs identitet følsom over for ændringer i dets udseende (f.eks. Ændring af skrifttypen). Det er åbenbart, at det ikke er teksten alene, der giver os nogen filosofisk interessant forestilling om programidentitet. I stedet for at nå et informeret kriterium om identitet er vi nødt til at tage mere hensyn til semantik og implementering. Vi vender tilbage til dette emne i §3 og §6.

2.2 Programmer og algoritmer

Uanset hvilket synspunkt vi tager på programmer, er algoritme-program sondringen også behov for yderligere konceptuel afklaring. Algoritmer anses ofte for at være matematiske objekter. Hvis dette er sandt, hører mange af de filosofiske spørgsmål, der vedrører dem, også til matematikfilosofien. Imidlertid er algoritmer uden tvivl mere centrale for datalogi end matematik og fortjener mere filosofisk opmærksomhed, end de er blevet givet. Selvom der har været nogen betydelig matematisk undersøgelse af algoritmer i teoretisk computervidenskab og matematisk logik (f.eks. Moschovakis 1997; Blass & Gurevich 2003), har der ikke været en hel del filosofisk diskussion, der er centreret om algoritmernes art og forskellene mellem algoritmer og programmer.

Er det således, at algoritmer er abstrakte objekter i den forstand, som Rosen (2001) tilbyder, mens programmer er konkrete? Mere præcist er algoritmer det abstrakte matematiske modstykke til et tekstobjekt, der er programmet? Dette billede egner sig naturligt til en form for ontologisk platonisme (Shapiro 1997), hvor algoritmer har ontologisk prioritering, og programmer leverer de sproglige midler til at komme til dem. I dette synspunkt kan algoritmer bruges til at give semantik (§3) i programmeringssprog. Dette billede arver naturligvis alle fordele og problemer med et sådant platonisk perspektiv (Shapiro 1997).

Et mindre platonisk synspunkt har det, at algoritmer indeholder de ideer, der er udtrykt i et program. I lov er dette blevet anset for at være årsagen til, at algoritmer, i modsætning til programmer, ikke kan ophavsretligt (§7.1). Naturligvis kræver udtrykket idé yderligere filosofisk analyse. Faktisk kunne det argumenteres, at den blotte opfattelse af algoritme i langt mindre behov for afklaring er end standardkontoen for ideer og dens tilknyttede forestillinger om abstraktion (Rosen 2001).

Endelig er det næsten et folklore syn, at Turing-maskiner giver os en formel analyse af vores forestilling om algoritme. Men passer dette med den nutidige opfattelse, der anvendes i moderne datalogi med dens sofistikerede forestillinger om repræsentation og kontrol? Moschovakis (1997) tilbyder en analyse, der gør noget bedre.

2.3 Programmer og specifikationer

En anden populær sondring, der burde være genstand for en vis kritisk analyse, forekommer med hensyn til programmer og specifikationer. Hvad er specifikationer, og hvordan adskiller de sig fra programmer? Selvom der kun er lidt direkte diskussion af dette spørgsmål i den filosofiske litteratur (men se Smith 1985), er specifikationernes karakter et grundlæggende spørgsmål for datateknologiens konceptuelle fundament.

Et synspunkt, der ofte findes i lærebøger om formel specifikation, er, at programmer indeholder detaljerede maskineinstruktioner, hvorimod (funktionelle) specifikationer kun beskriver forholdet mellem input og output. En åbenlys måde at pakke dette ud på er den tvingende / beskrivende sondring: programmer er bydende nødvendige og beskriver, hvordan man kan nå det mål, der er beskrevet i specifikationen. I det tvingende programmeringsparadigme ser det bestemt ud til at fange en væsentlig forskel. Men det er ikke passende for alle. For eksempel styres logiske, funktionelle og objektorienterede programmeringssprog åbenbart ikke af det: taget til pålydende værdi, programmer kodet på sådanne sprog består af sekvenser af definitioner, ikke 'instruktioner'. Desuden,ikke-funktionelle specifikationer kan ikke formuleres som udsagn om forholdet mellem input og output, fordi de stiller krav til designet og til den type instruktioner, der kan være inkluderet i ethvert program.

En anden opfattelse insisterer på, at forskellen mellem specifikationer og programmer skal lokaliseres med hensyn til forestillingen om implementering, dvs. kan den udarbejdes og udføres? Men hvad menes der med det? Menes det i betydningen at have en eksisterende compiler? Denne fortolkning er temmelig lavvandet, fordi den ikke tilbyder et begrebsmæssigt kriterium om sondring, men et kontingent. I de første fem generationer af programmeringssprog (2. halvdel af det 20. århundrede) er for eksempel rekursive, modulære, funktionelle og objektorienterede specifikationer fra en generation blevet formuleret som programmer i den næste, dvs. dagens specifikationssprog bliver ofte morgendagens programmeringssprog.

En anden opfattelse antyder, at programmeringssprog er de sprog, der i princippet har en implementering, mens specifikationssprog er dem, der ikke kan. Og formodentlig er grunden til, at de ikke kan være, at specifikationssprog tillader en at udtrykke forestillinger, der ikke er Turing-computbar. Denne sondring er i overensstemmelse med mange eksisterende specifikationssprog, der er baseret på Zermelo-Fraenkel sætteori og højereordens logik. Det virker dog underligt, at det, der skal kendetegne et specifikationssprog, er det faktum, at det kan udtrykke ikke-beregnelige egenskaber og relationer. Er nogle af disse ikke-beregningsmæssige krav virkelig nødvendige i praksis (Jones & Hayes 1990; Fuchs 1994)?

Mangfoldigheden af disse synspunkter antyder, at det traditionelle, binære skel mellem specifikationer og programmer er et eksempel på et problem i PCS, som fortjener mere opmærksomhed, ikke kun for konceptuel afklaring, men også fordi det kan have konsekvenser for designet til fremtidig programmering og specifikationssprog.

3. Semantik

Grammatikken i et programmeringssprog bestemmer kun, hvad der er syntaktisk legitim; det informerer os ikke om den tilsigtede betydning af dens konstruktioner. Grammatikken i et programmeringssprog bestemmer således ikke i sig selv den ting, som folk programmerer i. I stedet er det grammatikken, der er beriget med en semantisk konto (formel eller uformel), der tages for at gøre det. Semantikken er beregnet til at informere programmøren, kompilatorforfatteren og teoretikeren, der er interesseret i at udforske sprogets egenskaber. Faktisk hævdes det ofte, at for at imødekomme de forskellige krav, som programmereren og compiler-forfatteren har, kræves forskellige semantiske konti på forskellige abstraktionsniveauer. Og teoretikernes opgave er at udforske deres forhold.

Dette er standardbilledet, der fremkommer i den semantiske litteratur. Men meget af dette har brug for konceptuel afklaring. I dette afsnit overvejer vi kun nogle få af de problemer, der opstår ved denne aktivitet.

3.1 Denotational og operationel semantik

En af de vigtigste sondringer i programmeringssprogens semantik bygger på sondringen mellem operationel og denotational semantik. En operationel semantik (Landin 1964; Plotkin 1981) giver en fortolkning af et programmeringssprog i form af en eller anden abstrakt maskine. Mere præcist er det en oversættelse af udtryk i programmeringssprog til instruktionerne eller programmerne på den abstrakte maskine. For eksempel vil program 1 pakkes ud i en række af abstrakte maskindrift som "a ← 0" og push. Operativ semantik kan også opfattes som algoritmisk semantik, især når den underliggende maskine er rettet mod at karakterisere selve begrebet algoritme (f.eks. Moschovakis 1997).

I modsætning hertil giver en denotational semantik (Milne & Strachey 1977) en fortolkning i matematiske strukturer såsom sæt eller kategorier. I den klassiske tilgang tilvejebringer sæt i form af komplette gitter og kontinuerlige funktioner på dem den matematiske ramme.

Men er der nogen betydelig begrebsmæssig forskel mellem dem? Er det sådan, at denotational semantik, der eksplicit er baseret på matematiske strukturer såsom sæt, er matematisk, mens operationel semantik ikke er? Turner (2007) argumenterer ikke: de leverer alle matematiske fortolkninger.

Eller er det, at operationel semantik er mere maskinlignende i den forstand, at den udgør en abstrakt maskine, hvorimod der med denotational semantik, der er givet i sætteoretiske termer, ikke er noget antydning til en abstrakt maskine? Sådanne sondringer har imidlertid ikke vist sig begrebsmæssigt betydningsfulde, fordi denotational semantisk-konti alle kan ses som strukturer, der udgør en abstrakt maskine med tilstande og operationer, der opererer på dem. Driftsregnskaber er heller ikke tættere på implementering: denotational tilgange (Milne & Strachey 1977) er også meget fleksible og er i stand til at afspejle forskellige niveauer af implementeringsdetaljer.

En anden mulig skelnen vedrører semantikens sammensætning (eller på anden måde). Løst sagt betragtes en semantik for at være sammensat (Szabó 2007), hvis den semantiske værdi af et komplekst udtryk er en funktion af de semantiske værdier for dens dele. Kompositionalitet betragtes som et afgørende kriterium for semantik, da det synes at være nødvendigt for at forklare produktiviteten af vores sproglige forståelse: det siges at forklare, hvordan vi forstår og konstruerer komplekse programmer. Men giver det os en kil til at adskille operationel og denotational semantik? Desværre ser det ikke ud til at gøre det: selvom denotationsdefinitioner er designet til at være sammensat, er det bestemt ikke tilfældet, at al operationel semantik ikke er sammensat.

Endelig adskiller nogle versioner af semantik sig om eksistensen af en rekursiv model, dvs. en fortolkning i Turing-maskiner eller Gandy-maskiner (§5.1). Selv dette stemmer ikke nøjagtigt med det traditionelle operationelle / denotationsmæssige kløft. Nogle denotationsdefinitioner har en rekursiv model, og andre gør det ikke.

Det forekommer meget svært at fastlægge denne sondring. I lyset af det ser der ikke ud til nogen skarp begrebsmæssig sondring mellem operationel og denotational semantik.

3.2 Implementering og semantisk fortolkning

Hvad er forskellen mellem en semantisk fortolkning og en implementering? For eksempel, hvad er den begrebsmæssige forskel mellem at komponere et program til maskinkode og give det en denotational semantik? I følge Rapaport (2005b) ses en implementering bedst som semantisk fortolkning, hvor sidstnævnte er karakteriseret ved en kortlægning mellem to domæner: et syntaktisk og en semantisk. Og begge disse bestemmes af regler i en beskrivelse. For eksempel er den kompilerede kode (i kombination med reglerne for dens semantik) den semantiske konto for kildekoden.

I en fælles forståelse af udtrykket 'implementering' leveres det semantiske domæne af en fysisk maskine. Med andre ord bestemmer den fysiske maskine selv ('implementeringen'), hvad programmet betyder. For eksempel svarer dette i programmeringssprog til påstanden om, at semantikken for C ++ programmeringssprog bestemmes af Bjarnes computer, der kører hans C ++ compiler. Men denne forklaring er åbenlyst utilstrækkelig: Hvis vi antager, at Bjarnes maskine bestemmer betydningen af C ++ -programmer, er der ingen opfattelse af funktionsfejl eller fejlagtig fortolkning: Uanset hvad Bjarnes computer gør er, ipso facto, programmets betydning. Men sikkert kan en elektrisk storm få maskinen til at gå galt. Men hvad kan vi menes med at gå galt? Formodentlig at den (funktionsdygtige) maskine ikke indeholder den tilsigtede betydning. Men,til gengæld ser vi ud til kun at være i stand til at forstå denne sætning på baggrund af en maskineafhængig karakterisering af betydningen. Og på et eller andet niveau skal dette gives via en uafhængig semantisk beskrivelse. Dette antyder, at forestillingen om en ren implementering ikke tilbyder en passende forestilling om semantik. (Sammenlign med: Kripke 1982; Wittgenstein 1953).

3.3 Semantik, lighed og identitet

Vi afsluttede vores diskussion af programlighed (§2.1) med et løfte om at bringe semantik ind i billedet. Hver semantisk redegørelse for et programmeringssprog bestemmer en opfattelse af lighed for programmer, nemlig at to programmer betragtes som lige, hvis de har den samme semantiske værdi, dvs.

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

hvor || P || er den semantiske værdi af programmet P. Så i denne forstand bestemmer enhver semantisk beretning et kriterium for lighed. For eksempel ville en version af denotational semantik abstraheres væk fra alle beregningstrin og sidestilles med programmer, der på en eller anden måde beregner den samme matematiske funktion. F.eks. Vil de følgende to programmer blive betragtet som lige af dette kriterium:

funktion Factorial (n: heltal): heltal

begynder

hvis n = 0, Factorial: = 1;

andet

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

ende;

Program 1

funktion Factorial (n: heltal): heltal

var

x, y: heltal;

begynde

y: = 1;

x: = 0;

mens x <n begynder

x: = x +1;

y: = y * x;

ende

Factorial: = y;

ende;

Program 2

På den anden side ville en mere operationel opfattelse, der henviser til beregningstrinnene, ikke tage program 1 og program 2 til at være ens. Faktisk kan vi i lyset af §3.1 udarbejde semantiske konti, der afspejler ethvert niveau af implementeringsdetaljer. Forskellige semantiske beretninger bestemmer forskellige forestillinger om lighed, der kan tjene forskellige konceptuelle og praktiske mål. Men hvilken skal man tage for at bestemme sproget? Heldigvis er der nogle desiderata, der kan anvendes; vi kan skære ned på mulighederne: nogle semantiske konti giver os en logisk tilfredsstillende forestilling om identitet, og nogle gør det ikke.

Den indiscernibility af identicals er et princip indbygget i almindelig prædikatlogik. Den siger, at hvis to objekter er ens, deler de alle egenskaber. Det omvendte princip, identiteten af uundværligeangiver, at hvis objekt for x for hver egenskab F har F, og kun hvis objekt y har F, så er x identisk med y. Uskileligheders identitet indebærer, at hvis x og y er forskellige, så er der mindst en egenskab, som x har, og y ikke. Nogle gange er sammenhængen mellem begge principper kendt som Leibniz's Law (Forrest 2006). Leibniz's lov anses ofte for at være essentiel for enhver opfattelse af lighed. Disse love er normalt formuleret i logiske teorier såsom andenordens logik. Men vi vil være mest interesseret i deres evne til at skelne mellem forskellige former for semantik for programmeringssprog. Leibniz 'lov er faktisk en af de centrale forestillinger om moderne semantisk teori. Kriteriet om identitet udformes med hensyn til observationsækvivalens.

To programmer M og N er defineret som observationsmæssigt ækvivalentehvis og kun hvis C […] i alle sammenhænge, hvor C [M] er et gyldigt program, er det tilfældet, at C [N] også er et gyldigt program med den samme semantiske værdi. For eksempel siger vi, at Oracle og DB2 (programmer, der manipulerer relationelle databaser), er observationsmæssigt ækvivalente i henhold til en vis semantisk redegørelse for operationer på relationelle databaser, hvis og kun hvis de udføres i “samme” sammenhæng (operativsystem, maskinearkitektur, input osv.) giver den "samme" database. Naturligvis skal udtrykket observationsmæssigt ækvivalente tages med en knivspids salt. Vi kan tydeligvis ikke observere et programs opførsel i alle sammenhænge. Imidlertid afspejler observationsækvivalens et underliggende begrebsmæssigt krav, der stammer fra principperne om identiske ikke-skelnenhed og identiteten af uskilte.

I semantik, hvis alle observerbart forskellige programmer har forskellige semantiske værdier, siges semantikken at være lyd. Følgelig opfylder en god semantik følgende princip:

|| P || = || Q || indebærer, at for alle sammenhænge C, || C [P] || = || C [Q] ||

Det skal være klart, at forestillingen om identitet, der er fremkaldt af en sund semantik, tilfredsstiller identiske udydeligheder.

En semantik siges at være komplet, hvis to programmer med forskellige semantiske værdier er bemærkelsesværdigt forskellige. Mere præcist tilfredsstiller en komplet semantik følgende:

For alle sammenhænge C, || C [P] || = || C [Q] || indebærer || P || = || Q ||

Igen skulle det være åbenlyst, at en komplet semantik tilfredsstiller princippet om uudvikelige identitet.

Endelig siges det, at semantik er fuldstændig abstrakt, hvis den er sund og komplet. Følgelig tilfredsstiller en fuldstændig abstrakt semantik Leibniz's Law.

Denne logiske baggrund giver den filosofiske begrundelse for udviklingen af fuldt abstrakt semantik. Det giver os således en måde at vælge semantiske konti, der giver filosofisk acceptable forestillinger om lighed. Det bestemmer naturligvis ikke en enkelt opfattelse. Det giver kun et værktøj til at afvise dem, der ikke kan levere et begrebeligt acceptabelt. Mange såkaldte denotational semantik er ikke fuldstændigt abstrakte, mens mange operationelle er. Faktisk har et af de centrale emner i semantikens nylige historie været involveret i søgningen efter fuldstændigt abstrakte definitioner, der kastes inden for klassen af semantiske definitive teknikker, der tages for at levere en denotational semantik.

Semantik spiller en normativ eller definerende rolle inden for datalogi. Uden semantiske definitioner har sprog og strukturer intet indhold ud over det, der leveres af deres syntaktiske beskrivelser. Og sidstnævnte er næppe tilstrækkelige til praktiske eller filosofiske formål. Mens vi har startet på analysen af de centrale bekymringer, har vi kun ridset overfladen.

4. Beviser og programmer

Specifikationer (§2.3) fremkalder en særlig opfattelse af korrekthed. I henhold til den abstrakte fortolkning af denne opfattelse anses et program for at være korrekt i forhold til en (funktionel) specifikation, hvis forholdet, det udskiller mellem input og output, tilfredsstiller det, der er beskrevet i specifikationen. Mere præcist, hvis p er et program, opfylder det en specifikation R, der anses for at være en relation over inputtype I og outputtype O, hvis følgende gælder:

For alle indgange tilfredsstiller jeg af type I, parret (i, p (i)) forholdet R

hvor p (i) er resultatet af at køre programmet p på input i. Her udtrykkes R i noget specifikationssprog og p i noget programmeringssprog. Førstnævnte er normalt en variant af (indtastet) predikatlogik og bevis for rigtighed (dvs. at udsagn (1) gælder) udføres i logikets bevissystem. For eksempel anvendes der ofte Hoare-logik (Hoare 1969), hvor korrektionsbeviser tager form af konklusioner mellem tredobbelt, skrevet

B {P} A

hvor P er et program og B og A er påstande (programmets 'før' og 'efter') udtrykt i en eller anden version af predikatlogik med funktioner, der letter udtrykket af værdierne knyttet til programvariablerne.

En filosofisk kontrovers, der omgiver spørgsmålet om korrekthed, centrerer sig om sådanne bevisers karakter; den anden udfordrer hvad sådanne bevis leverer.

4.1 Bevis i datalogi

Er bevis for program korrekthed ægte matematiske bevis, dvs. er sådanne bevis på niveau med standard matematiske? DeMillo et al. (1979) hævder, at fordi korrekthedsbeviser er lange og matematiske lavt, er de i modsætning til bevis i matematik, der er konceptuelt interessant, overbevisende og tiltrækker opmærksomheden fra andre matematikere, der ønsker at studere og bygge videre på dem. F.eks. Vil et bevis i Hoare-logik for, at program 2 beregner faktorfunktionen indeholde detaljer om den underliggende opfattelse af tilstand, anvende et induktivt argument og involvere resonnementer om løkkeevarians.

Men sådanne bevis ville være meget længere end selve programmet. Endvidere ville det niveau, hvorpå resonnementet er kodet i Hoare-logik, kræve udtryk og repræsentation af mange detaljer, der normalt ville være implicit. Det ville være en kedelig og for de fleste programmer konceptuelt trivielt.

Dette argument er parallelt med de forståelsesmæssige argumenter fremsat i matematikfilosofien (f.eks. Tymoczko 1979; Burge 1988). I hjertet er epistemologiske bekymringer: bevis, der er for lange, besværlige og uinteressante, kan ikke være bærere af den slags sikkerhed, der tilskrives matematiske standardbeviser. Arten af den viden, der opnås fra korrektionsbeviser, hævdes at være forskellig fra den viden, der kan hentes fra bevis i matematik [1].

Man må også skelne dette i det væsentlige sociologiske perspektiv på beviser fra det, der hævder, at bevis er rigtige eller forkerte på en måde, der er uafhængig af sådanne epistemologiske vurderinger. Det er muligt at holde fast i den mere realistiske holdning, hvorefter et givet bevis enten er korrekt eller forkert, uden at opgive kravet om, at bevis for at blive taget ind og valideret skal forstås.

Man kan forsøge at få noget grund ved at gå ind for, at korrekthedsbeviser skal kontrolleres af en computer snarere end et menneske. Men selvfølgelig er korrekturchecker selv i behov for at kontrollere. Arkoudas og Bringsjord (2007) hævder, at hvis der kun er et korrektionsbevis, der skal kontrolleres, nemlig selve beviskontrollen, reduceres muligheden for fejl markant.

4.2 Bevis i matematik

Matematiske beviser såsom beviset for Gödels ufuldstændighedsteorem er også lange og komplicerede. Men hvad der gør dem gennemsigtige, interessante og forståelige ('undersøgelige') af det matematiske samfund er brugen af modularitetsteknikker (f.eks. Lemmaer) og brugen af abstraktion i den matematiske skabelses handling. Indførelsen af nye koncepter gør det muligt at konstruere et bevis gradvist, hvilket gør beviserne mere forståelige. Matematik skrider frem ved at opfinde nye matematiske begreber, der muliggør konstruktion af højere niveau og mere generelle bevis, der ville være langt mere komplekse og endda umulige uden dem. Eksempelvis gør eksponentnotationen det muligt at udføre beregning ud over kompleksiteten af multiplikation - og argumentere om resultaterne. I den anden ekstrem,opfindelsen af kategoriteori gjorde det lettere at erklære og bevise på meget generelle resultater om algebraiske strukturer, der automatisk gælder for en hel række sådanne. Matematik handler ikke kun om bevis; det indebærer også abstraktion og oprettelse af nye begreber og notation. På baggrund af det anvender formelle korrekthedsbeviser generelt ikke oprettelsen af nye koncepter eller involveres i processen med matematisk abstraktion. I modsætning hertil er abstraktion inden for datalogi (§6.1) koncentreret om de forestillinger, der er nødvendige til programdesign. Men hvordan er disse to forestillinger om abstraktion relateret? Vi vil sige lidt mere om dette senere.det indebærer også abstraktion og oprettelse af nye begreber og notation. På baggrund af det anvender formelle korrekthedsbeviser generelt ikke oprettelsen af nye koncepter eller involveres i processen med matematisk abstraktion. I modsætning hertil er abstraktion inden for datalogi (§6.1) koncentreret om de forestillinger, der er nødvendige til programdesign. Men hvordan er disse to forestillinger om abstraktion relateret? Vi vil sige lidt mere om dette senere.det indebærer også abstraktion og oprettelse af nye begreber og notation. På baggrund af det anvender formelle korrekthedsbeviser generelt ikke oprettelsen af nye koncepter eller involveres i processen med matematisk abstraktion. I modsætning hertil er abstraktion inden for datalogi (§6.1) koncentreret om de forestillinger, der er nødvendige til programdesign. Men hvordan er disse to forestillinger om abstraktion relateret? Vi vil sige lidt mere om dette senere.

4.3 Fysisk og abstrakt korrekthed

Selv hvis vi lægger disse epistemologiske bekymringer til side, stiller en anden og tilsyneladende mere ødelæggende kritik af rigtighed spørgsmålstegn ved, hvad der rent faktisk fastlægges af dem. Tilsyneladende giver et bevis på rigtighed kun rigtighed op til programmets tekstlige repræsentation. Intet beløb af formelt arbejde kan få os forbi den abstrakte / fysiske barriere: vi kan aldrig garantere, at nogen særlig udførelse af programmet på en fysisk maskine faktisk vil forløbe som forventet (Fetzer 1988; Fetzer 1999; Colburn 2004).

Men hvad betyder det for program p at være korrekt? Antag, at vi har en specifikation af programmet, og at det kan være formelt eller uformelt. Lad os antage, at vi udfører en række testkørsler for at kontrollere, at programmet opfylder dets specifikation. Hvis de lykkes, har vi empiriske beviser for, at det fysiske modstykke til det tekstlige program faktisk er korrekt, fordi det fungerer i henhold til specifikationen. Efter dette synspunkt er det det fysiske modstykke, der blev testet; ikke det tekstlige program.

Denne analyse antyder, at der er en dualitet i forestillingen om programmets rigtighed. I overensstemmelse med programmeres dobbelte karakter kan vi måske sige, at det tekstlige program er underlagt matematisk korrekthed, mens dets fysiske modstykke er underlagt empirisk verifikation.

5. Beregnelighed

Computability er et af de ældste emner, der kan mærkes som PCS. Det er dog emnet for flere SEP-poster (f.eks. Barker-Plummer 2004), og derfor skal vi kun nævne et par emner og deres forbindelser med resten af den aktuelle post.

5.1 Den kirke-turing afhandling

Et af de centrale spørgsmål er Church-Turing-afhandlingen. Og her er der to tvister, en historisk og en empirisk. De fokuserer på følgende to mulige fortolkninger af specialet:

  1. Turingmaskiner kan gøre alt, hvad der kan beskrives som”tommelfingerregel” eller”rent mekanisk”.
  2. Uanset hvad der kan beregnes af en maskine (der arbejder på begrænsede data i overensstemmelse med et begrænset instruktionsprogram) er Turing-maskine beregnet.

Fortolkning I er beregnet til at fange forestillingen om en effektiv eller mekanisk metode i logik og matematik. Det er beregnet til at afspejle den uformelle opfattelse af algoritme implicit i matematik og bragt på forkant af Hilberts program. Fortolkning II er beregnet til at styre fysiske maskiner. Faktisk kan (Gandy 1980) ses som en yderligere udpakning af II. Gandy foreslår fire principper, der er beregnet til at karakterisere beregning af en fysisk maskine. Han viser, at sådanne maskiner nøjagtigt stemmer overens med Turing's karakterisering (Gandys sætning). I forbindelse med vores diskussion af forskellige semantiske paradigmer er det klart, at mange af de maskiner, der ligger til grund for denotational semantik (§3.1), ikke betegnes som Gandy-maskiner. De fungerer ofte med ekstensionsfunktioner med højere ordre,og disse kan ikke tages for at udgøre begrænsede data og ikke opfylder Gandys betingelser.

Nogle hævder (Copeland 2004; Copeland 2008), at afhandlingen som foreslået af Church and Turing kun vedrører fortolkning I og ikke sætter en grænse for maskiner generelt. Hodges (2007) er uenig. Han argumenterer for, at Church and Turing ikke skelne mellem de to fortolkninger. Dette er den historiske tvist.

Den fysiske tvist vedrører faktiske maskiners egenskaber (fortolkning II.) Mange tager det for givet, at Church-Turing-afhandlingen karakteriserer og foreskriver faktisk fysisk beregning. For eksempel ser det ud til at være den implicitte antagelse inden for mainstream computer science. Det er bestemt tilfældet, at hvert program, der er skrevet i et eksisterende implementeret programmeringssprog, er Turing-beregningsbar og omvendt, at alle programmeringssprog til generelle formål er Turing-komplette, dvs. at de indeholder alle de kontrolkonstruktioner, der er nødvendige for at simulere en universal Turing-maskine.

Copeland (2007) hævder, at Gandys karakterisering af en diskret deterministisk mekanisk enhed er for snæver, og at der derfor er eksempler på mulige fysiske maskiner, hvis egenskaber går ud over klassen af Turing-computbare funktioner. Mange af disse kræver uendelig speedup, hvorved et uendeligt antal beregninger fysisk kan udføres i en begrænset tid. Kvanteberegning er blevet nævnt som et muligt eksempel på sådanne maskiner, men dette er blevet omtvistet (Hodges 2007; Hagar 2007).

Hodges er også optaget af anvendeligheden af standard matematisk argumentation i fysik i de tilfælde, hvor der er involveret uendelig præcision. Dette antyder, at denne tvist ikke er simpel empirisk. Der er faktisk dem, der sætter spørgsmålstegn ved, om det er fysisk muligt at udføre et uendeligt antal opgaver på en begrænset tid. Dummett (2006) sætter spørgsmålstegn ved, om selve forestillingen om en uendelig opgave, der skal udføres på det fysiske område, ikke kun er en fysisk umulighed, men også en konceptuel. Så tvisten er ikke kun en empirisk, men går til hjertet i vores forståelse af forholdet mellem vores matematiske modeller og den fysiske virkelighed.

6. Programmering og programmeringssprog

Design af programmer og programmeringssprog er en af de traditionelle aktiviteter inden for datalogi. En række konceptuelle spørgsmål omgiver dem (§1), hvoraf mange ikke har modtaget nogen filosofisk opmærksomhed. Her skal vi kort gennemgå to af disse problemer.

6.1 Abstraktion

Abstraktion er en af de konceptuelle hjørnestener i datalogi. Det er en integreret del af programdesign og konstruktion og danner en kernemetodologi til design af programmeringssprog. Faktisk driver det oprettelsen af nye programmeringsparadigmer. Det ligger til grund for opfindelsen af forestillinger såsom proceduremæssig og funktionel abstraktion, polymorfisme, dataabstraktion, objekter og klasser, designmønstre, arkitektoniske stilarter, undertype og arv. Mange grene af software engineering (f.eks. Software modellering, programforståelse, programvisualisering, reverse- og re-engineering) er primært beskæftiget med undersøgelsen af passende mekanismer til programabstraktion. Og meget af udviklingen inden for softwareteknologi er opnået på grund af indførelsen af nye abstraktionsmekanismer.

Men hvad er abstraktionens karakter i datalogi? Hvad er dens underliggende filosofiske forklaring? Desværre er selve ideen om abstraktion generelt filosofisk problematisk. I henhold til det traditionelle synspunkt, der har sin oprindelse i filosofisk psykologi, er abstraktion en mental proces, hvor nye forestillinger dannes ved at overveje flere objekter eller ideer og udelade de træk, der adskiller dem. (Rosen 2001). Men denne tilgang har få, om nogen, nutidige filosofiske fortalere.

En mere logisk tilgang til analysen af abstraktion, der har en vis stærk fortalervirksomhed (Wright 1983; Hale 1987). Men det er uklart, om disse ideer, der blev udviklet til matematisk abstraktion, finder anvendelse på datalogi. Nogle af begreberne om abstraktion inden for datalogi var helt klart enten inspireret af eller undersøgt ved hjælp af abstraktioner i matematik. Men hvad er det begrebsmæssige forhold mellem abstraktion inden for disse discipliner? Er de grundlæggende forskellige? Desværre, selvom der er betydelig litteratur om de filosofiske fundamenter i matematisk abstraktion (se Wright 1983; Hale 1987; Fine 2002), er den begrebsmæssige undersøgelse af abstraktion i datalogi i sin spædbarnsalder. Colburn (2007) antyder, at sondringen mellem abstraktion i matematik og abstraktion i datalogi ligger i det faktum, at i matematikabstraktion er informationsforsømmelse, hvorimod det inden for datalogi er information skjuler. Det vil sige, abstraktioner i matematik ignorerer det, der vurderes at være irrelevant (f.eks. Farven på lignende trekanter). I modsætning hertil, inden for datalogi, skal alle detaljer, der ignoreres på et abstraktionsniveau (f.eks. Java-programmerere ikke behøver at bekymre sig om den nøjagtige placering i hukommelsen, der er knyttet til en bestemt variabel), ikke må ignoreres af et af de lavere niveauer (f.eks. Den virtuelle maskinen håndterer alle hukommelsestildelinger).abstraktioner i matematik ignorerer det, der vurderes at være irrelevant (f.eks. farven på lignende trekanter). I modsætning hertil, inden for datalogi, skal alle detaljer, der ignoreres på et abstraktionsniveau (f.eks. Java-programmerere ikke behøver at bekymre sig om den nøjagtige placering i hukommelsen, der er knyttet til en bestemt variabel), ikke må ignoreres af et af de lavere niveauer (f.eks. Den virtuelle maskinen håndterer alle hukommelsestildelinger).abstraktioner i matematik ignorerer det, der vurderes at være irrelevant (f.eks. farven på lignende trekanter). I modsætning hertil, inden for datalogi, skal alle detaljer, der ignoreres på et abstraktionsniveau (f.eks. Java-programmerere ikke behøver at bekymre sig om den nøjagtige placering i hukommelsen, der er knyttet til en bestemt variabel), ikke må ignoreres af et af de lavere niveauer (f.eks. Den virtuelle maskinen håndterer alle hukommelsestildelinger).

Men er dette baseret på en for forenklet forestilling om abstraktion i matematik? Er der kun en slags forestilling? For eksempel er informationen, der skjuler sig i Bishop's analyse (Bishop 1970), meget forskellig fra Wrights opfattelse af abstraktion - faktisk svarer det meget til den computervidenskabelige.

6.2 Typer og Ontologi

Programmeringssprog er for det meste typesprog, hvor den moderne opfattelse af typen har sin oprindelse i Frege og Russell og især i Russells enkle teori om typer (Irvine 2003). Naturligvis var Russell motiveret af de logiske og semantiske paradokser, og denne funktion er ikke central for anvendelsen af typer til datalogi. På den anden side skitserer Russell-typer diskursuniverset på måder, der har både grammatisk og semantisk import. Og denne idé er overført til datalogi. Faktisk er typeteorier inspireret og beriget af datalogi. For eksempel er Russells teori om typer, skønt matematisk kraftfuld, noget fattig i sin ekspressive kraft sammenlignet med typeteorierne for moderne computersprog (Coquand 2006; Pierce 2002). Bortset fra en række basistyper som tal og booleaner, indeholder programmeringssprog en samling af typekonstruktører (måder at opbygge nye typer fra gamle). For eksempel inkluderer disse muligheden for at danne en slags kartesisk produkt og begrænsede sæt. I mange objektorienterede programmeringssprog kan typer (klasser) importere (og tilsidesætte) operationer fra andre typer og tilbyde mere sofistikerede konstruktører, der understøtter dannelsen af abstrakte datatyper og forskellige former for polymorfisme.typer (klasser) kan importere (og tilsidesætte) operationer fra andre typer og tilbyde mere sofistikerede konstruktører, der understøtter dannelsen af abstrakte datatyper og forskellige former for polymorfisme.typer (klasser) kan importere (og tilsidesætte) operationer fra andre typer og tilbyde mere sofistikerede konstruktører, der understøtter dannelsen af abstrakte datatyper og forskellige former for polymorfisme.

I datalogi spiller typer en rolle, der er halvvejs mellem syntaks og semantik. For det første udvider de vores normale opfattelse af kontekstfri grammatik. Nogle sprogfunktioner, især dem, der gør det muligt at fastlægge en variabeltype efter kontekst (dvs. erklæringer om sproget) kræver en form for grammatik, der er mere fleksibel end standardformularen. Såkaldte to-niveau grammatik, selvom det er teknisk passende, fanger ikke den måde, hvorpå variabler tildeles deres typer på moderne sprog. Og de er meget klodsede at bruge. De tilpasser sig heller ikke let til de polymorfe systemer på mange sprog. Moderne typesystemer klarer sig bedre: variabler tildeles deres typer via erklæringer, fx x: Boolsk. Efterfølgende kan en kompilator typetjekke programmet, f.eks.det kan sikre, at forekomsten af en variabel i efterfølgende udsagn (f.eks. x

Men typer spiller også en korrekthedsrolle, som normalt ikke ville blive beskrevet i syntaktiske termer. Det gør dette ved at udvide den traditionelle fysiske opfattelse af dimensionel analyse til et meget rigere systemsystem. At få den rigtige type struktur til et program er en måde at sikre dets rigtighed. Og dette bestemmes af strukturen, som typer pålægger et sprog. Typer fastlægger den slags ting der er i et programmeringssprog. Så for eksempel pålægger ethvert programmeringssprog, der indrømmer antal, produkter og klasser og intet andet, en konceptuel ramme for programmereren, som hun skal arbejde inden for. Problemer skal artikuleres, og løsninger findes i de repræsentationsmidler, der leveres af typesystemet. Når typestrukturen for et programmeringssprog er blevet beskrevet, er meget af dets ontologiske indstilling rettet.

Eller har det det? Måske er vi nødt til at gå tilbage og først spørge, hvordan de ontologiske forpligtelser af et sprog skal bestemmes. Er det semantikken, der afgør sager (Turner & Eden 2007)? En lang tradition, der kommer fra Frege, ville antyde det (Dummett 1991). At antage, at analogien med naturlige sprog er legitim, bestemmes sprogets ontologi af de strukturer, der kræves for at give dets semantiske domæner. Men hvilken semantisk teori skal vi anvende? Mens enhver semantik skal tage hensyn til typer, ville den semantisk bestemte ontologi gå ud over dem og afspejle de involverede semantiske domæner, og disse vil afspejle implementeringsdetaljen, der er inkluderet i semantikken. På samme måde bestemmer forskellige semantiske fortolkninger, som med lighed, forskellige ontologier. Det følger heraf, at det ikke er fornuftigt at tale om ontologien i et programmeringssprog, men om flere ontologier, der afhænger af abstraktionsniveauet involveret i semantikken. F.eks. Kan ontologien også delvis bestemmes af programmeringsparadigmet.

7. Juridiske og etiske spørgsmål

Nogle spørgsmål inden for computeretik hører til PCS, idet aktiviteten ved at opbygge og bruge software rejser etiske spørgsmål. Imidlertid er mange ikke specifikke for datalogi i denne snævre forstand; de påvirker hele informationsteknologi og computerapplikationer (Bynum 2001). Derfor skal vi kun nævne to, der synes at være centrale for datalogi.

7.1 Ophavsret, patenter og identitet

Ophavsret giver beskyttelse til software, men de er ikke i stand til at beskytte dens semantiske kerne. Og vi tager det, at sidstnævnte skal bestemmes af en semantisk beretning (§3) af det programmeringssprog, som programmet er skrevet i. Antagelig vedrører essensen af dette spørgsmål problemet med programidentitet (§3.3). Men hvis der er mange mulige semantiske forestillinger om identitet, hvilken er der velegnet til juridisk anvendelse?

En uformel semantisk beretning, der ofte er citeret i lov, identificerer programmet med de ideer, der er udtrykt deri, som oftest anses for at være dets underliggende algoritme. Men ikke kun er det ofte svært at sige nøjagtigt, hvad denne algoritme er, men også, som med matematiske teoremer, kan algoritmer ikke ophavsretligt beskyttes. Og den samme skæbne venter på enhver formel semantisk beretning, da sådanne vil blive bestemt af en eller anden matematisk opfattelse, det være sig algoritmer eller en forestilling om funktion eller matematisk funktion.

Men selv hvis vi kunne finde en semantisk konto, der ville komme sammen med ophavsretten, ville det juridiske billede ikke være komplet. Krænkelse af ophavsret hænger ofte ikke kun på en eller anden grund af identitet, men om det er sandsynligt at antage, at nogen ville komme med det samme program. Så at forsætlige overvejelser kommer ind i rammen. Med andre ord, selv hvis to programmer anses for at være ækvivalente i henhold til vores semantiske kriterium, ville det ikke være nogen krænkelse af ophavsret, hvis det kunne betragtes som sandsynligt, at de var konstrueret uafhængigt.

Patenter (specifikt hjælpepatenter) går ikke bedre. De er endnu sværere at få til software, da man ikke kan patentere mentale processer, abstrakte ideer og algoritmer. Og det er algoritmer snarere end kildekoden, der ofte indeholder de nye ideer. Men endnu en gang er det identifikations- og identitetsspørgsmålene, der er den centrale filosofiske bekymring. Og disse involverer både semantiske og forsætlige overvejelser.

7.2 Korrekthed og ansvar

Er det rigtigt, at software sælges med lille garanti for egnethed til formålet? (Coleman 2008) er helliget dette spørgsmål. Dette er et særligt relevant spørgsmål til sikkerhedskritiske systemer, f.eks. Systemer, der overvåger medicinske forhold, betjener atomkraftværker og kommunikerer med rumfærger. Her virker håndhævelse af mere streng test og bevis for rigtighed af afgørende betydning. Men er det etisk set tilfældet med en programmør, der undlader at analysere og afprøve sit program, der er forskelligt fra det, som en civilingeniør, der ikke udfører den krævede matematiske modellering og prøver på en bygningskonstruktion? De moralske forpligtelser synes ens.

En måde, hvorpå de måske er forskellige, vedrører kompleksiteten af software (Brooks 1987), som overskrider kompleksiteten af enhver anden form for menneskelig genstand efter størrelsesordrer. Mange hævder, at det ikke er muligt at tilbyde en sådan garanti for rigtighed (DeMillo et al. 1979); software er så kompliceret, at processen med streng matematisk korrektur og softwaretest er umulig. Og antagelig kan man kun have en (moralsk eller juridisk) forpligtelse til at gennemføre en gennemførlig proces.

Men hvordan balanserer man de bevisende og testende aspekter af softwareudvikling imod den tilsigtede brug af softwaren? Bør software, der er udviklet til underholdning, underkastes den samme grad af streng bevisning og testning som software, der er sikkerhedskritisk? Formodentlig ikke, men vi kan måske stadig blive fristet til at spørge, er disse nye etiske problemer, eller giver de os bare yderligere casestudier af eksisterende etiske dilemmaer? For eksempel kan selv sikkerhedsfejl i software, der bruges i underholdningsindustrien, medføre økonomiske sanktioner.

8. Nye vendinger eller nye problemer?

Selv denne temmelig korte oversigt over PCSskal overbevise læseren om, at datalogi rejser interessante og krævende filosofiske spørgsmål. Et af de overordnede indtryk er faktisk, at det har betydelige forbindelser med de fleste af de traditionelle filosofiske grene. Der er klare forbindelser med ontologi, etik, epistemologi og filosofierne i matematik, fysik og sprog. Faktisk rejser vores første liste over spørgsmål mange flere temaer, der har forbindelse til andre filosofiske områder. Der findes især en betydelig litteratur om anvendelsen af computervidenskab. Kunstig intelligens og kognitiv videnskab giver filosofiske spørgsmål, der hører til sindets filosofi (McLaughlin 2004). Naturligvis stammer meget af dette fra Turing (1950). Andre anvendelser af datalogi til traditionelle videnskabelige områder, såkaldt computational science,skabe spørgsmål til videnskabsfilosofien: hvad er den epistemologiske virkning af computersimuleringer, især hvor dette er den eneste levedygtige form for eksperimentering? Den beregningsmæssige vending i ontologi bringer nye teknikker til at bære strukturen i enhver form for konceptuel ontologi. Logikfilosofien er beriget med en masse materiale: et stort antal nye logiske systemer er opstået med det formål at repræsentere og resonnere omkring beregningssystemer.et stort antal nye logiske systemer er opstået med det formål at repræsentere og resonnere omkring beregningssystemer.et stort antal nye logiske systemer er opstået med det formål at repræsentere og resonnere omkring beregningssystemer.

Selvom det er klart, at datalogi rejser mange betydelige vendinger til traditionelle filosofiske bekymringer, er det mindre tydeligt, om det skaber reelt nye filosofiske bekymringer: er der spørgsmål i PCS, der ikke har nogen parallel i nogen anden filosofisk gren?

Bibliografi

  • Allison, A., Currall, J., Moss, M. og Stuart, S., 2005, “Digital identitet spørgsmål”, Journal of American Society Information Science and Technology 56 (4): 364–372.
  • Arkoudas, K. og Bringsjord, S., 2007, “Computere, begrundelse og matematisk viden”, Minds and Machines 17 (2): 185–202.
  • Barendregt, HP, 1993, “Lambda calculi with types”, i: Handbook of logic in computer science, Vol. 2, New York, NY: Oxford University Press Inc.
  • Barker-Plummer, D., 2008, “Turing Machines”, The Stanford Encyclopedia of Philosophy (Efterår 2008-udgave), Edward N. Zalta (red.), URL = .
  • Bishop, Errett, 1977, Fundamenter af konstruktiv analyse, McGraw-Hill.
  • Blass, Andreas og Gurevich, Yuri, 2003, “Algorithms: A Quest for Absolute Definitions”, Bulletin of the European Association for Theoretical Computer Science (EATCS) No.81: 195-225.
  • Bowen, JP og Hinchey, MG, 1995, “Ti bud af formelle metoder”, IEEE Computer 28 (4): 56–63.
  • Bowen, JP og Hinchey, MG, 2005, “Ti bud med formelle metoder: ti år senere”, IEEE Computer 39 (1): 40–48.
  • Brooks, FP, 1987, “No Silver Bullet: Essence and Accidents 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, "Computer Ethics: Basic Concepts and Historical Oversigt", The Stanford Encyclopaedia of Philosophy (Winter 2001 Edition), Edward N. Zalta (red.), URL =
  • Colburn, T., 2004, "Methodology of Computer Science", Blackwell Guide to the Philosophy of Computing and Information, Luciano Floridi (red.), Malden: Blackwell, s. 318–326.
  • Colburn, T. og Shute, G., 2007, “Abstraktion inden for datalogi”, Minds and Machines 17 (2): 169–184.
  • Coleman, KG, 2008, “Computing and Moral Responsibility”, The Stanford Encyclopedia of Philosophy (Efterår 2008-udgave), Edward N. Zalta (red.), URL = .
  • Copeland, B. Jack, 2008, "The Church-Turing Thesis", The Stanford Encyclopedia of Philosophy (Efterår 2008-udgave), Edward N. Zalta (red.), URL = .
  • Copeland, B. Jack, 2004, "Computation", Blackwell Guide to the Philosophy of Computing and Information, Luciano Floridi (red.), Malden: Blackwell, s. 3–17.
  • Coquand, Thierry, 2006, “Type Theory”, The Stanford Encyclopedia of Philosophy (Winter 2006 Edition), Edward N. Zalta (red.), URL = .
  • DeMillo, RA, Lipton, RJ og Perlis, AJ, 1979, "Sociale processer og bevis for sætninger og programmer", Kommunikation af ACM 22 (5): 271-280.
  • Denning, PJ, 1980, “Om folketeorier og folkemyter”, Kommunikation af ACM 23 (9): 493–494.
  • Denning, PJ, 1980b, "Hvad er eksperimentel datalogi?" Kommunikation af ACM 23 (10): 534–544.
  • Denning, PJ, 1981, “Performance analysis: Experimental Computer Science as its Best”, Kommunikation af ACM 24 (11): 725–727.
  • Denning, PJ, 1985, "The Science of Computing: Hvad er datalogi?" American Scientist 73 (1): 16–19.
  • Denning, PJ (red.), Et al., 1989, "Computing as a Discipline", Kommunikation af ACM 32 (1): 9-23.
  • Dijkstra, E., 1968.”Gå til erklæring betragtet som skadelig”, meddelelse af ACM 11 (3): 147–148.
  • Dummett, M., 1991, "The Logical Base of Metaphysics", Harvard University Press.
  • Dummett, M., 2006, “Tanke og virkelighed”, Oxford University Press.
  • Eden, Amnon, 2007, “Tre paradigmer inden for datalogi”, Minds and Machines 17 (2): 135–167.
  • Feferman, S., 1992, “Logik til afslutning og korrekthed af funktionelle programmer”, Logic for Computer Science: 95–127, MSRI Pubs. vol. 21, New York, NY: Springer-Verlag.
  • Fetzer, JH, 1988, “Programverification: The Very Idea”, Kommunikation af ACM 31 (9): 1048–1063.
  • Fetzer, JH, 1999, “Modellenes rolle i datalogi”, The Monist 82 (1): 20–36.
  • Fine, K., 2008, “The Limits of Abstraction”. Oxford: Oxford University Press.
  • Floridi, Luciano, 2004. “Information”, Blackwell Guide to the Philosophy of Computing and Information, Luciano Floridi (red.), Malden: Blackwell, s. 40–62.
  • Floridi, Luciano 2007, “Semantic Conceptions of Information”, The Stanford Encyclopedia of Philosophy (Spring 2007 Edition), Edward N. Zalta (red.), URL = .
  • Forrest, P., 2006, “The Identity of Indiscernibles”, The Stanford Encyclopedia of Philosophy (Efterår 2008-udgave), Edward N. Zalta (red.), Kommende URL =. >.
  • Fuchs, NE, 1992, “Specifikationer er (fortrinsvis) eksekverbare”. Software Engineering Journal 7 (5): 323–334.
  • Gandy, R., 1980, "Kirkens tese og principper for mekanismer", Kleene-symposiet, Barwise, J., Keisler, HJ og Kunen, K. (red.), Amsterdam: Nordholland.
  • Hagar, Amit, 2007, “Kvantealgoritmer: Filosofiske lektioner”, Minds and Machines 17 (2): 233–247.
  • Hale, B. og Wright, C., 2001, "Årsagens ordentlige undersøgelse: Essays mod Neo-Fregean Philosophy of Mathematics", Oxford Scholarships on Line, Oxford: Oxford University Press.
  • Hartmanis, J., 1993, “Nogle iagttagelser om datalogens natur”, forelæsningsnotater i datalogi 761, Shyamasundar, RK (red.): 1–12.
  • Hartmanis, J., 1994, "Turing Award Lecture: On Computational Complexity and the Nature of Science Science", Kommunikation af ACM 37 (10): 37–43.
  • Hoare, CAR, 1969, "Et aksiomatisk grundlag for computerprogrammering". Kommunikation af ACM 12 (10): 576–585. [Genudskriv tilgængelig online]
  • Hodges, A., 2006, "Har kirke og Turing en afhandling om maskiner?", Kirkens afhandling efter 70 år Olszewski, Adam (red.)
  • Hodges, A., 2007, "Kan kvanteberegning løse klassisk uløselige problemer?"
  • Horsten, L., 2008, “Philosophy of Mathematics”, The Stanford Encyclopedia of Philosophy (Efterår 2008-udgave), Edward N. Zalta (red.), URL = .
  • Immerman, N., 2006, “Computability and Complexity”, The Stanford Encyclopedia of Philosophy (Efterår 2006-udgave), Edward N. Zalta (red.), URL = .
  • Irvine, AD, 2003, “Russells Paradox”, The Stanford Encyclopedia of Philosophy (Efterår 2006-udgave), Edward N. Zalta (red.), URL =
  • Jones, CB og Hayes, IJ, 1990, “Specifikationer er ikke (nødvendigvis) skadelige”, Software Engineering Journal 4 (6): 330–339.
  • Krishnamurthi, S., 2003. Programmeringssprog: Anvendelse og fortolkning,
  • Kreisel, G., Gandy, RO, 1975, "Nogle grunde til at generalisere rekursionsteori." Journal of Symbolic Logic 40 (2): 230–232.
  • Kripke, S., 1982, Wittgenstein om regler og privat sprog. Harvard University Press.
  • Kuhn, TS, 1970, The Structure of Scientific Revolutions, 2nd. red., Chicago: Univ. fra Chicago Press.
  • Landin, PJ, 1964, “Den mekaniske evaluering af udtryk”, Computer Journal 6 (4): 308–320.
  • Milne, R. og Strachey, C., 1977, A Theory of Programming Language Semantics, New York, NY: Halsted Press.
  • McLaughlin, B., 2004, "Computationalism, Connectionism and the Philosophy of Mind", Blackwell Guide to Philosophy of Computing and Information, Floridi, Luciano (red.) Malden: Blackwell, s. 135–152.
  • Minsky, M., 1970, "ACM Turing Lecture: Form and Content in Computer Science", Tidsskrift for Association for Computing Machinery 17 (2): 197–215.
  • Moor, JH, 1978, “Three Myths of Computer Science”, The British Journal for the Philosophy of Science 29 (3): 213–222.
  • Moschovakis, YN, 1998, "On grundlæggelse af teorien om algoritmer", Truth in Mathematics Dales, Harold G. og Oliveri, Gianluigi (red.), Oxford: Oxford University Press.
  • Pierce, Benjamin C., 2002, Typer og programmeringssprog, Cambridge, MA: MIT Press.
  • Plotkin, GD, 1981, "En strukturel tilgang til operationel semantik", Tech. Rep. DAIMI FN-19, Computer Science Department, Aarhus University, Aarhus, Denmark.
  • Rapaport, WJ, 2005a, "Filosofi inden for datalogi: Et introduktionskursus", Undervisningsfilosofi 28 (4): 319–341.
  • Rapaport, WJ, 2005b, "Implementering er semantisk fortolkning: Yderligere tanker." Journal of Experimental and Theoretical Artificial Intelligence 17 (4): 385–417.
  • Rosen, Gideon, 2001. "Abstract Objects", The Stanford Encyclopedia of Philosophy (Efterår 2001-udgave), Edward N. Zalta (red.), URL = .
  • Shapiro, S., 1997, Philosophy of Mathematics: Structure and Ontology, Oxford: Oxford University Press.
  • Sieg, Wilfried, 2008, "Church without Dogma: Axioms for Computability", New Computational Paradigms, Lowe, B., Sorbi, A. and Cooper, B. (eds.), Springer-Verlag, 139–152.
  • Smith, BC, 1996, "Begrænsninger for korrekthed i computere", Computerisering og kontrovers, Kling, R. (red.), Morgan Kaufman, s. 810–825.
  • Szabó, ZG, 2007, “Compositionality”, The Stanford Encyclopedia of Philosophy (Spring 2007 Edition), Edward N. Zalta (red.), URL = .
  • Thomason, R., 2005, “Logic and Artificial Intelligence”, The Stanford Encyclopedia of Philosophy (Summer 2005 Edition), Edward N. Zalta (red.), URL = .
  • Turner, Raymond og Eden, Amnon H., 2007, “Mod programmering af sprogontologi”, Computation, Information, Cognition-The Nexus and the Liminal, Dodig-Crnkovic, Gordana and Stuart, Susan (red.), Cambridge, UK: Cambridge Scholars Press, s. 147–159.
  • Turner, Raymond, 2005, “The Foundations of Specification”, Journal of Logic Computation 15: 623–662.
  • Turner, Raymond, 2007, “Forstå programmeringssprog”. Minds and Machines 17 (2): 129-133
  • Tymoczko, T., 1979, "Det fire-farvede problem og dets filosofiske betydning", Journal of Philosophy 76 (2): 57–83.
  • White, G., 2004, “Filosofien om computersprog”, Blackwell Guide til filosofien om computing og information, Floridi, Luciano (red.), Malden: Blackwell, s. 318–326.
  • Wing, JM, 2006, "Computational Thinking", Kommunikation af ACM, 49 (3): 33–35.
  • Wittgenstein, L., 1953. Philosophical Investigations. Blackwell Publishing.
  • Wright, Crispin, 1983, Freges opfattelse af tal som objekter, Aberdeen University Press.

Andre internetressourcer

  • Filosofi for datalogi ved Essex University
  • International Association for Computing and Philosophy

Anbefalet: