Философия информатики

Оглавление:

Философия информатики
Философия информатики

Видео: Философия информатики

Видео: Философия информатики
Видео: ИТМО, 01.09.2017, философия информатики 2024, Март
Anonim

Это файл в архиве Стэнфордской энциклопедии философии. Информация об авторе и цитировании | Friends PDF Preview | InPho Поиск | PhilPapers Библиография

Философия информатики

Впервые опубликовано пт 12 декабря 2008 г.

Философия информатики (PCS)) занимается философскими вопросами, возникающими из размышлений о природе и практике академической дисциплины информатики. Но что является последним? Это, конечно, не просто программирование. В конце концов, многие люди, которые пишут программы, не являются компьютерными учеными. Например, физики, бухгалтеры и химики делают. Действительно, информатику лучше описать как связанную с мета-активностью, которая связана с программированием. В более общем смысле, а точнее, он занимается проектированием, разработкой и исследованием концепций и методологий, которые облегчают и помогают спецификации, разработке, внедрению и анализу вычислительных систем. Примерами этой деятельности могут быть разработка и анализ языков программирования, спецификаций и архитектурного описания;построение и оптимизация компиляторов, интерпретаторов, средств доказательства теорем и систем вывода типов; изобретение логических структур и проектирование встроенных систем и многое другое. Многие из центральных философских вопросов информатики окружают и поддерживают эту деятельность, и многие из них сосредоточены на логических, онтологических и эпистемологических проблемах, которые ее касаются. Однако, в конце концов, компьютерные науки - это то, чем занимаются компьютерные ученые, и никакое точное формульное определение не может служить чем-то большим, чем руководство к последующему обсуждению. Действительно, надежда состоит в том, чтоМногие из центральных философских вопросов информатики окружают и поддерживают эту деятельность, и многие из них сосредоточены на логических, онтологических и эпистемологических проблемах, которые ее касаются. Однако, в конце концов, компьютерные науки - это то, чем занимаются компьютерные ученые, и никакое точное формульное определение не может служить чем-то большим, чем руководство к последующему обсуждению. Действительно, надежда состоит в том, чтоМногие из центральных философских вопросов информатики окружают и поддерживают эту деятельность, и многие из них сосредоточены на логических, онтологических и эпистемологических проблемах, которые ее касаются. Однако, в конце концов, компьютерные науки - это то, чем занимаются компьютерные ученые, и никакое точное формульное определение не может служить чем-то большим, чем руководство к последующему обсуждению. Действительно, надежда состоит в том, что PCS в конечном итоге будет способствовать более глубокому пониманию природы информатики.

Но наметить философский ландшафт информатики - задача не из легких. К счастью, традиционные отрасли философии могут обеспечить интеллектуальное и структурное руководство. Например, в философии математики и физики существуют центральные вопросы, касающиеся природы рассматриваемых объектов, что представляет собой знание и способы его получения. Философия языка ставит вопросы о содержании и форме семантической теории естественного языка. Это выдвигает на первый план основные онтологические и эпистемологические предположения семантического предприятия. Онтология указывает на виды вещей, которые существуют, как индивидуализировать их и их роль в разработке наших концептуальных схем. Философия логики обеспечивает учет и анализ различных видов логических систем и их роли в повседневном и специализированном дискурсе. Аналогии и сходства в этих и других областях философии должны оказаться полезными при выявлении и прояснении некоторых основных философских проблем компьютерной науки. Существующее влияние этих дисциплин на PCS появится, когда мы продолжим. В частности, второй, третий и четвертый разделы будут отражать влияние онтологии и философии языка и математики.

  • 1. Некоторые центральные вопросы
  • 2. Существование и идентичность

    • 2.1 Двойственная природа программ
    • 2.2 Программы и алгоритмы
    • 2.3 Программы и спецификации
  • 3. Семантика

    • 3.1 денотационная и операционная семантика
    • 3.2 Реализация и семантическая интерпретация
    • 3.3 Семантика, равенство и идентичность
  • 4. Доказательства и программы

    • 4.1 Доказательства в информатике
    • 4.2 Доказательства в математике
    • 4.3 Физическая и абстрактная корректность
  • 5. Вычислимость

    5.1 Тезис о Церкви-Тьюринге

  • 6. Программирование и языки программирования

    • 6.1 Абстракция
    • 6.2 Типы и Онтология
  • 7. Правовые и этические вопросы

    • 7.1 Авторские права, патенты и личность
    • 7.2 Правильность и ответственность
  • 8. Новые повороты или новые проблемы?
  • Библиография
  • Другие интернет-ресурсы
  • Связанные Записи

1. Некоторые центральные вопросы

Для начала мы перечислим то, что мы считаем основными вопросами и вопросами. Это даст читателю краткое описание вопросов, которые дополнят более подробное обсуждение. Хотя многие из них не были непосредственно рассмотрены в литературе и нуждаются в некотором уточнении, эти вопросы иллюстрируют виды проблем, которые мы рассматриваем в PCS.

  1. Какие вещи являются программами? Они абстрактны или конкретны? (Моор 1978; Колберн 2004)
  2. Каковы различия между программами и алгоритмами? (Rapaport 2005a)
  3. Что такое спецификация? А что уточняется? (Смит 1985; Тернер 2005)
  4. Спецификации принципиально отличаются от программ? (Смит 1985)
  5. Что такое реализация? (Rapaport 2005b)
  6. Что отличает аппаратное обеспечение от программного обеспечения? Существуют ли программы как в физической, так и в символической форме? (Моор 1978; Колберн 2004)
  7. Какие вещи являются цифровыми объектами? Нужна ли нам новая онтологическая категория для их размещения? (Эллисон и др. 2005)
  8. Каковы цели различных семантических теорий языков программирования? (Белый 2004; Тернер 2007)
  9. Как вопросы в философии языков программирования соотносятся с параллельными в философии языка? (Белый 2004)
  10. Относится ли принцип модульности (например, Дейкстра 1968) к концептуальным вопросам полной абстракции и композиционности?
  11. Каковы основные концептуальные различия между следующими парадигмами программирования: структурное, функциональное, логическое и объектно-ориентированное программирование?
  12. Какова роль типов в информатике? (Барандрегт, 1992; Пирс, 2002)
  13. В чем разница между операционной и денотационной семантикой? (Тернер 2007)
  14. Что значит для программы быть правильной? Каков эпистемологический статус доказательств правильности? Они принципиально отличаются от доказательств в математике? (DeMillo et al. 1979; Smith 1985)
  15. Что устанавливают доказательства правильности? (Фетцер 1988; Фетцер 1999; Колберн 2004)
  16. Что такое абстракция в информатике? Как это связано с абстракцией в математике? (Colburn & Shute 2007; Fine 2008; Hale & Wright 2001)
  17. Какие формальные методы? Что формального в формальных методах? В чем разница между формальным и неформальным методом? (Bowen & Hinchey 2005; Bowen & Hinchey 1995)
  18. Какая дисциплина является информатикой? Каковы роли математического моделирования и экспериментов? (Минский 1970; Деннинг 1980; Деннинг 1981; Деннинг и др. 1989; Деннинг 1985; Деннинг 1980b; Хартманис 1994; Хартманис 1993; Хартманис 1981; Колберн 2004; Иден 2007)
  19. Должны ли программы рассматриваться как научные теории? (Rapaport 2005a)
  20. Как математика используется в информатике? Используются ли математические модели описательным или нормативным образом? (Белый 2004; Тернер 2007)
  21. Охватывает ли тезис Черча-Тьюринга математическое понятие эффективного или механического метода в логике и математике? Захватывает ли он вычисления, которые могут быть выполнены человеком? Применимо ли это к физическим машинам? (Copeland 2004; Copeland 2007; Hodges 2006)
  22. Может ли понятие вычислительного мышления противостоять философскому исследованию? (Крыло 2006)
  23. Какова правильная логика для обоснования правильности и завершения программы? (Hoare 1969; Feferman 1992) Как логика зависит от основного языка программирования?
  24. Что такое информация? (Floridi 2004; Floridi 2005) Прочитает ли это понятие некоторые из перечисленных здесь вопросов?
  25. Почему так много языков программирования и парадигм программирования? (Кришнамурти 2003)
  26. Имеют ли языки программирования (и парадигмы) природу научных теорий? Что вызывает смещение парадигмы программирования? (Kuhn 1970)
  27. Вызывает ли программная инженерия философские проблемы? (Eden 2007)

В дальнейшем мы добавим некоторые из этих вопросов.

2. Существование и идентичность

Как мы классифицируем и индивидуализируем сущности и концепции информатики? Что это за вещи и что определяет их идентичность? Например, некоторые являются явно конкретными физическими объектами (например, микросхемы, маршрутизаторы, ноутбуки, графические карты), а некоторые - нет (например, формальные грамматики, абстрактные машины, средства доказательства теорем, логические структуры, алгебры процессов, абстрактные типы данных). Но характеристика некоторых центральных понятий, таких как программы и данные, была более проблематичной. В частности, онтологический статус программ считается не совсем простым, равно как и проблема их критериев идентичности.

2.1 Двойственная природа программ

Многие авторы (Moor 1978; Rapaport 2005b; Colburn 2004) обсуждают так называемую двойственность программ. На первый взгляд, программа, кажется, имеет как текстовое, так и механическое или похожее на процесс обличье. Как текст, программа может быть отредактирована. Но его проявление на машиночитаемом диске, похоже, имеет совершенно иные свойства. В частности, это может быть выполнено на физической машине. Таким образом, согласно принципу неразличимости тождеств (§3.3), эти два облика не могут быть одной и той же сущностью. Конечно, каждый, кого убеждает эта двойственность, обязан что-то сказать об отношениях между этими двумя видимыми формами существования.

Одно непосредственное предположение состоит в том, что одно проявление программы является реализацией другого, т. Е. Физическое проявление является реализацией текстового. Однако даже в рамках компьютерных наук не сразу понятно, что слово «реализация» относится только к одному понятию. Часто он используется для ссылки на результат процесса компиляции, когда программа на языке высокого уровня (исходный код) преобразуется в машинный язык (объектный код). Но в равной степени часто он используется для обозначения процесса, в котором исходный код каким-то образом напрямую реализуется аппаратно (например, конкретная реализация в полупроводниках). И, по-видимому, это актуальное понятие. Но без более подробного философского анализа самого понятия реализации (§3.2) (Rapaport 2005b),неясно, как это продвигает дискуссию; мы, кажется, только назвали отношения между двумя очевидными формами существования. Аналогичным образом, другие описали связь между текстом программы и процессом программы как аналогичную той, которая существует между планом и его проявлением в виде серии физических действий. Но это, похоже, не совсем аналогично соединению программы с процессом: мы не склонны называть план и физический процесс различными проявлениями одного и того же. Например, есть ли у нас искушение думать о плане прогулок и фактических прогулок как о разных аспектах одного и того же?другие описали связь между текстом программы и процессом программы как похожую на связь между планом и его проявлением в виде серии физических действий. Но это, похоже, не совсем аналогично соединению программы с процессом: мы не склонны называть план и физический процесс различными проявлениями одного и того же. Например, есть ли у нас искушение думать о плане прогулок и фактических прогулок как о разных аспектах одного и того же?другие описали связь между текстом программы и процессом программы как похожую на связь между планом и его проявлением в виде серии физических действий. Но это, похоже, не совсем аналогично соединению программы с процессом: мы не склонны называть план и физический процесс различными проявлениями одного и того же. Например, есть ли у нас искушение думать о плане прогулок и фактических прогулок как о разных аспектах одного и того же?мы склонны думать о плане пойти на прогулку и фактическую прогулку как различные аспекты одного и того же?мы склонны думать о плане пойти на прогулку и фактическую прогулку как различные аспекты одного и того же?

Возможно, лучше всего описать ситуацию, сказав, что программы как текстовые объекты вызывают механические процессы? Похоже, идея заключается в том, что каким-то образом текстовый объект физически вызывает механический процесс. Но это, по-видимому, требует некоторого довольно тщательного анализа природы такой причинной связи. Colburn (2004) отрицает, что символический текст имеет причинно-следственный эффект; именно его физическое проявление (вещь на диске) имеет такой эффект. Программное обеспечение - это конкретная абстракция, которая имеет среду описания (текст, абстракция) и среду исполнения (например, конкретную реализацию в полупроводниках).

Несколько иной взгляд на эти вопросы начинается с вопроса об идентичности программы. Когда две программы считаются одинаковыми? Такие проблемы возникают, например, при попытках определить юридическую идентичность части программного обеспечения. Если мы отождествляем программу с ее текстовым проявлением, то идентичность программы чувствительна к изменениям ее внешнего вида (например, изменение шрифта). Очевидно, что не только текст дает нам какое-либо философски интересное понятие идентичности программы. Скорее, чтобы достичь осознанного критерия идентичности, нам нужно больше учитывать семантику и реализацию. Мы вернемся к этому вопросу в § 3 и § 6.

2.2 Программы и алгоритмы

Какой бы ни была точка зрения на программы, различие между алгоритмом и программой также нуждается в дальнейшем концептуальном уточнении. Алгоритмы часто принимаются за математические объекты. Если это так, то многие философские вопросы, касающиеся их, также относятся к философии математики. Однако алгоритмы, возможно, более важны для информатики, чем для математики, и заслуживают большего философского внимания, чем им было уделено. В то время как было проведено значительное математическое исследование алгоритмов в теоретической информатике и математической логике (например, Moschovakis 1997; Blass & Gurevich 2003), не было много философских дискуссий, которые сосредоточены на природе алгоритмов и различиях между алгоритмы и программы.

Являются ли алгоритмы абстрактными объектами в смысле, предложенном Розеном (2001), а программы - конкретными? Точнее, являются ли алгоритмы абстрактным математическим аналогом текстового объекта, являющегося программой? Эта картина естественным образом поддается форме онтологического платонизма (Shapiro 1997), где алгоритмы имеют онтологический приоритет, а программы предоставляют лингвистические средства для их достижения. С этой точки зрения можно использовать алгоритмы для обеспечения семантики (§3) языков программирования. Конечно, эта картина наследует все преимущества и проблемы с такой платонической точки зрения (Shapiro 1997).

Менее платоническое представление гласит, что алгоритмы содержат идеи, выраженные в программе. По закону это считается причиной того, что алгоритмы, в отличие от программ, не защищены авторским правом (§7.1). Конечно, термин идея требует дальнейшего философского анализа. Действительно, можно утверждать, что само понятие алгоритма нуждается в гораздо меньшем уточнении, чем стандартное изложение идей и связанных с ним понятий абстракции (Rosen 2001).

Наконец, это почти фольклорный взгляд, что машины Тьюринга предоставляют нам формальный анализ нашего понятия алгоритма. Но соответствует ли это современному понятию, которое используется в современной компьютерной науке с ее сложными представлениями о представлении и управлении? Moschovakis (1997) предлагает анализ, который работает несколько лучше.

2.3 Программы и спецификации

Другое популярное различие, которое должно быть темой некоторого критического анализа, происходит в отношении программ и спецификаций. Что такое спецификации и чем они отличаются от программ? Хотя в философской литературе почти нет прямого обсуждения этого вопроса (но см. Smith 1985), природа спецификаций является фундаментальной проблемой для концептуальных основ информатики.

Одно из представлений, обычно встречающееся в учебниках по формальной спецификации, состоит в том, что программы содержат подробные машинные инструкции, тогда как (функциональные) спецификации описывают только взаимосвязь между вводом и выводом. Один очевидный способ распаковать это в терминах императивного / описательного различия: программы являются обязательными и описывают, как достичь цели, описанной в спецификации. Конечно, в парадигме императивного программирования это, кажется, отражает существенную разницу. Но это не подходит для всех. Например, логические, функциональные и объектно-ориентированные языки программирования явно не регулируются им: взятые за чистую монету, программы, закодированные на таких языках, состоят из последовательностей определений, а не «инструкций». Более того,нефункциональные спецификации не могут быть сформулированы как утверждения о связи между вводом и выводом, потому что они налагают требования на проект и вид инструкций, которые могут быть включены в любую программу.

Другое мнение настаивает на том, что различие между спецификациями и программами должно определяться с точки зрения понятия реализации, т. Е. Может ли оно быть скомпилировано и выполнено? Но что это значит? Это подразумевается в смысле наличия существующего компилятора? Эта интерпретация довольно поверхностна, поскольку предлагает не концептуальный критерий различия, а условный. Например, в течение первых пяти поколений языков программирования (2-я половина 20-го века) рекурсивные, модульные, функциональные и объектно-ориентированные спецификации одного поколения стали формулироваться как программы в следующем, то есть в современных языках спецификаций часто становятся завтрашними языками программирования.

Другое мнение предполагает, что языки программирования - это те языки, которые имеют принципиальную реализацию, тогда как языки спецификации - это те, которые не могут. И, по-видимому, причина, по которой они не могут этого сделать, заключается в том, что языки спецификаций позволяют выражать понятия, которые не являются вычислимыми по Тьюрингу. Это различие согласуется со многими существующими языками спецификаций, которые основаны на теории множеств Цермело-Френкеля и логике высшего порядка. Однако кажется странным, что спецификационный язык должен характеризовать тот факт, что он может выражать невычисляемые свойства и отношения. Являются ли какие-либо из этих невычислимых требований действительно необходимыми на практике (Jones & Hayes 1990; Fuchs 1994)?

Разнообразие этих представлений предполагает, что традиционное двоичное разделение между спецификациями и программами является примером проблемы в PCS, которая заслуживает большего внимания не только для концептуального пояснения, но также и потому, что она может иметь значение для проектирования будущих языков программирования и спецификаций.,

3. Семантика

Грамматика языка программирования определяет только то, что синтаксически допустимо; это не сообщает нам о предполагаемом значении его конструкций. Таким образом, грамматика языка программирования сама по себе не определяет то, в чем люди программируют. Вместо этого для этого используется грамматика, обогащенная семантическим счетом (формальным или неформальным). Семантика предназначена для информирования программиста, автора компилятора и теоретика, заинтересованного в изучении свойств языка. Действительно, часто утверждается, что для удовлетворения различных требований программиста и автора компилятора требуются разные семантические учетные записи на разных уровнях абстракции. И работа теоретика состоит в том, чтобы исследовать их отношения.

Это стандартная картина, которая появляется в семантической литературе. Но многое из этого нуждается в концептуальном уточнении. В этом разделе мы рассмотрим лишь некоторые из вопросов, которые возникают в результате этой деятельности.

3.1 денотационная и операционная семантика

Одним из наиболее важных различий в семантике языков программирования является различие между операционной и денотационной семантикой. Операционная семантика (Landin 1964; Plotkin 1981) обеспечивает интерпретацию языка программирования в терминах некоторой абстрактной машины. Точнее, это перевод выражений на языке программирования в инструкции или программы абстрактной машины. Например, программа 1 будет распакована в последовательность операций абстрактной машины, таких как «a ← 0» и push. Операционная семантика также может быть воспринята как алгоритмическая семантика, особенно когда базовая машина нацелена на характеристику самого понятия алгоритма (например, Moschovakis 1997).

Напротив, денотационная семантика (Milne & Strachey 1977) обеспечивает интерпретацию математических структур, таких как наборы или категории. Например, в классическом подходе множества в виде полных решеток и непрерывных функций на них обеспечивают математическую основу.

Но есть ли существенная концептуальная разница между ними? Является ли денотальная семантика, явно основанная на математических структурах, таких как множества, математической, а операционная семантика - нет? Тернер (2007) не утверждает: все они предоставляют математические интерпретации.

Или операционная семантика является более машиноподобной в смысле создания абстрактной машины, в то время как с денотационной семантикой, которая дается в терминах теории множеств, нет никакого намека на абстрактную машину? Однако такие различия не оказались концептуально значимыми, поскольку денотационные семантические учетные записи могут рассматриваться как структуры, представляющие собой абстрактную машину с состояниями и операциями над ними. Оперативные отчеты также не близки к реализации: денотационные подходы (Milne & Strachey 1977) также очень гибки и способны отражать различные уровни детализации реализации.

Другое возможное различие касается композиционной (или иной) природы семантики. Грубо говоря, семантика считается композиционной (Szabó 2007), если семантическое значение сложного выражения является функцией семантических значений его частей. Композиционность считается важнейшим критерием семантики, поскольку кажется, что она необходима для объяснения продуктивности нашего лингвистического понимания: говорят, что она объясняет, как мы понимаем и конструируем сложные программы. Но дает ли это нам клин для разделения операционной и денотационной семантики? К сожалению, кажется, что это не так: хотя денотационные определения разработаны так, чтобы быть композиционными, это, конечно, не тот случай, когда все операционные семантики не являются композиционными.

Наконец, некоторые версии семантики различаются в отношении существования рекурсивной модели, т. Е. Интерпретации в машинах Тьюринга или машинах Ганди (§5.1). Однако даже это не совсем соответствует традиционному операционному / денотационному разделению. Некоторые денотационные определения имеют рекурсивную модель, а некоторые - нет.

Кажется, очень трудно определить это различие. На первый взгляд, нет четкого концептуального различия между операционной и денотационной семантикой.

3.2 Реализация и семантическая интерпретация

В чем разница между семантической интерпретацией и реализацией? Например, какова концептуальная разница между компиляцией программы в машинный код и приданием ей денотационной семантики? Согласно Rapaport (2005b), реализацию лучше всего рассматривать как семантическую интерпретацию, где последняя характеризуется посредством отображения между двумя областями: синтаксической и семантической. И то, и другое определяется правилами некоторого описания. Например, скомпилированный код (в сочетании с правилами, определяющими его семантику) является семантической учетной записью исходного кода.

В общем понимании термина «реализация» семантическая область предоставляется физической машиной. Другими словами, сама физическая машина («реализация») определяет, что означает программа. Например, в языках программирования это эквивалентно утверждению, что семантика для языка программирования C ++ определяется компьютером Бьярне, на котором работает его компилятор C ++. Но это объяснение явно неадекватно: если мы предположим, что машина Бьярне определяет смысл программ на С ++, тогда нет понятия о неисправности или неправильном толковании: что бы ни делал компьютер Бьярне, это, ipso facto, значение программы. Но, несомненно, молнии могут привести к поломке машины. Но что мы можем иметь в виду под ошибкой? Предположительно, что (неисправная) машина не воплощает предполагаемого значения. Но,в свою очередь, нам кажется, что мы можем понять эту фразу только на основе некоторой машинно-независимой характеристики значения. И на некотором уровне это должно быть дано через некоторое независимое семантическое описание. Это говорит о том, что понятие голой реализации не предлагает адекватного понятия семантики. (Сравните с: Kripke 1982; Wittgenstein 1953).

3.3 Семантика, равенство и идентичность

Мы завершили наше обсуждение равенства программ (§2.1) обещанием внести семантику в картину. Каждое семантическое описание языка программирования определяет понятие равенства для программ, а именно, две программы считаются равными, если они имеют одинаковое семантическое значение, т. Е.

P = Q тогда и только тогда, когда || P || = || Q ||

где || P || является смысловой ценностью программы P. Таким образом, в этом смысле каждое семантическое описание определяет критерий равенства. Например, одна версия денотационной семантики абстрагируется от всех вычислительных шагов и приравнивает программы, которые в некотором смысле вычисляют одну и ту же математическую функцию. Например, следующие две программы будут считаться равными по этому критерию:

функция Factorial (n: integer): целое число

начинается

если n = 0, тогда Factorial: = 1;

остальное

Факториал: = (n) * Факториал (n -1);

конец;

Программа 1

функция Factorial (n: целое число): целое число

var

x, y: целое число;

начало

у: = 1;

х: = 0;

в то время как x <n начинается

x: = x +1;

у: = у * х;

конец

Факториал: = у;

конец;

Программа 2

С другой стороны, более оперативное представление, которое ссылается на этапы вычислений, не будет считать Программу 1 и Программу 2 равными. Действительно, в свете п. 3.1 мы можем разработать семантические отчеты, которые отражают любой уровень детализации реализации. Различные смысловые описания определяют разные понятия равенства, которые могут служить различным концептуальным и практическим целям. Но тогда какой из них следует использовать для определения языка? К счастью, есть некоторые desiderata, которые могут быть применены; мы можем урезать варианты: некоторые смысловые описания дают нам логически удовлетворительное представление о личности, а некоторые - нет.

Неразличимости тождественного принцип, встроенный в обычные логик предикатов. В нем говорится, что если два объекта равны, то они имеют все свойства. Обратный принцип, тождество неразличимых утверждает, что если для каждого свойства F объект x имеет F тогда и только тогда, когда объект y имеет F, то x идентичен y. Тождественность неразличимых подразумевает, что если x и y различны, то существует хотя бы одно свойство, которое x имеет, а y нет. Иногда сочетание обоих принципов известно как закон Лейбница (Forrest 2006). Закон Лейбница часто считается существенным для любого понятия равенства. Эти законы обычно формулируются в логических теориях, таких как логика второго порядка. Но нас больше всего интересует их способность различать различные виды семантики языка программирования. Действительно, закон Лейбница является одним из центральных понятий современной семантической теории. Критерий идентичности конкретизируется в терминах наблюдательной эквивалентности.

Две программы M и N определены как наблюдательно эквивалентные тогда и только тогда, когда во всех контекстах C […], где C [M] является допустимой программой, это тот случай, когда C [N] также является допустимой программой с тем же семантическим значением. Например, мы говорим, что Oracle и DB2 (программы, управляющие реляционными базами данных) обсервационно эквивалентны согласно некоторому семантическому описанию операций над реляционными базами данных, если и только если они выполняются в «одинаковом» контексте (операционная система, архитектура компьютера, ввод и т. Д.).) возвращает «ту же самую» базу данных. Конечно, термин, эквивалентный обсервационно, должен быть взят с щепоткой соли. Мы явно не можем наблюдать поведение программы во всех контекстах. Однако наблюдаемая эквивалентность действительно отражает основополагающее концептуальное требование, которое вытекает из принципов неразличимости идентификаторов и идентичности неразличимых.

В семантике, если все наблюдаемые разные программы имеют разные семантические значения, семантика называется надежной. Следовательно, звуковая семантика удовлетворяет следующему принципу:

|| P || = || Q || подразумевает, что для всех контекстов C, || C [P] || = || C [Q] ||

Должно быть понятно, что понятие тождества, вызванное семантикой звука, удовлетворяет неразличимости тождеств.

Семантика называется полной, если любые две программы с разными семантическими значениями заметно различаются. Точнее, полная семантика удовлетворяет следующему:

Для всех контекстов C, || C [P] || = || C [Q] || подразумевает || P || = || Q ||

Опять же, должно быть очевидно, что полная семантика удовлетворяет принципу тождественности неразличимых.

Наконец, семантика называется полностью абстрактной, если она правильная и полная. Следовательно, полностью абстрактная семантика удовлетворяет закону Лейбница.

Этот логический фон обеспечивает философское обоснование развития полностью абстрактной семантики. Таким образом, он предлагает нам способ выбора семантических описаний, которые обеспечивают философски приемлемые понятия равенства. Это, конечно, не определяет единого понятия. Это только инструмент для отказа от тех, кто не может предоставить концептуально приемлемый. Многие так называемые денотационные семантики не являются полностью абстрактными, в то время как многие операционные. Действительно, одна из центральных тем в недавней истории семантики была связана с поиском полностью абстрактных определений, которые применяются в классе семантических методов определения, которые используются для предоставления денотационной семантики.

Семантика играет нормативную или определяющую роль в информатике. Без семантических определений языки и структуры не имеют контента сверх того, что обеспечивается их синтаксическими описаниями. И последних вряд ли достаточно для практических или философских целей. Хотя мы начали анализ основных проблем, мы лишь поцарапали поверхность.

4. Доказательства и программы

Спецификации (§2.3) вызывают определенное представление о правильности. Согласно абстрактной интерпретации этого понятия, программа считается правильной по отношению к (функциональной) спецификации, если отношение, которое она выявляет между входом и выходом, удовлетворяет отношению, установленному в спецификации. Точнее, если p - это программа, то она соответствует спецификации R, которая считается отношением к типу ввода I и типу вывода O, если выполняется следующее:

Для всех входов i типа I пара (i, p (i)) удовлетворяет соотношению R

где p (i) - результат запуска программы p на входе i. Здесь R выражается в некотором языке спецификации, а p в некотором языке программирования. Первый обычно представляет собой некоторый вариант (типизированной) логики предикатов, и доказательства правильности (т. Е. Утверждение (1)) выполняются в системе доказательств логики. Например, часто используется логика Хоара (Hoare 1969), в которой доказательства корректности принимают форму выводов между тройками, написанных

B {P} A

где P - программа, а B и A - утверждения (состояния программы «до» и «после»), выраженные в некоторой версии логики предикатов с функциями, которые облегчают выражение значений, связанных с переменными программы.

Одно философское противоречие, которое окружает проблему правильности, сосредотачивается на природе таких доказательств; другие проблемы, которые дают такие доказательства.

4.1 Доказательства в информатике

Являются ли доказательства корректности программы подлинными математическими доказательствами, т. Е. Сопоставимы ли эти доказательства со стандартными математическими? DeMillo et al. (1979) утверждают, что поскольку доказательства корректности длинные и математически поверхностные, они не похожи на математические доказательства, которые являются концептуально интересными, неотразимыми и привлекают внимание других математиков, которые хотят изучать их и опираться на них. Например, доказательство в логике Хоара о том, что Программа 2 вычисляет факториальную функцию, будет содержать подробности об основном понятии состояния, использовать индуктивный аргумент и включать рассуждения об инвариантности цикла.

Но такие доказательства будут намного длиннее, чем сама программа. Кроме того, уровень, на котором рассуждение закодировано в логике Хоара, потребует выражения и представления многих деталей, которые обычно остаются неявными. Это было бы утомительно и, в случае большинства программ, концептуально тривиально.

Этот аргумент аналогичен аргументам схватываемости, выдвинутым в философии математики (например, Tymoczko 1979; Burge 1988). В его основе лежат эпистемологические проблемы: слишком длинные, громоздкие и неинтересные доказательства не могут быть носителями такого рода определенности, которая приписывается стандартным математическим доказательствам. Утверждается, что природа знаний, полученных из доказательств корректности, отличается от знаний, которые можно почерпнуть из доказательств по математике [1].

Нужно также отличать этот по существу социологический взгляд на доказательства от того, который утверждает, что доказательства являются правильными или неправильными способом, который не зависит от таких эпистемологических суждений. Можно придерживаться более реалистичной позиции, согласно которой любое данное доказательство является правильным или неправильным, не отказываясь от требования, что доказательства, для того чтобы их можно было принять и подтвердить, должны быть поняты.

Можно попытаться получить какое-то основание, отстаивая, что доказательства правильности должны проверяться компьютером, а не человеком. Но, конечно, проверяющий сам нуждается в проверке. Arkoudas and Bringsjord (2007) утверждают, что если существует только одно доказательство правильности, которое необходимо проверить, а именно, само проверочное средство проверки, то вероятность ошибок значительно уменьшается.

4.2 Доказательства в математике

Математические доказательства, такие как доказательство теоремы Гёделя о неполноте, также длинные и сложные. Но то, что делает их прозрачными, интересными и понятными («поддающимися исследованию») математическим сообществом, - это использование методов модульности (например, лемм) и использование абстракции в акте математического творчества. Внедрение новых концепций позволяет постепенно строить доказательства, что делает их более понятными. Математика прогрессирует, изобретая новые математические концепции, которые позволяют строить более высокий уровень и более общие доказательства, которые были бы гораздо более сложными и даже невозможными без них. Например, нотация экспоненты позволяет проводить вычисления, выходящие за пределы сложности умножения, и спорить о результатах. С другой стороны,изобретение теории категорий облегчило утверждение и доказательство очень общих результатов об алгебраических структурах, которые автоматически применяются ко всему спектру таких. Математика - это не просто доказательство; это также вовлекает абстракцию и создание новых понятий и обозначений. На первый взгляд, формальные доказательства корректности, как правило, не используют создание новых концепций и не участвуют в процессе математической абстракции. Напротив, абстракция в информатике (§6.1) сконцентрирована в понятиях, необходимых для разработки программы. Но как связаны эти два понятия абстракции? Мы еще немного поговорим об этом позже.это также вовлекает абстракцию и создание новых понятий и обозначений. На первый взгляд, формальные доказательства корректности, как правило, не используют создание новых концепций и не участвуют в процессе математической абстракции. Напротив, абстракция в информатике (§6.1) сконцентрирована в понятиях, необходимых для разработки программы. Но как связаны эти два понятия абстракции? Мы еще немного поговорим об этом позже.это также вовлекает абстракцию и создание новых понятий и обозначений. На первый взгляд, формальные доказательства корректности, как правило, не используют создание новых концепций и не участвуют в процессе математической абстракции. Напротив, абстракция в информатике (§6.1) сконцентрирована в понятиях, необходимых для разработки программы. Но как связаны эти два понятия абстракции? Мы еще немного поговорим об этом позже.

4.3 Физическая и абстрактная корректность

Даже если мы отбросим эти эпистемологические заботы, вторая и, казалось бы, более разрушительная критика правильности доказывает вопросы о том, что на самом деле ими установлено. По-видимому, доказательство правильности обеспечивает корректность только вплоть до текстового представления программы. Никакая формальная работа не поможет нам преодолеть абстрактный / физический барьер: мы никогда не сможем гарантировать, что какое-либо конкретное выполнение программы на физическом компьютере действительно будет выполняться так, как ожидалось (Fetzer 1988; Fetzer 1999; Colburn 2004).

Но что значит для программы p быть правильной? Предположим, что у нас есть спецификация программы, и что она может быть формальной или неформальной. Затем, предположим, мы выполнили серию тестовых прогонов, чтобы убедиться, что программа соответствует ее спецификации. Если они преуспевают, у нас есть эмпирические доказательства того, что физический аналог текстовой программы действительно верен, потому что она функционирует в соответствии со спецификацией. С этой точки зрения, проверяется физический аналог; не текстовая программа.

Этот анализ показывает, что в правильности программ существует двойственность. В соответствии с двойственной природой программ, мы можем сказать, что текстовая программа подвержена математической корректности, в то время как ее физический аналог подлежит эмпирической проверке.

5. Вычислимость

Вычислительность - одна из самых старых тем, которую можно обозначить как PCS. Тем не менее, он является предметом нескольких записей SEP (например, Barker-Plummer 2004), и поэтому мы упомянем только несколько тем и их связь с остальной частью настоящей статьи.

5.1 Тезис о Церкви-Тьюринге

Одним из центральных вопросов является тезис Церкви-Тьюринга. И здесь есть два спора, один исторический и один эмпирический. Они сосредоточены на следующих двух возможных интерпретациях диссертации:

  1. Машины Тьюринга могут делать все, что может быть описано как «практическое правило» или «чисто механическое».
  2. Все, что может быть рассчитано машиной (работающей с конечными данными в соответствии с конечной программой инструкций), можно вычислить по Тьюрингу.

Интерпретация I предназначена для того, чтобы охватить понятие эффективного или механического метода в логике и математике. Он предназначен для отражения неформального понятия алгоритма, неявного в математике и выдвинутого на первый план программой Гильберта. Интерпретация II предназначена для управления физическими машинами. Действительно, (Gandy 1980) можно рассматривать как дальнейшую распаковку II. Ганди предлагает четыре принципа, которые предназначены для характеристики вычислений на физической машине. Он показывает, что такие машины в точности соответствуют характеристике Тьюринга (теорема Ганди). В связи с нашим обсуждением различных семантических парадигм ясно, что многие из машин, которые лежат в основе денотационной семантики (§3.1), не квалифицируются как машины Ганди. Они чаще всего работают с экстенсиональными пространствами функций высшего порядка,и их нельзя принимать за конечные данные и не удовлетворять условиям Ганди.

Некоторые утверждают (Copeland 2004; Copeland 2008), что тезис, предложенный Черчом и Тьюрингом, касается только интерпретации I и не устанавливает ограничения на машины в целом. Ходжес (2007) не согласен. Он утверждает, что Черч и Тьюринг не проводили различия между двумя интерпретациями. Это исторический спор.

Физический спор касается возможностей реальных машин (интерпретация II.) Многие считают само собой разумеющимся, что тезис Черча-Тьюринга характеризует и предписывает фактические физические вычисления. Например, это, кажется, неявное предположение в основной компьютерной науке. Несомненно, каждая программа, написанная на существующем реализованном языке программирования, является вычислимой по Тьюрингу и, наоборот, что все языки программирования общего назначения являются полными по Тьюрингу, т. Е. Содержат все управляющие конструкции, необходимые для моделирования универсальной машины Тьюринга.

Copeland (2007) утверждает, что характеристика Гэнди дискретного детерминированного механического устройства слишком узка, и, следовательно, существуют примеры возможных физических машин, чьи возможности выходят за пределы класса вычислимых функций Тьюринга. Многие из них требуют бесконечного ускорения, в результате чего бесконечное количество вычислений может быть физически выполнено за конечное время. Квантовые вычисления были приведены в качестве возможного примера для таких машин, но это оспаривается (Hodges 2007; Hagar 2007).

Ходжес также обеспокоен применимостью стандартной математической аргументации в физике к тем случаям, когда требуется бесконечная точность. Это говорит о том, что этот спор не простой эмпирический. Действительно, есть те, кто задается вопросом, возможно ли физически выполнить бесконечное количество задач за конечное время. Дамметт (2006) задается вопросом, является ли само понятие бесконечной задачи, которая должна выполняться в физическом царстве, не только физической невозможностью, но и концептуальной. Таким образом, спор не только эмпирический, но и лежит в основе нашего понимания взаимосвязи между нашими математическими моделями и физической реальностью.

6. Программирование и языки программирования

Разработка программ и языков программирования является одним из традиционных видов деятельности в области компьютерных наук. Их окружает множество концептуальных вопросов (§ 1), многие из которых не получили философского внимания. Здесь мы кратко рассмотрим две из этих проблем.

6.1 Абстракция

Абстракция является одним из концептуальных краеугольных камней информатики. Он является неотъемлемой частью разработки и конструирования программ и формирует основную методологию проектирования языков программирования. Действительно, это ведет к созданию новых парадигм программирования. Он лежит в основе изобретения таких понятий, как процедурная и функциональная абстракция, полиморфизм, абстракция данных, объекты и классы, шаблоны проектирования, архитектурные стили, подтипы и наследование. Многие отрасли разработки программного обеспечения (например, моделирование программного обеспечения, понимание программ, визуализация программ, обратный и реинжиниринг) в первую очередь связаны с изучением соответствующих механизмов абстрагирования программ. И значительный прогресс в разработке программного обеспечения был достигнут благодаря внедрению новых механизмов абстракции.

Но какова природа абстракции в информатике? Каково его основное философское объяснение? К сожалению, в целом сама идея абстракции философски проблематична. Согласно традиционному взгляду, который берет свое начало в философской психологии, абстракция - это умственный процесс, в котором формируются новые концепции, рассматривая несколько объектов или идей и опуская отличительные черты. (Розен 2001). Но этот подход имеет мало, если таковые имеются, современных философских защитников.

Более логичный подход к анализу абстракции, который имеет некоторую сильную пропаганду (Райт, 1983; Хейл, 1987). Но неясно, применимы ли эти идеи, разработанные для математической абстракции, к информатике. Очевидно, что некоторые понятия абстракции в информатике были либо вдохновлены, либо исследованы с помощью абстракций в математике. Но какова концептуальная связь между абстракцией в этих дисциплинах? Они принципиально разные? К сожалению, в то время как имеется много литературы по философским основам математической абстракции (см. Wright 1983; Hale 1987; Fine 2002), концептуальное исследование абстракции в информатике находится в зачаточном состоянии. Colburn (2007) предполагает, что различие между абстракцией в математике и абстракцией в информатике заключается в том факте, что в математике абстракция - это информационное пренебрежение, тогда как в информатике - это сокрытие информации. То есть абстракции в математике игнорируют то, что считается нерелевантным (например, цвет похожих треугольников). Напротив, в информатике любые детали, которые игнорируются на одном уровне абстракции (например, программисты Java не должны беспокоиться о точном расположении в памяти, связанной с конкретной переменной), не должны игнорироваться одним из более низких уровней (например, виртуальным). машина обрабатывает все выделения памяти).абстракции в математике игнорируют то, что считается нерелевантным (например, цвет подобных треугольников). Напротив, в информатике любые детали, которые игнорируются на одном уровне абстракции (например, программисты Java не должны беспокоиться о точном расположении в памяти, связанной с конкретной переменной), не должны игнорироваться одним из более низких уровней (например, виртуальным). машина обрабатывает все выделения памяти).абстракции в математике игнорируют то, что считается нерелевантным (например, цвет подобных треугольников). Напротив, в информатике любые детали, которые игнорируются на одном уровне абстракции (например, программисты Java не должны беспокоиться о точном расположении в памяти, связанной с конкретной переменной), не должны игнорироваться одним из более низких уровней (например, виртуальным). машина обрабатывает все выделения памяти).

Но основано ли это на слишком упрощенном понятии абстракции в математике? Есть только один вид понятия? Например, информация, скрываемая в анализе Бишопа (Bishop 1970), весьма отличается от понятия Райта об абстракции - на самом деле, очень похожа на концепцию информатики.

6.2 Типы и Онтология

Языки программирования в основном являются типизированными языками, где современное представление о типе происходит от Фреге и Рассела, в частности от простой теории типов Рассела (Irvine 2003). Конечно, Рассел был мотивирован логическими и семантическими парадоксами, и эта особенность не является центральной для применения типов в информатике. С другой стороны, для расселевских типов разделить вселенную дискурса способами, которые имеют как грамматическое, так и семантическое значение. И эта идея перенесена в информатику. Действительно, теории типов были вдохновлены и обогащены информатикой. Например, теория типов Рассела, хотя и математически мощная, несколько беднее своей выразительной силой по сравнению с теориями типов современных компьютерных языков (Coquand 2006; Pierce 2002). Помимо целого ряда базовых типов, таких как числа и логические значения, языки программирования содержат коллекцию конструкторов типов (способы создания новых типов из старых). Например, они включают в себя способность формировать некоторый декартово произведение и конечные множества. Во многих объектно-ориентированных языках программирования типы (классы) могут импортировать (и переопределять) операции из других типов и предлагать более сложные конструкторы, которые поддерживают формирование абстрактных типов данных и различные формы полиморфизма. Типы (классы) могут импортировать (и переопределять) операции из других типов и предлагать более сложные конструкторы, которые поддерживают формирование абстрактных типов данных и различные формы полиморфизма. Типы (классы) могут импортировать (и переопределять) операции из других типов и предлагать более сложные конструкторы, которые поддерживают формирование абстрактных типов данных и различные формы полиморфизма.

В информатике типы играют роль, которая находится на полпути между синтаксисом и семантикой. Во-первых, они расширяют наше обычное понятие контекстно-свободной грамматики. Некоторые функции языка, особенно те, которые позволяют типу переменной быть зафиксированным контекстом (т. Е. Объявления языка), требуют более гибкой формы грамматики, чем стандартная. Так называемые двухуровневые грамматики, хотя технически адекватны, не отражают способ, которым переменные присваивают свои типы в современных языках. И они очень неуклюжи в использовании. Они также не легко приспосабливаются к системам полиморфного типа многих языков. Современные системы типов работают лучше: переменным присваиваются их типы через объявления, например, x: Boolean. Впоследствии компилятор может проверить программу, например:это может гарантировать, что появление переменной в последующих выражениях (например, х

Но типы также играют роль корректности, которая обычно не описывается в синтаксических терминах. Это достигается путем расширения традиционного физического понятия размерного анализа на гораздо более богатую систему типов. Получение правильной структуры типов для программы может обеспечить ее правильность. И это определяется структурой, которую типы навязывают языку. Типы фиксируют то, что есть в языке программирования. Так, например, любой язык программирования, который допускает числа, продукты и классы, и ничего больше, налагает концептуальную структуру на программиста, с которым она должна работать. Проблемы должны быть четко сформулированы, и решения должны быть найдены в средствах представления, предоставляемых системой типов. Как только структура типов языка программирования была установлена, большая часть его онтологической установки была исправлена.

Или есть? Возможно, нам нужно сделать шаг назад и сначала спросить, как онтологические обязательства языка должны быть определены. Это семантика, которая определяет вещи (Turner & Eden 2007)? Долгая традиция, которая исходит от Фреге, предполагает это (Dummett 1991). Предполагая, что аналогия с естественными языками является законной, онтология языка определяется структурами, необходимыми для предоставления его семантических областей. Но какую семантическую теорию мы должны принять? В то время как любая семантика должна принимать во внимание типы, семантически определенная онтология будет выходить за их пределы и отражать соответствующие семантические области, и они будут отражать детали реализации, включенные в семантику. На этом основании, как и в случае равенства, разные семантические интерпретации определяют разные онтологии. Отсюда следует, что не имеет смысла говорить об онтологии языка программирования, но о множественных онтологиях, которые зависят от уровня абстракции в семантике. Например, онтология также может быть частично определена парадигмой программирования.

7. Правовые и этические вопросы

Некоторые вопросы компьютерной этики принадлежат PCS в том смысле, что деятельность по созданию и использованию программного обеспечения поднимает этические вопросы. Тем не менее, многие не являются специфическими для компьютерных наук в узком смысле этой записи; они затрагивают все информационные технологии и компьютерные приложения (Bynum 2001). Следовательно, мы упомянем только два, которые кажутся центральными для информатики.

7.1 Авторские права, патенты и личность

Авторские права обеспечивают некоторую защиту программного обеспечения, но они не могут защитить его семантическое ядро. И мы полагаем, что последнее должно определяться семантическим изложением (§3) языка программирования, на котором написана программа. Предположительно, суть этого вопроса касается проблемы идентичности программы (§3.3). Но если существует много возможных семантических понятий идентичности, какое из них подходит для юридического применения?

Одно неформальное семантическое описание, которое часто упоминается в законе, отождествляет программу с выраженными в ней идеями, чаще всего принимаемыми за ее основной алгоритм. Но не только часто трудно сказать точно, что это за алгоритм, но также, как и в случае с математическими теоремами, алгоритмы не могут быть защищены авторским правом. И та же участь ожидает любой формальный семантический отчет, поскольку любой такой будет определяться неким математическим понятием, будь то алгоритмы или какое-то понятие операции или математической функции.

Но даже если бы мы могли найти семантическую учетную запись, которая прошла бы проверку законами об авторском праве, правовая картина не была бы полной. Нарушение авторских прав часто зависит не только от какой-то личности, но и от того, можно ли предположить, что кто-то придумает ту же самую программу. Так что намеренные соображения входят в рамки. Другими словами, даже если две программы считаются эквивалентными согласно нашему семантическому критерию, если можно было бы считать правдоподобным, что они были созданы независимо, нарушения авторских прав не было бы.

Патенты (в частности, патенты на коммунальные услуги) стоят не лучше. Их еще сложнее найти для программного обеспечения, поскольку нельзя запатентовать мыслительные процессы, абстрактные идеи и алгоритмы. И именно алгоритмы, а не исходный код, часто содержат новые идеи. Но еще раз, это проблемы идентификации и идентичности, которые являются главной философской проблемой. И это включает как семантические, так и намеренные соображения.

7.2 Правильность и ответственность

Правильно ли, что программное обеспечение продается с небольшой гарантией пригодности для использования? (Coleman 2008) посвящен этому вопросу. Это особенно актуальный вопрос для критически важных для безопасности систем, например систем, которые контролируют состояние здоровья, эксплуатируют атомные электростанции и связываются с космическими челноками. Здесь проведение более тщательного тестирования и доказательств правильности может показаться необходимым. Но с этической точки зрения, отличается ли случай программиста, который не в состоянии анализировать и тестировать свою программу, от программы инженера-строителя, который не может выполнить необходимое математическое моделирование и испытания конструкции здания? Моральные обязательства кажутся похожими.

Один из способов их различения относится к сложности программного обеспечения (Brooks 1987), которая на порядок превышает сложность любого другого вида человеческого артефакта. Многие утверждают, что невозможно предложить какую-либо такую гарантию правильности (DeMillo et al. 1979); Программное обеспечение настолько сложное, что процесс строгого математического доказательства и тестирования программного обеспечения невозможен. И, по-видимому, у человека может быть только (моральное или юридическое) обязательство осуществлять осуществимый процесс.

Но как сбалансировать аспекты разработки и тестирования программного обеспечения с предполагаемым использованием программного обеспечения? Должно ли программное обеспечение, разработанное для развлечений, подвергаться такой же строгой проверке и тестированию, что и программное обеспечение, критически важное для безопасности? Предположительно нет, но мы все еще можем задаться вопросом, являются ли эти новые этические проблемы или они просто дают нам дальнейшие тематические исследования существующих этических дилемм? Например, даже глюки безопасности в программном обеспечении, используемом в индустрии развлечений, могут нести финансовые штрафы.

8. Новые повороты или новые проблемы?

Даже этот довольно краткий обзор ПК Следует убедить читателя в том, что информатика ставит интересные и сложные философские вопросы. Действительно, одним из главных впечатлений является то, что он имеет существенные связи с большинством традиционных отраслей философии. Есть четкие связи с онтологией, этикой, эпистемологией и философией математики, физики и языка. Действительно, наш первоначальный список вопросов поднимает еще много тем, связанных с другими областями философии. В частности, имеется значительная литература по приложениям информатики. Искусственный интеллект и когнитивная наука порождают философские вопросы, которые принадлежат философии сознания (McLaughlin 2004). Конечно, большая часть этого исходит из Тьюринга (1950). Другие применения информатики в традиционных областях науки, так называемой вычислительной науке,создавать проблемы для философии науки: каково эпистемологическое воздействие компьютерного моделирования, особенно там, где это единственная жизнеспособная форма экспериментов? Вычислительный поворот в онтологии привносит новые методы в структуру любой концептуальной онтологии. Философия логики обогащается массой материала: появилось большое количество новых логических систем для целей представления и рассуждения о вычислительных системах.появилось большое количество новых логических систем с целью представления и рассуждения о вычислительных системах.появилось большое количество новых логических систем с целью представления и рассуждения о вычислительных системах.

Хотя очевидно, что информатика поднимает много существенных поворотов к традиционным философским проблемам, менее ясно то, порождает ли она какие-либо действительно новые философские проблемы: существуют ли в PCS вопросы, не имеющие аналогов в какой-либо другой области философии?

Библиография

  • Эллисон А., Курралл Дж., Мосс М. и Стюарт С., 2005 г., «Цифровая идентификация имеет значение», Журнал Американского общества информационных наук и технологий 56 (4): 364–372.
  • Arkoudas, K. и Bringsjord, S., 2007, «Компьютеры, обоснование и математическое знание», Minds and Machines 17 (2): 185–202.
  • Барендрегт, HP, 1993, «Лямбда-исчисления с типами», в: Справочник по логике в информатике, Vol. 2, Нью-Йорк, Нью-Йорк: Oxford University Press Inc.
  • Баркер-Пламмер, Д., 2008, «Машины Тьюринга», Стэнфордская энциклопедия философии (издание осень 2008), Эдвард Залта (ред.), URL = ,
  • Епископ, Эрретт, 1977, Основы конструктивного анализа, McGraw-Hill.
  • Бласс, Андреас и Гуревич, Юрий, 2003, «Алгоритмы: поиск абсолютных определений», Бюллетень Европейской ассоциации теоретической информатики (EATCS) №81: 195-225.
  • Боуэн, Дж. П. и Хинчи, М. Г., 1995, «Десять заповедей формальных методов», IEEE Computer 28 (4): 56–63.
  • Боуэн, Дж. П. и Хинчи, М. Г., 2005, «Десять заповедей формальных методов: десять лет спустя», IEEE Computer 39 (1): 40–48.
  • Брукс, Ф. П., 1987, «Нет серебряной пули: сущность и аварии разработки программного обеспечения», IEEE Computer 20 (4): 10-19.
  • Burge, T., 1998, «Компьютерное доказательство, априорные знания и другие умы», Philosophical Perspectives 12: 1–37.
  • Bynum, T., 2001, «Компьютерная этика: основные понятия и исторический обзор», Стэнфордская энциклопедия философии (издание 2001 года), Эдвард Залта (ред.), URL =
  • Colburn, T., 2004, «Методология информатики», Руководство Блэкуэлла по философии вычислений и информации, Лучано Флориди (ред.), Malden: Blackwell, стр. 318–326.
  • Колберн Т. и Шут Г., 2007, «Абстракция в информатике», Minds and Machines 17 (2): 169–184.
  • Коулман, К. Г., 2008, «Компьютеры и моральная ответственность», Стэнфордская энциклопедия философии (издание 2008 года), Эдвард Н. Залта (ред.), URL = ,
  • Коупленд, Б. Джек, 2008, «Тезис Церковного Тьюринга», Стэнфордская энциклопедия философии (издание 2008 года), Эдвард Залта (ред.), URL = ,
  • Коупленд, Б. Джек, 2004 год, «Вычисления», Руководство Блэквелла по философии вычислений и информации, Лучано Флориди (ред.), Малден: Блэквелл, стр. 3–17.
  • Coquand, Thierry, 2006, «Теория типов», Стэнфордская энциклопедия философии (издание 2006 года), Эдвард Залта (ред.), URL = ,
  • Де Милло, Р. А., Липтон, Р. Дж. И Перлис, А. Дж., 1979, «Социальные процессы и доказательства теорем и программ», Сообщения ACM 22 (5): 271–280.
  • Деннинг, PJ, 1980, «О народных теоремах и народных мифах», Сообщения ACM 23 (9): 493–494.
  • Деннинг, PJ, 1980b, «Что такое экспериментальная информатика?» Сообщения ACM 23 (10): 534–544.
  • Деннинг, PJ, 1981, «Анализ производительности: экспериментальная компьютерная наука как ее лучшая», Communications of ACM 24 (11): 725–727.
  • Деннинг, PJ, 1985, «Наука вычислительной техники: что такое информатика?» Американский ученый 73 (1): 16–19.
  • Деннинг, PJ (ред.) И др., 1989, «Вычисления как дисциплина», Сообщения ACM 32 (1): 9–23.
  • Дейкстра, Э., 1968. «Перейти к заявлению, которое считается вредным», Сообщения ACM 11 (3): 147–148.
  • Дамметт, М., 1991, «Логические основы метафизики», издательство Гарвардского университета.
  • Даммет, М., 2006, «Мысль и реальность», издательство Оксфордского университета.
  • Иден, Амнон, 2007, «Три парадигмы в информатике», Minds and Machines 17 (2): 135–167.
  • Феферман, С., 1992, «Логика завершения и корректности функциональных программ», Логика для информатики: 95–127, MSRI Pubs. том 21, Нью-Йорк, Нью-Йорк: Springer-Verlag.
  • Фетцер, JH, 1988, «Подтверждение программы: сама идея», сообщения ACM 31 (9): 1048–1063.
  • Фетцер, JH, 1999, «Роль моделей в информатике», Монист 82 (1): 20–36.
  • Fine, K., 2008, «Границы абстракции». Оксфорд: издательство Оксфордского университета.
  • Floridi, Luciano, 2004. «Информация», Руководство Блэквелла по философии вычислений и информации, Luciano Floridi (ed.), Malden: Blackwell, pp. 40–62.
  • Floridi, Luciano 2007, «Семантические концепции информации», Стэнфордская энциклопедия философии (издание 2007 года), Эдвард Залта (ред.), URL = ,
  • Форрест, П., 2006, «Идентичность неразличимых», Стэнфордская энциклопедия философии (издание осень 2008 г.), Эдвард Залта (ред.), Готовится к публикации URL =. >.
  • Fuchs, NE, 1992, «Спецификации (предпочтительно) исполняемые». Software Engineering Journal 7 (5): 323–334.
  • Ганди Р., 1980, «Тезисы и принципы Церкви», Симпозиум Клин, Барвей, Дж., Кейслер, Х. Дж. И Кунен, К. (ред.), Амстердам: Северная Голландия.
  • Агарь, Амит, 2007, «Квантовые алгоритмы: философские уроки», Minds and Machines 17 (2): 233–247.
  • Хейл, Б. и Райт, C., 2001, «Правильное изучение разума: очерки к нео-Фрегеанской философии математики», Оксфордские стипендии на линии, Оксфорд: издательство Оксфордского университета.
  • Хартманис, J., 1993, «Некоторые наблюдения о природе информатики», Конспект лекций в области информатики 761, Шьямасундар, РК (ред.): 1–12.
  • Хартманис, J., 1994, «Лекция премии Тьюринга: О вычислительной сложности и природе компьютерных наук», Сообщения ACM 37 (10): 37–43.
  • Hoare, CAR, 1969, «Аксиоматическая основа компьютерного программирования». Сообщения ACM 12 (10): 576–585. [Перепечатка доступна онлайн]
  • Ходжес, А., 2006, «Был ли у Черча и Тьюринга тезис о машинах?», Тезис Черча через 70 лет Ольшевский, Адам (ред.)
  • Ходжес, А., 2007, «Могут ли квантовые вычисления решить классически неразрешимые проблемы?»
  • Хорстен, Л., 2008, «Философия математики», Стэнфордская энциклопедия философии (издание 2008 года), Эдвард Залта (ред.), URL = ,
  • Иммерман, Н., 2006, «Вычислимость и сложность», Стэнфордская энциклопедия философии (издание осень 2006 г.), Эдвард Залта (ред.), URL = ,
  • Ирвин, AD, 2003, «Парадокс Рассела», Стэнфордская энциклопедия философии (издание 2006 года), Эдвард Залта (ред.), URL =
  • Jones, CB и Hayes, IJ, 1990, «Спецификации не являются (обязательно) вредными», Software Engineering Journal 4 (6): 330–339.
  • Кришнамурти, С., 2003. Языки программирования: применение и интерпретация,
  • Крейзель Г., Ганди Р. О., 1975, «Некоторые причины обобщения теории рекурсии». Журнал символической логики 40 (2): 230–232.
  • Крипке, С., 1982, Витгенштейн по правилам и частному языку. Издательство Гарвардского университета.
  • Кун, Т. С., 1970, Структура научных революций, 2-й. изд., Чикаго: Univ. Чикаго Пресс.
  • Ландин П. Дж., 1964, «Механическая оценка выражений», Компьютерный журнал 6 (4): 308–320.
  • Милн, Р. и Стрейчи, C., 1977, Теория семантики языка программирования, Нью-Йорк, Нью-Йорк: Halsted Press.
  • Маклафлин, Б., 2004, «Вычислительность, коннекционизм и философия разума», «Руководство Блэкуэлла по философии вычислений и информации», Floridi, Luciano (ed.) Malden: Blackwell, pp. 135–152.
  • Минский М., 1970, «Лекция Тьюринга ACM: форма и содержание в информатике», Журнал Ассоциации вычислительной техники 17 (2): 197–215.
  • Мур, JH, 1978, «Три мифа компьютерных наук», Британский журнал по философии науки 29 (3): 213–222.
  • Moschovakis, YN, 1998, «Об основах теории алгоритмов», Правда в математике Дейлс, Гарольд Г. и Оливери, Джанлуиджи (ред.), Оксфорд: издательство Оксфордского университета.
  • Пирс, Бенджамин С., 2002, Типы и языки программирования, Кембридж, Массачусетс: MIT Press.
  • Плоткин Г. Д., 1981, «Структурный подход к операционной семантике», техн. Респ. DAIMI FN-19, факультет компьютерных наук, Орхусский университет, Орхус, Дания.
  • Rapaport, WJ, 2005a, «Философия информатики: вводный курс», Teaching Philosophy 28 (4): 319–341.
  • Rapaport, WJ, 2005b, «Реализация - это семантическая интерпретация: дальнейшие мысли». Журнал экспериментального и теоретического искусственного интеллекта 17 (4): 385–417.
  • Розен, Гидеон, 2001. «Абстрактные объекты», Стэнфордская энциклопедия философии (издание 2001 года), Эдвард Н. Залта (ред.), URL = ,
  • Шапиро, С., 1997, Философия математики: структура и онтология, Оксфорд: издательство Оксфордского университета.
  • Зиг, Уилфрид, 2008, «Церковь без догмы: аксиомы вычислимости», Новые вычислительные парадигмы, Лоу Б., Сорби А. и Купер Б. (ред.), Спрингер-Верлаг, 139–152.
  • Смит, BC, 1996, «Пределы правильности в компьютерах», Компьютеризация и противоречие, Клинг, Р. (ред.), Морган Кауфман, стр. 810–825.
  • Сабо, З. Г., 2007, «Композиционность», Стэнфордская энциклопедия философии (издание 2007 года), Эдвард Залта (ред.), URL = ,
  • Томасон Р., 2005, «Логика и искусственный интеллект», Стэнфордская энциклопедия философии (издание 2005 года), Эдвард Залта (ред.), URL = ,
  • Turner, Raymond and Eden, Amnon H., 2007, «На пути к онтологии языка программирования», «Вычисления, информация, познание - связь и лиминал», Додиг-Црнкович, Гордана и Стюарт, Сьюзан (ред.), Кембридж, Великобритания: Кембридж Scholars Press, стр. 147–159.
  • Тернер, Раймонд, 2005, «Основы спецификации», Журнал логических вычислений 15: 623–662.
  • Тернер, Раймонд, 2007, «Понимание языков программирования». Умы и машины 17 (2): 129-133
  • Тимочко Т., 1979, «Четырехцветная проблема и ее философское значение», Philosophy Journal 76 (2): 57–83.
  • Уайт, Г., 2004, «Философия компьютерных языков», Руководство Блэквелла по философии вычислений и информации, Флориди, Лучано (ред.), Малден: Блэквелл, с. 318–326.
  • Wing, JM, 2006, «Вычислительное мышление», Communications of ACM, 49 (3): 33–35.
  • Витгенштейн Л., 1953. Философские исследования. Blackwell Publishing.
  • Райт, Криспин, 1983, Концепция чисел Фреге как объектов, Университетское издательство Абердина.

Другие интернет-ресурсы

  • Философия информатики, в университете Эссекса
  • Международная ассоциация компьютерных и философских наук

Рекомендуем: