Математика и логика

Логика как наука — пред­мет почти такой же древ­ний, как и матема­тика. В антич­ное время и сред­ние века она была состав­ной частью три­ви­ума (грамма­тика, рито­рика, логика/диа­лек­тика) — базо­вого уровня обра­зо­ва­ния; матема­ти­че­ские же пред­меты (арифме­тика, геомет­рия, аст­ро­номия и музыка) состав­ляли сле­дующий, более про­дви­ну­тый, уро­вень, назы­ва­емый квад­ри­виум. (От слова «три­виум» про­ис­хо­дит одно из любимых матема­ти­ками выраже­ний «три­ви­ально».) Пред­меты три­ви­ума понима­лись как науки о том, как пра­вильно, без оши­бок, писать, гово­рить и, соот­вет­ственно, рас­суж­дать.

Мы рас­скажем о том, как и почему воз­никла матема­ти­че­ская логика, что она изу­чает, какие у неё есть достиже­ния и современ­ные при­ме­не­ния.

От Ари­сто­теля к Булю. Основы уче­ния о пра­виль­ных рас­суж­де­ниях заложил Ари­сто­тель. Он заме­тил, что кор­рект­ные умо­за­клю­че­ния сле­дуют опре­де­лён­ным элемен­тар­ным схемам, назы­ва­емым сил­логизмами, и пере­чис­лил ряд таких схем. (Клас­си­че­ский при­мер сил­логизма: «Все люди смертны. Сократ — чело­век. Сле­до­ва­тельно, Сократ смер­тен».) Уче­ние о сил­логизмах в свою оче­редь опи­ра­лось на глу­бо­кий ана­лиз поня­тий и их соеди­не­ния в выска­зы­ва­ния.

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

Воз­ник­но­ве­ние матема­ти­че­ской логики пол­но­стью изме­нило пред­став­ле­ния учё­ных как о мето­дах иссле­до­ва­ния логики, так и о том, что состав­ляет сам пред­мет её изу­че­ния. В наше время заяв­ле­ния, что логика есть наука о пра­виль­ных рас­суж­де­ниях, кажутся настолько же спра­вед­ли­выми, насколько утвер­жде­ние «матема­тика — это наука о пра­виль­ных вычис­ле­ниях».

Ана­логия между рас­суж­де­ни­ями и вычис­ле­ни­ями несколько глубже, чем кажется на пер­вый взгляд. Воз­ник­но­ве­ние логики как матема­ти­че­ской науки было свя­зано с рабо­тами бри­тан­ских учё­ных Джор­джа Буля и Авгу­ста де Моргана, кото­рые обна­ружили, что с логи­че­скими выска­зы­ва­ни­ями можно опе­ри­ро­вать как с алгеб­ра­и­че­скими выраже­ни­ями. Напри­мер, если сложе­ние читать как логи­че­скую связку «или», умноже­ние как «и», а равен­ство как «рав­но­сильно», то для любых выска­зы­ва­ний $a$, $b$ выпол­няются законы $$ a+b=b+a,\quad a\cdot(b+c)=a\cdot b+a\cdot c, $$

как и многие другие при­выч­ные нам законы арифме­тики. Но, помимо этого, в алгебре выска­зы­ва­ний выпол­ня­ется и кое-что непри­выч­ное, напри­мер все­гда $$ a+a=a\quad \hbox{и}\quad a+(b\cdot c)=(a+b)\cdot (a+c). $$

Такой взгляд на логику выска­зы­ва­ний и сил­логи­стику ока­зался и неожи­дан­ным, и пло­до­твор­ным. В наше время эту точку зре­ния раз­ра­ба­ты­вает область, назы­ва­емая алгеб­ра­и­че­ской логи­кой, а одним из её цен­траль­ных поня­тий явля­ется поня­тие буле­вой алгебры, назван­ной так в честь её пер­во­от­кры­ва­теля. Эта область иссле­до­ва­ний, через поня­тие реляци­он­ной алгебры, обобщающей булеву, при­вела в 1960‐х годах к тео­рии реляци­он­ных баз дан­ных, в наше время лежащей в основе самых рас­про­стра­нён­ных язы­ков запро­сов, таких как SQL.

Матема­ти­за­ция логики и акси­о­ма­ти­за­ция матема­тики. Движущей при­чи­ной процесса матема­ти­за­ции логики был назревший в самой матема­тике на рубеже XIX—XX веков кри­зис осно­ва­ний. С одной сто­роны, во вто­рой поло­вине XIX века в матема­тике полу­чил рас­про­стра­не­ние удоб­ный язык тео­рии множеств, создан­ной Георгом Кан­то­ром. Матема­тики стали уве­ренно исполь­зо­вать в своих рас­суж­де­ниях кон­струкции с бес­ко­неч­ными множе­ствами. Матема­тика, вооружён­ная тео­рией множеств, шла от успеха к успеху.

С дру­гой сто­роны, в самой тео­рии множеств Кан­тора обна­ружи­лись пара­доксы, кото­рые ука­зы­вали на то, что с этой тео­рией не всё в порядке на самом базо­вом уровне. Про­стейший пара­докс такого рода, в фольк­лор­ном вари­анте извест­ный как пара­докс бра­до­брея, был при­думан Бер­тра­ном Рас­се­лом: рас­смот­рим множе­ство $R$ всех тех множеств, кото­рые не содержат сами себя в каче­стве элемента. Тогда $R\in R$ если и только если $R\notin R$, про­ти­во­ре­чие.

Такое положе­ние дел заста­вило многих выдающихся матема­ти­ков и фило­софов той эпохи (Пеано, Фреге, Рас­сел, Гиль­берт, Пуан­каре, Брауэр, Вейль и др.) задуматься об осно­ва­ниях матема­тики. Их вол­но­вали такие фун­дамен­таль­ные вопросы как:

  • Что озна­чает дока­зать матема­ти­че­скую тео­рему? Какие сред­ства при этом законно исполь­зо­вать?
  • Что зна­чит выра­зить то или иное матема­ти­че­ское поня­тие или утвер­жде­ние на том или ином языке?
  • Когда мы гово­рим об истин­но­сти и о дока­зу­емо­сти какого-либо матема­ти­че­ского утвер­жде­ния, име­ется ли в виду одно и то же?

Парал­лельно в матема­тике стали уко­ре­няться новые стан­дарты строго­сти. Основ­ные обла­сти матема­тики — ана­лиз, алгебра, геомет­рия — были постав­лены на акси­о­ма­ти­че­скую основу. Вели­кий матема­тик Давид Гиль­берт (1862—1943) был ярким сто­рон­ни­ком и про­паган­ди­стом акси­о­ма­ти­че­ского метода. Под его вли­я­нием была постро­ена и общепри­ня­тая в наше время система аксиом тео­рии множеств, сво­бод­ная от оче­вид­ных пара­док­сов. Эту акси­о­ма­тику пред­ложил в 1908 году Э. Цермело и в даль­нейшем допол­нили Дж. фон Нейман и А. Френ­кель. Но где же насто­ящая гаран­тия, что полу­чен­ная система не содержит про­ти­во­ре­чия? Каким обра­зом это можно уста­но­вить?

Эти вопросы ока­за­лись гораздо слож­нее, чем пред­став­ля­лось тогда Гиль­берту. Они потре­бо­вали глу­бо­кого изу­че­ния акси­о­ма­ти­че­ских систем и их форма­ли­за­ции, при­вели к точ­ному ана­лизу струк­туры матема­ти­че­ского выска­зы­ва­ния, пер­вым форму­ли­ров­кам строгих матема­ти­че­ских моде­лей таких явле­ний, как дока­зу­емость, выра­зимость, истин­ность, и сде­лали возмож­ным их изу­че­ние матема­ти­че­скими мето­дами. Так воз­никла матема­ти­че­ская логика — осо­бая область иссле­до­ва­ний внутри матема­тики. В рам­ках этой дис­ци­плины был создан точ­ный язык и матема­ти­че­ский аппа­рат для иссле­до­ва­ния целого пла­ста явле­ний, ранее отно­сившихся к чисто гума­ни­тар­ному зна­нию. (В этой роли матема­ти­че­скую логику можно срав­нить с такой обла­стью современ­ной матема­тики, как тео­рия веро­ят­но­стей, кото­рая ещё в начале XX века не была строго матема­ти­че­ской дис­ци­пли­ной.)

Формаль­ные языки. С современ­ной точки зре­ния область инте­ре­сов матема­ти­че­ской логики зна­чи­тельно шире, чем наука о пра­виль­ных рас­суж­де­ниях; её можно при­бли­зи­тельно опи­сать, с ого­вор­ками и уточ­не­ни­ями, как постро­е­ние и иссле­до­ва­ние формаль­ных язы­ков и систем матема­ти­че­скими мето­дами. Заме­тим, что если в этом опре­де­ле­нии отбро­сить слово «формаль­ных», то вме­сто логики мы полу­чим, по суще­ству, матема­ти­че­скую линг­ви­стику — что ука­зы­вает на опре­де­лён­ное род­ство между этими двумя дис­ци­пли­нами. Клю­че­вое же отли­чие матема­ти­че­ской логики от логики в широ­ком смысле слова — это именно исполь­зо­ва­ние матема­ти­че­ских мето­дов, при­ме­ня­емых к точ­ным формаль­ным моде­лям.

Матема­ти­че­ская логика по пред­мету сво­ему
есть логика, а по методу — матема­тика.

(П. С. Порец­кий, 1884 год, Казань.)

Формаль­ные и есте­ствен­ные языки имеют общие черты: у тех и у других есть син­так­сис (то, как мы гово­рим или пишем), семан­тика (смысл того, что напи­сано) и праг­ма­тика (то, как исполь­зу­ется напи­сан­ное). Основ­ное отли­чие заклю­ча­ется в том, что — по край­ней мере в иде­але — син­так­сис и семан­тика формаль­ных язы­ков могут быть опре­де­лены на уровне матема­ти­че­ской строго­сти и поэтому в принципе под­даются ана­лизу чисто матема­ти­че­скими мето­дами.

В наше время формаль­ные языки встре­чаются в каж­дом доступ­ном нам элек­трон­ном устройстве, вроде мобиль­ного теле­фона, а неко­то­рые из них — языки программи­ро­ва­ния — даже изу­чают в школе. Поэтому за при­ме­рами далеко ходить не надо. Однако в сере­дине XIX века, когда начался процесс матема­ти­за­ции логики, формаль­ных язы­ков ещё не было, их только пред­сто­яло создать.

Логика пре­ди­ка­тов. Раз­ра­бот­чики пер­вых формаль­ных язы­ков и систем, как пра­вило, не думали о том, что эти системы могут быть реально исполь­зо­ваны в вычис­ли­тель­ных устройствах. (Исклю­че­нием, видимо, можно счи­тать вели­кого учё­ного Готф­рида Вильгельма Лейб­ница (1646—1716), кото­рый почти за два века до Буля пред­вос­хи­тил многие идеи матема­ти­че­ской логики, вклю­чая идею форма­ли­за­ции языка матема­тики, и даже построил меха­ни­че­ский арифмо­метр.)

Пер­вые формаль­ные языки и системы воз­никли как результат выде­ле­ния фраг­мента есте­ствен­ного языка, доста­точ­ного для пере­дачи форму­ли­ро­вок матема­ти­че­ских утвер­жде­ний и их ана­лиза. Процесс выра­ботки основ­ных катего­рий этого языка был про­должи­тель­ным и шёл парал­лельно с выра­бот­кой неко­то­рых ставших в наше время стан­дарт­ными матема­ти­че­ских обо­зна­че­ний. (Одним из важ­ных поня­тий, вве­дён­ных в это время, стало поня­тие кван­тора, сформи­ро­вавше­еся в рабо­тах Г. Фреге и Ч. Пирса. Кван­торы суще­ство­ва­ния $\exists$ и все­общ­но­сти $\forall$ заме­няют язы­ко­вые кон­струкции «для неко­то­рого» и «для всех». Пер­вое из этих обо­зна­че­ний вве­дено Дж. Пеано в 1897 году, вто­рое — по ана­логии — Г. Генце­ном в 1935 году, однако обще­упо­тре­би­тель­ными эти обо­зна­че­ния стали лишь под вли­я­нием Бур­баки во вто­рой поло­вине XX века.) Этот процесс в основ­ном завершился в 1920‐х годах, когда в каче­стве стан­дарт­ного класса язы­ков, пред­на­зна­чен­ных для форма­ли­за­ции и ана­лиза матема­ти­че­ских утвер­жде­ний, стал рас­смат­ри­ваться язык логики пре­ди­ка­тов (пер­вого порядка).

Пре­ди­ка­том на множе­стве $M$ мы назы­ваем выска­зы­ва­ние, зави­сящее от $n$ парамет­ров из этого множе­ства (напри­мер, «нату­раль­ное число $x$ чётно», «точки $x$, $y$ и $z$ плос­ко­сти лежат на одной прямой»). Как только фик­си­ро­ваны зна­че­ния парамет­ров, пре­ди­кат при­нимает логи­че­ское зна­че­ние ложь или истина. Таким обра­зом, с формаль­ной точки зре­ния пре­ди­кат пред­став­ляет собой функцию от $n$ аргумен­тов из множе­ства $M$ в $\{0,1\}$.

Не вда­ва­ясь в тех­ни­че­ские подроб­но­сти, можно при­бли­зи­тельно опи­сать выска­зы­ва­ния логики пре­ди­ка­тов как такие, кото­рые можно сформу­ли­ро­вать (предпо­лагая зара­нее задан­ными обо­зна­че­ния неко­то­рых базо­вых пре­ди­ка­тов) с помощью кон­струкций $\land$ «и», $\lor$ «или», $\neg$ «не», → «вле­чёт» и уже упомя­ну­тых кван­то­ров. Напри­мер, текст $\forall{x} \exists{y} (y>x \land P(y))$ выражает неогра­ни­чен­ность множе­ства про­стых чисел, если дого­во­риться, что перемен­ные про­бегают множе­ство нату­раль­ных чисел, «$>$» озна­чает «больше», а $P(y)$ выражает про­стоту числа $y$. Эти дого­во­рён­но­сти состав­ляют часть того, что мы назвали семан­ти­кой языка логики пре­ди­ка­тов.

Уди­ви­тель­ный факт, под­твер­жда­емый всей суще­ствующей матема­ти­че­ской прак­ти­кой, состоит в том, что выра­зи­тель­ных средств языка логики пре­ди­ка­тов — на пер­вый взгляд очень скром­ных — доста­точно для форму­ли­ровки любых извест­ных матема­ти­че­ских результа­тов. При этом может быть исполь­зо­вано всего лишь одно базо­вое поня­тие — пре­ди­кат при­над­леж­но­сти $x\in y$ «множе­ство $x$ есть элемент множе­ства $y$». (В кар­тине мира акси­о­ма­ти­че­ской тео­рии множеств все объекты, обо­зна­ча­емые перемен­ными, являются множе­ствами.)

Дока­зу­емость и вычис­лимость. Выра­зить в дан­ном языке то или иное осмыс­лен­ное утвер­жде­ние — совсем не то же самое, что суметь его дока­зать. Сле­дующий уро­вень языка логики пре­ди­ка­тов состоит в опи­са­нии таких тек­стов, кото­рые сле­дует при­знать кор­рект­ными дока­за­тельствами. Тра­дици­онно этот уро­вень назы­ва­ется в матема­ти­че­ской логике исчис­ле­нием пре­ди­ка­тов. Формаль­ное дока­за­тельство (в формате, кото­рый при­нято назы­вать гиль­бер­тов­ским, но кото­рый суще­ство­вал и до работ Давида Гиль­берта) пред­став­ляет собой конеч­ную цепочку выска­зы­ва­ний логики пре­ди­ка­тов, каж­дое из кото­рых либо явля­ется акси­омой, либо полу­ча­ется из пред­ше­ствующих выска­зы­ва­ний по одному из посту­ли­ру­емых пра­вил. Минималь­ный стан­дарт­ный набор таких пра­вил содержит лишь два: пра­вило, поз­во­ляющее из выска­зы­ва­ний $A$ и $A \to B$ выве­сти $B$, и пра­вило, поз­во­ляющее из выска­зы­ва­ния $A$ выве­сти $\forall x A$. (Если выска­зы­ва­ние $A$ содержит параметр $x$, то формаль­ное дока­за­тельство $A$ обос­но­вы­вает его истин­ность при всех возмож­ных зна­че­ниях параметра.)

Таким обра­зом, матема­ти­че­ская дока­зу­емость опи­сы­ва­ется двумя формаль­ными язы­ками — языком утвер­жде­ний, опи­сан­ным в преды­дущем раз­деле, и языком дока­за­тельств — из кото­рых вто­рой явля­ется над­стройкой над пер­вым.

Похожая ситу­ация имеет место и с поня­тием вычис­лимо­сти. Языки программи­ро­ва­ния пред­на­зна­чены для опи­са­ния алго­ритмов. Алго­ритм при этом опи­сы­ва­ется программой — постро­ен­ным по опре­де­лён­ным пра­ви­лам формаль­ным тек­стом, кото­рый при­нято назы­вать кодом. Таким обра­зом, пер­вый уро­вень языка программи­ро­ва­ния состав­ляет язык тек­стов программ. Однако, процесс выпол­не­ния программы на дан­ном компью­тере на дан­ном входе также может быть зафик­си­ро­ван в виде тек­ста (не важно, сохра­ня­ется ли этот текст в ходе работы программы или нет). В тео­рии алго­ритмов при­нято назы­вать такой текст пол­ным про­то­ко­лом работы программы. То, каким обра­зом порож­да­ется этот про­то­кол, и состав­ляет пол­ное опи­са­ние той или иной вычис­ли­тель­ной модели. Для реаль­ных язы­ков программи­ро­ва­ния, разуме­ется, такое опи­са­ние чрез­вы­чайно сложно, однако для про­стейших моде­лей, таких как машина Тью­ринга, оно гораздо проще.

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

Одним из пер­вых, кто это понял, был Алан Тью­ринг, давший точ­ное опре­де­ле­ние и наи­бо­лее убе­ди­тель­ный ана­лиз поня­тия вычис­лимой функции в 1936 году. Другими учё­ными, кото­рые наряду с Тью­рингом при­шли к тем же идеям при­бли­зи­тельно в то же время, были Алонзо Чёрч и Эмиль Пост. Этими и другими иссле­до­ва­те­лями в 1930‐х годах были созданы начала тео­рии алго­ритмов, кото­рая стала осно­вой понима­ния работы и постро­е­ния вычис­ли­тель­ных устройств в 40‐е и 50‐е годы. В част­но­сти, идея уни­вер­саль­ной машины Тью­ринга была в даль­нейшем тех­ни­че­ски реа­ли­зо­вана в компью­тер­ной архи­тек­туре «по фон Нейману», в соот­вет­ствии с кото­рой программа хра­нится в памяти устройства и может быть модифици­ро­вана в ходе его работы. На основе этой идеи постро­ены все опе­раци­он­ные системы.

Зада­чей, кото­рую стреми­лись решить пио­неры тео­рии алго­ритмов, был вопрос, постав­лен­ный Гиль­бер­том и назван­ный им по‐­немецки Entscheidungsproblem, «про­блема реше­ния». Вопрос состоял в том, чтобы найти алго­ритм, кото­рый по дан­ному утвер­жде­нию, запи­сан­ному на языке логики пре­ди­ка­тов, давал бы ответ, суще­ствует ли формаль­ное дока­за­тельство этого утвер­жде­ния или нет. Если бы такой алго­ритм суще­ство­вал, то все матема­ти­че­ские про­блемы в неко­то­ром смысле имели бы чисто меха­ни­че­ское реше­ние: как уже упоми­на­лось, на языке логики пре­ди­ка­тов можно сформу­ли­ро­вать прак­ти­че­ски любое матема­ти­че­ское утвер­жде­ние, напри­мер знаме­ни­тую гипо­тезу о бес­ко­неч­но­сти числа пар про­стых чисел-близ­нецов. Тогда вопрос о том, выво­дима ли эта гипо­теза из аксиом тео­рии множеств, сво­дился бы к про­верке дока­зу­емо­сти неко­то­рого выска­зы­ва­ния в исчис­ле­нии пре­ди­ка­тов. Неуди­ви­тельно, что иссле­до­ва­тели Entscheidungsproblem стреми­лись пока­зать, что тре­бу­емого алго­ритма в принципе не может суще­ство­вать.

Если дока­зать суще­ство­ва­ние того или иного алго­ритма можно, предъявив его явно, то для того, чтобы утвер­ждать, что такого алго­ритма не суще­ствует, необ­хо­димо рас­по­лагать точ­ным матема­ти­че­ским опи­са­нием того класса задач, кото­рые допус­кают алго­ритми­че­ское реше­ние. Ответ на этот вопрос потре­бо­вал раз­ра­ботки формаль­ных язы­ков опи­са­ния алго­ритмов ещё до появ­ле­ния компью­те­ров. При­чём, поскольку цель такой раз­ра­ботки была более тео­ре­ти­че­ская, чем прак­ти­че­ская, иссле­до­ва­тели стреми­лись к форму­ли­ровке наи­бо­лее про­стых для опи­са­ния и в то же время уни­вер­саль­ных вычис­ли­тель­ных моде­лей. Пер­выми такими моде­лями были рекур­сив­ные функции Гёделя—Эрбрана, лямбда-исчис­ле­ние Чёрча и машины Тью­ринга.

Гёдель, хотя и был пер­вым, кто фак­ти­че­ски сформу­ли­ро­вал уни­вер­саль­ный язык программи­ро­ва­ния, не счи­тал, что най­ден­ное им (и фран­цуз­ским логи­ком Эрбра­ном) поня­тие явля­ется уни­вер­саль­ным в смысле спо­соб­но­сти запрограмми­ро­вать любой алго­ритм. Пер­вым, кто выска­зал тезис об уни­вер­саль­но­сти своей вычис­ли­тель­ной модели, был Алонзо Чёрч. Он также предъявил дока­за­тельство невозмож­но­сти реше­ния Entscheidungsproblem в рам­ках этой модели. Исчис­ле­ние Чёрча было очень про­стым по форме, но больше напоми­нало формаль­ное логи­че­ское исчис­ле­ние, чем реаль­ную вычис­ли­тель­ную машину. Машины Тью­ринга в этом смысле были ближе к будущей реаль­но­сти, и пове­рить в тезис Тью­ринга о том, что любая задача, имеющая алго­ритми­че­ское реше­ние, может быть решена на машине Тью­ринга, было намного легче, чем в ана­логич­ный тезис Чёрча (известно, что именно работа Тью­ринга смогла убе­дить Гёделя в спра­вед­ли­во­сти этого тезиса). Тью­ринг также пока­зал, что его машины экви­ва­лентны лямбда-исчис­ле­нию в смысле вычис­ли­тель­ных возмож­но­стей, что стало кос­вен­ным сви­де­тельством спра­вед­ли­во­сти тезиса Чёрча—Тью­ринга, как его теперь при­нято назы­вать.

Впо­след­ствии многие иссле­до­ва­тели пред­лагали свои вычис­ли­тель­ные модели в надежде расши­рить класс вычис­лимых функций, впер­вые опи­сан­ный Чёр­чем и Тью­рингом. Все такие попытки не при­вели к расши­ре­нию этого класса, кото­рый ока­зался очень устой­чи­вым. В насто­ящее время тезис Чёрча—Тью­ринга — понима­емый в смысле любой из экви­ва­лент­ных вычис­ли­тель­ных моде­лей — явля­ется одним из кра­е­уголь­ных кам­ней, на кото­рых бази­ру­ется тео­рия алго­ритмов.

Что каса­ется лямбда-исчис­ле­ния, то оно долгое время пре­бы­вало на обо­чине матема­ти­че­ской логики, будучи вытес­нено из тео­рии алго­ритмов более удоб­ными и инту­и­тив­ными моде­лями. Однако во вто­рой поло­вине XX века лямбда-исчис­ле­ние и системы на его основе нашли серьёз­ные прак­ти­че­ские при­ме­не­ния. Лямбда-исчис­ле­ние Чёрча стало про­об­ра­зом так назы­ва­емых функци­о­наль­ных язы­ков программи­ро­ва­ния (таких как современ­ный язык Haskell), кото­рые имеют ряд пре­имуществ по срав­не­нию с тра­дици­он­ными импе­ра­тив­ными язы­ками и в насто­ящее время очень активно раз­ви­ваются.

Алго­ритми­че­ски нераз­решимые про­блемы в матема­тике. Вслед за Entscheidungsproblem с точки зре­ния тео­рии алго­ритмов были про­ана­ли­зи­ро­ваны и многие другие матема­ти­че­ские про­блемы, постав­лен­ные как вопросы о постро­е­нии того или иного алго­ритма. Неко­то­рые из таких труд­ных про­блем, оста­вавшихся открытыми деся­ти­ле­ти­ями, ока­за­лись алго­ритми­че­ски нераз­решимыми зада­чами.

Среди такого рода вопро­сов наи­бо­лее известна 10‐я про­блема Гиль­берта о рас­по­зна­ва­нии раз­решимо­сти диофан­то­вых урав­не­ний. Диофан­тово урав­не­ние — это урав­не­ние вида $P(x_1,…,x_n)=0$, где $P$ — много­член с целыми коэффици­ен­тами от перемен­ных $x_1$, …, $x_n$. Тре­бу­ется узнать по задан­ному много­члену $P$, суще­ствуют ли целые числа $x_1$, …, $x_n$, удо­вле­тво­ряющие такому урав­не­нию.

Вопрос Гиль­берта о постро­е­нии общего алго­ритма, рабо­тающего для всех диофан­то­вых урав­не­ний, с самого начала выгля­дел без­на­дёж­ным. С появ­ле­нием тео­рии алго­ритмов иссле­до­ва­тели стали предпри­нимать уси­лия в попытке дока­зать нераз­решимость этой задачи. Промежу­точ­ные результаты в этом направ­ле­нии полу­чили аме­ри­кан­ские логики Дж. Робин­сон, М. Дэвис и Х. Пат­нэм, на их основе окон­ча­тель­ное реше­ние задачи было полу­чено лишь в 1970 году ленинград­ским матема­ти­ком Ю. В. Мати­я­се­ви­чем.

В наше время в матема­тике алго­ритми­че­ские вопросы занимают подо­бающее им важ­ное место. Матема­ти­че­ская логика научила нас тому, что далеко не вся­кий такой вопрос явля­ется раз­решимым. Кроме того, даже если алго­ритм реше­ния той или иной задачи суще­ствует в принципе, не все­гда можно гово­рить о его при­ме­нимо­сти на прак­тике. Напри­мер, выпол­не­ние алго­ритма может потре­бо­вать слиш­ком много времени или памяти компью­тера. Такого рода вопро­сами занима­ется отдель­ная область тео­рии алго­ритмов — тео­рия слож­но­сти вычис­ле­ний, о кото­рой подробно рас­ска­зано в дру­гой ста­тье этого сбор­ника (см. «Тео­рия слож­но­сти»).

Тео­ремы Гёделя и недо­ка­зу­емые утвер­жде­ния. Ещё одним открытием, сде­лан­ным гени­аль­ным австрийским логи­ком Кур­том Гёде­лем в 1931 году, было явле­ние непо­пол­ня­емо­сти акси­о­ма­ти­че­ских систем. Знаме­ни­тые тео­ремы Гёделя о непол­ноте не только ока­зали большое вли­я­ние на раз­ви­тие матема­ти­че­ской логики и дали тол­чок к созда­нию тео­рии алго­ритмов, но и стали обще­культур­ным явле­нием, затро­нувшим даже твор­че­ство писа­те­лей и худож­ни­ков. Гёдель был назван в числе ста наи­бо­лее вли­я­тель­ных лич­но­стей XX века по вер­сии жур­нала Тайм. Однако извест­ность тео­рем Гёделя при­во­дит и к тому, что часто они интер­пре­ти­руются в слиш­ком расши­ри­тель­ном, метафо­ри­че­ском смысле.

Пол­ными назы­вают такие системы аксиом, в кото­рых дока­зу­емо или опро­вержимо любое утвер­жде­ние того же языка (можно гово­рить о дока­зу­емо­сти в исчис­ле­нии пре­ди­ка­тов из дан­ного множе­ства аксиом). Понятно, что если мы хотим постро­ить систему аксиом для той или иной обла­сти матема­тики, нам бы хоте­лось, чтобы эта система была непро­ти­во­ре­чи­вой и пол­ной — непол­нота озна­чает, что мы «забыли» посту­ли­ро­вать каки­е‐то принципы, касающи­еся базо­вых поня­тий дан­ного языка, и нужно их доба­вить к списку аксиом.

Тео­ремы Гёделя отно­сятся к классу акси­о­ма­ти­че­ских систем, удо­вле­тво­ряющих двум есте­ствен­ным и широ­ким тре­бо­ва­ниям. Во‐пер­вых, необ­хо­димо, чтобы в рас­смат­ри­ва­емом формаль­ном языке по меньшей мере было выра­зимо поня­тие нату­раль­ного числа и опе­рации сложе­ния и умноже­ния. На пер­вый взгляд это тре­бо­ва­ние кажется весьма спе­ци­аль­ным, однако нату­раль­ные числа — один из базо­вых матема­ти­че­ских объек­тов, и языки, пре­тен­дующие на форма­ли­за­цию зна­чи­тель­ной части матема­тики, должны поз­во­лять о них гово­рить.

Целые числа создал Господь Бог,
всё осталь­ное — дело рук чело­ве­че­ских.

(Леопольд Кро­не­кер, 1886 год, Бер­лин.)

Во‐в­то­рых, должен суще­ство­вать алго­ритм, рас­по­знающий, явля­ется ли дан­ный текст акси­омой рас­смат­ри­ва­емой тео­рии или нет. (Если акси­омы тео­рии нерас­по­зна­ва­емы, то неясно, как можно стро­ить дока­за­тельства в такой системе.)

Гёдель пока­зал, что при выпол­не­нии этих тре­бо­ва­ний любая система аксиом либо про­ти­во­ре­чива, либо неполна. Более того, для любой непро­ти­во­ре­чи­вой системы можно явно ука­зать пред­ложе­ние, касающе­еся арифме­тики нату­раль­ных чисел, кото­рое нельзя ни дока­зать, ни опро­верг­нуть в дан­ной системе (такие утвер­жде­ния при­нято назы­вать неза­ви­симыми от дан­ной системы аксиом). В част­но­сти, это озна­чает, что систему аксиом формаль­ной арифме­тики нельзя ника­ким непро­ти­во­ре­чи­вым обра­зом «попол­нить»: все­гда най­дутся неза­ви­симые от неё арифме­ти­че­ские утвер­жде­ния. Это состав­ляет содер­жа­ние так назы­ва­емой пер­вой тео­ремы Гёделя.

Вто­рая тео­рема Гёделя гово­рит о том, что утвер­жде­ние, выражающее непро­ти­во­ре­чи­вость дан­ной акси­о­ма­ти­че­ской системы, не дока­зу­емо в самой системе, если эта система и в самом деле непро­ти­во­ре­чива. Если счи­тать, что стан­дарт­ные матема­ти­че­ские методы укла­ды­ваются в рамки акси­о­ма­ти­че­ской тео­рии множеств, то из этой тео­ремы сле­дует, напри­мер, что стан­дарт­ными матема­ти­че­скими мето­дами нельзя уста­но­вить непро­ти­во­ре­чи­вость тео­рии множеств (и, тем самым, их соб­ствен­ную непро­ти­во­ре­чи­вость).

Тео­ремы Гёделя поз­во­лили постро­ить пер­вые при­меры неза­ви­симых утвер­жде­ний для силь­ных систем аксиом, таких как арифме­тика или даже тео­рия множеств. После работ Гёделя такие при­меры были обна­ружены среди открытых про­блем в раз­лич­ных обла­стях матема­тики. Одной из самых знаме­ни­тых открытых про­блем в матема­тике была кон­ти­нуум-гипо­теза Кан­тора, в соот­вет­ствии с кото­рой вся­кое бес­ко­неч­ное под­множе­ство множе­ства веще­ствен­ных чисел либо счётно (рав­но­мощно множе­ству нату­раль­ных чисел), либо кон­ти­ну­ально (рав­но­мощно множе­ству веще­ствен­ных чисел). В 1938 году Гёдель сумел дока­зать, что эту гипо­тезу невозможно опро­верг­нуть в тео­рии множеств, а в 1961 году аме­ри­кан­ский матема­тик Пол Коэн уста­но­вил её недо­ка­зу­емость.

Недо­ка­зу­емые утвер­жде­ния тео­ре­тико-множе­ствен­ной при­роды впо­след­ствии были обна­ружены в самых раз­ных частях матема­тики — в ана­лизе, алгебре, топо­логии и др. Срав­ни­тельно недавно, в конце 1970‐х годов, были най­дены пер­вые про­стые при­меры утвер­жде­ний из обла­сти конеч­ной ком­би­на­то­рики, неза­ви­симые от аксиом формаль­ной арифме­тики и даже от более силь­ных акси­о­ма­ти­че­ских систем. Принци­пи­аль­ная раз­ница с при­ме­рами типа кон­ти­нуум-гипо­тезы состоит в том, что ком­би­на­тор­ные при­меры отно­сятся к конеч­ным и совершенно элемен­тар­ным объек­там, и их можно легко объяс­нить школь­нику. Иссле­до­ва­ния в направ­ле­нии поиска есте­ствен­ных при­ме­ров неза­ви­симых утвер­жде­ний активно ведутся и в наши дни.

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

Область матема­тики, кото­рая испытала на себе силь­ное вли­я­ние логи­че­ских мето­дов — это абстракт­ная алгебра. Соот­вет­ствующее направ­ле­ние матема­ти­че­ской логики — тео­рия моде­лей — воз­никло в 1940‐х годах в рабо­тах А. И. Мальцева в Рос­сии и А. Тар­ского и А. Робин­сона в США с при­це­лом на при­ложе­ния в алгебре. Пер­вые такие при­ложе­ния были най­дены в 1941 году А. И. Мальце­вым, кото­рый осмыс­лил дока­зан­ную им (а ранее в более сла­бой форме Гёде­лем) тео­рему о компакт­но­сти для логики пре­ди­ка­тов как общий метод полу­че­ния локаль­ных тео­рем в алгебре. Ока­за­лось, что методы уни­вер­саль­ной алгебры и методы тео­рии моде­лей весьма близки и понима­ние вза­имо­свя­зей обога­тило обе дис­ци­плины. Неко­то­рые кон­струкции, впер­вые най­ден­ные в матема­ти­че­ской логике, стали стан­дарт­ными в алгебре и ана­лизе, напри­мер так назы­ва­емая кон­струкция ультра­про­из­ве­де­ния, при­думан­ная польским логи­ком Е. Лосем.

Одним из ярких достиже­ний тео­рии моде­лей 1960‐х годов стало созда­ние нестан­дарт­ного ана­лиза Абра­хамом Робин­со­ном. Он опи­сал логи­че­скую кон­струкцию, кото­рая поз­во­лила непро­ти­во­ре­чиво рас­смат­ри­вать попол­не­ние множе­ства веще­ствен­ных чисел бес­ко­нечно малыми и бес­ко­нечно большими чис­лами. С помощью этой кон­струкции стало возмож­ным дать объяс­не­ние исход­ной инту­иции лейб­ницев­ских «бес­ко­нечно малых» и дать тех­ни­че­ски про­стое и инту­и­тив­ное постро­е­ние основ­ных результа­тов матема­ти­че­ского ана­лиза. В даль­нейшем эти методы были также исполь­зо­ваны и для полу­че­ния новых результа­тов.

Современ­ное направ­ле­ние тео­рии моде­лей, воз­никшее в рабо­тах 1980‐х годов и активно раз­ви­вающе­еся в наши дни, уста­но­вило новые связи между логи­че­скими и алгебро-геомет­ри­че­скими мето­дами. Пожа­луй, наи­бо­лее впе­чат­ляющим достиже­нием этого направ­ле­ния было дока­за­тельство Э. Хрушов­ским в 1996 году гипо­тезы Мор­делла—Ленга для функци­о­наль­ных полей в любой харак­те­ри­стике, кото­рое было впер­вые полу­чено в пол­ной общ­но­сти лишь с исполь­зо­ва­нием мето­дов тео­рии моде­лей. Не вда­ва­ясь в объяс­не­ния этой тео­ремы, отме­тим, что речь идёт о силь­ном результате, свя­зан­ным с дока­зан­ной Г. Фальтинг­сом в 1984 году гипо­те­зой Мор­делла о конеч­но­сти числа раци­о­наль­ных точек на алгеб­ра­и­че­ской кри­вой (из кото­рой, в част­но­сти, выте­кает конеч­ность числа возмож­ных реше­ний урав­не­ния Ферма $x^n+y^n=z^n$ при $n>2$).

Методы тео­рии дока­за­тельств — обла­сти матема­ти­че­ской логики, изу­чающей формаль­ную дока­зу­емость — также нахо­дят при­ме­не­ния в «обыч­ной» матема­тике. Одним из успеш­ных современ­ных направ­ле­ний явля­ется proof mining, извле­че­ние кон­струк­тив­ных оце­нок из апри­ори некон­струк­тив­ных матема­ти­че­ских дока­за­тельств. Так назы­ва­емые функци­о­наль­ные интер­пре­тации, пер­во­на­чально раз­ра­бо­тан­ные для ана­лиза формаль­ных систем, ока­за­лось возмож­ным при­ме­нить и к кон­крет­ным содержа­тель­ным матема­ти­че­ским результа­там (напри­мер, из обла­сти веще­ствен­ного ана­лиза, где инте­ре­сен вопрос о ско­ро­сти схо­димо­сти того или иного процесса к непо­движ­ной точке и тре­бу­ется явная оценка этой ско­ро­сти). Результаты, полу­чен­ные логи­че­скими мето­дами, часто дают совершенно неоче­вид­ные уси­ле­ния исход­ных тео­рем.

Логика в компью­тер­ных нау­ках. Если при­ме­не­ния матема­ти­че­ской логики в «обыч­ной» матема­тике доста­точно редки, то роль логи­че­ских мето­дов в информа­тике и компью­тер­ных нау­ках намного выше. Здесь матема­ти­че­ская логика даёт под­хо­дящий язык для изу­че­ния воз­ни­кающих задач и набор общих под­хо­дов к их реше­нию. Уди­ви­тель­ным обра­зом, иногда ока­зы­ва­ется, что концепции, сформу­ли­ро­ван­ные в матема­ти­че­ской логике очень давно и с другими целями, обре­тают новую жизнь в кон­крет­ных при­клад­ных обла­стях. Рас­скажем о неко­то­рых направ­ле­ниях, в кото­рых логика дока­зала свою эффек­тив­ность.

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

В 1960‐х годах аме­ри­кан­ский учё­ный T. Кодд понял, что самый обыч­ный язык логики пре­ди­ка­тов очень удо­бен для обеих целей, поскольку поз­во­ляет эффек­тивно осуществ­лять поиск по запросу. Эффек­тив­ность обес­пе­чи­ва­ется с помощью аппа­рата реляци­он­ной алгебры — языка опе­раций над отноше­ни­ями, раз­ра­бо­тан­ного до этого в матема­ти­че­ской логике (в школе Альфреда Тар­ского) как алгеб­ра­и­че­ский экви­ва­лент языка логики пре­ди­ка­тов. Идея Кодда о том, что запросы на языке реляци­он­ной алгебры допус­кают эффек­тив­ный поиск, была пер­во­на­чаль­ным стиму­лом в раз­ра­ботке реляци­он­ных баз дан­ных и обще­упо­тре­би­тель­ных в насто­ящее время язы­ков запро­сов, таких как SQL. С тех пор тео­рия баз дан­ных и логи­че­ских язы­ков успешно раз­ви­ваются рука об руку.

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

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

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

Аль­тер­на­тив­ный под­ход, назы­ва­емый theorem proving, состоит в том, чтобы сопо­ста­вить программе логи­че­скую формулу, выражающую её кор­рект­ность, и искать формаль­ное дока­за­тельство этой формулы — напри­мер, в исчис­ле­нии пре­ди­ка­тов. Этот под­ход на дан­ный момент не так рас­про­стра­нён на прак­тике, как model checking, но про­должает раз­ви­ваться. Успеш­ность этого метода во многом зави­сит от эффек­тив­но­сти работы пруве­ров — программ авто­ма­ти­че­ского поиска формаль­ных дока­за­тельств. Раз­ра­ботка такого рода систем активно ведётся в наши дни.

Тео­рии типов и функци­о­наль­ное программи­ро­ва­ние. Пара­дигма функци­о­наль­ного программи­ро­ва­ния соче­тает в себе несколько базо­вых идей, пер­во­на­чально воз­никших в матема­ти­че­ской логике.

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

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

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

В послед­ние годы функци­о­наль­ные языки занимают всё более важ­ную нишу среди упо­тре­би­тель­ных язы­ков программи­ро­ва­ния и при­ме­няются в тех обла­стях, где важно иметь надёж­ные программы, напри­мер, в бан­ков­ской сфере. По суще­ству, пер­вым функци­о­наль­ным языком программи­ро­ва­ния было лямбда-исчис­ле­ние, при­думан­ное Чёр­чем как про­стейшая уни­вер­саль­ная вычис­ли­тель­ная модель. Идеи лямбда-исчис­ле­ния были затем воплощены в одном из пер­вых действующих функци­о­наль­ных язы­ков — языке LISP, а также во многих более современ­ных язы­ках вплоть до Ocaml и Haskell.

Дру­гой клю­че­вой идеей, идущей из матема­ти­че­ской логики, явля­ется идея типа дан­ных, на кото­рой осно­вано подав­ляющее большин­ство язы­ков программи­ро­ва­ния высо­кого уровня, не обя­за­тельно именно функци­о­наль­ных. Исполь­зо­ва­ние перемен­ных и функций, кото­рым при­пи­сан опре­де­лён­ный тип (напри­мер, тип «число с пла­вающей точ­кой», или тип «мас­сив целых чисел»), поз­во­ляет на уровне компи­ляции про­во­дить кон­троль типов, что избав­ляет программы от зна­чи­тель­ного числа оши­бок (свя­зан­ных с несо­от­вет­ствием зна­че­ния перемен­ной типу). Раз­ви­тие язы­ков программи­ро­ва­ния идёт в сто­рону усо­вершен­ство­ва­ния и услож­не­ния системы типов, где кон­тролю типов отво­дится всё большая роль.

Формаль­ные языки с типами (в отли­чие от бес­типо­вых язы­ков, в кото­рых все перемен­ные имеют один и тот же тип) впер­вые воз­никли в фун­дамен­таль­ном труде Б. Рас­села и А. Уайт­хеда «Осно­ва­ния матема­тики», целью кото­рого было постро­е­ние матема­тики на основе непро­ти­во­ре­чи­вой системы аксиом тео­рии множеств. В матема­тике эта система, однако, не при­жи­лась и была заме­нена более про­стой бес­типо­вой тео­рией множеств Цермело—Френ­келя с акси­омой выбора.

В 1950‐е годы в логике было обна­ружено, что в доста­точно раз­ви­тых системах на базе лямбда-исчис­ле­ния с типами послед­ние ведут себя в точ­но­сти как логи­че­ские выска­зы­ва­ния (языка инту­ици­о­нист­ской логики), а функци­о­наль­ные программы — как формаль­ные дока­за­тельства этих выска­зы­ва­ний. Это явле­ние, опи­сан­ное здесь, разуме­ется, очень при­бли­зи­тельно, полу­чило назва­ние соот­вет­ствия Карри—Говарда. Через несколько десят­ков лет оно послужило осно­вой для созда­ния функци­о­наль­ных язы­ков, в кото­рых возможно напи­са­ние программ с одно­времен­ной верифи­кацией их кода. Наи­бо­лее извест­ными язы­ками такого рода являются Coq и Agda, создан­ные для форма­ли­за­ции матема­ти­че­ских дока­за­тельств. В част­но­сти, именно на языке Coq уда­лось постро­ить формаль­ное дока­за­тельство гипо­тезы четырёх кра­сок и ряда других труд­ных матема­ти­че­ских результа­тов. Эти же языки начи­нают при­ме­няться и для задач верифи­кации программ, опи­сан­ных в преды­дущем пункте.

Этими тремя темами мы огра­ни­чим избран­ный спи­сок обла­стей информа­тики, в кото­рых на деле при­ме­няются результаты матема­ти­че­ской логики. Многие не менее важ­ные темы при этом ока­за­лись не затро­ну­тыми: тео­рия слож­но­сти вычис­ле­ний, тео­рия авто­ма­тов и мона­ди­че­ская логика, SAT-solving, языки авто­ри­за­ции и кон­троля доступа к информации, логи­че­ское программи­ро­ва­ние и хор­нова логика, онто­логи­че­ские базы дан­ных и дескрипци­он­ная логика — пере­чис­ле­ние можно очень долго про­должать.

Завершая обзор, посмот­рим на отдель­ные обла­сти гума­ни­тар­ных наук, испытавшие на себе вли­я­ние мето­дов матема­ти­че­ской логики. Выбран­ные нами пред­меты касаются фило­софии, язы­ко­зна­ния и даже тео­рии права. Эти раз­но­об­раз­ные темы объеди­нены в одну группу, поскольку свя­заны с изу­че­нием явле­ний, тре­бующих модифи­кации тех или иных аспек­тов клас­си­че­ской логики.

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

Инту­ици­о­низм как фило­соф­ское тече­ние воз­ник в самом начале XX века в рабо­тах моло­дого нидер­ланд­ского матема­тика Л. Э. Я. Брауэра как реакция на кри­зис осно­ва­ний матема­тики и тео­рии множеств. Харак­тер­ной чер­той фило­софии Брауэра было жела­ние изба­вить матема­тику от некон­струк­тив­ных тео­рем суще­ство­ва­ния, т. е. утвер­жде­ний о суще­ство­ва­нии тех или иных объек­тов, без возмож­но­сти предъявить явно их кон­струкцию. Глу­бо­кий ана­лиз при­вёл Брауэра к идее о том, что сама клас­си­че­ская логика, а именно закон исклю­чён­ного тре­тьего, явля­ется источ­ни­ком таких некон­струк­тив­ных утвер­жде­ний в матема­тике. Это потре­бо­вало ради­кально пере­смот­реть тра­дици­он­ное понима­ние смысла матема­ти­че­ских утвер­жде­ний, логи­че­ских опе­раций и кван­то­ров.

Хотя сам Брауэр наста­и­вал на неформаль­ном харак­тере своей фило­софии матема­тики — отсюда её назва­ние «инту­ици­о­низм» в про­ти­вопо­лож­ность гиль­бер­тов­скому «форма­лизму» — к началу 1930‐х годов воз­никла потреб­ность в уточ­не­нии сово­куп­но­сти логи­че­ских принци­пов, при­ем­лемых с инту­ици­о­нист­ской точки зре­ния. Реше­ние этой задачи было дано уче­ни­ком Брауэра А. Гейтингом, кото­рый сформу­ли­ро­вал общепри­ня­тую в насто­ящее время инту­ици­о­нист­скую логику пре­ди­ка­тов, опи­ра­ясь на пред­ше­ство­вавшую работу А. Н. Колмого­рова. Пара­док­сально, но в результате инту­ици­о­низм был также постав­лен на проч­ную формаль­ную основу.

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

С дру­гой сто­роны, инту­ици­о­нист­ская логика часто воз­ни­кает в раз­лич­ных при­ложе­ниях в компью­тер­ных нау­ках. Это не слу­чайно, поскольку инту­ици­о­нист­ская логика тес­нее свя­зана с поня­тием вычис­ле­ния, чем логика клас­си­че­ская. Одним из важ­нейших про­яв­ле­ний этой связи явля­ется уже упомя­ну­тое соот­вет­ствие Карри—Говарда.

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

Модаль­ная логика. Другим клас­сом логик, обогащающих клас­си­че­скую новыми выра­зи­тель­ными возмож­но­стями, являются так назы­ва­емые модаль­ные логики. Язык модаль­ной логики, наряду с обыч­ными связ­ками, содержит новую одно­мест­ную логи­че­скую связку $ □\, $. Выска­зы­ва­ние $□\, A$ в раз­ных кон­текстах может пониматься совершенно по‐раз­ному, что при­во­дит к раз­ным посту­ли­ру­емым принци­пам, т. е. раз­ным модаль­ным логи­кам. Стан­дарт­ные логи­че­ские связки, такие как импли­кация или отрица­ние, как пра­вило, сохра­няют в модаль­ной логике клас­си­че­скую интер­пре­тацию. (Разуме­ется, могут рас­смат­ри­ваться модаль­ные логики и над другими логи­ками, напри­мер над инту­ици­о­нист­ской, однако такие системы в целом слож­нее и потому менее рас­про­стра­нены.)

Исто­ри­че­ски пер­вым, идущим ещё от Ари­сто­теля, про­чте­нием формулы $□\, A$ было выска­зы­ва­ние «$A$ необ­хо­димо». (Здесь мы гово­рим о язы­ко­вой кон­струкции, при­сут­ствующей в нашем есте­ствен­ном языке, а не о каком-либо матема­ти­че­ском понима­нии того, что зна­чит «необ­хо­димо».) Двойствен­ное выска­зы­ва­ние «не $A$ не явля­ется необ­хо­димым» обычно отож­деств­ля­ется с выска­зы­ва­нием «$A$ возможно» и обо­зна­ча­ется $◇\, A$.

Пере­чис­лим неко­то­рые извест­ные интер­пре­тации модаль­но­сти, при­во­дящие к инте­рес­ным и полез­ным семействам логик.

Логика дока­зу­емо­сти: $□\, A$ озна­чает «$A$ дока­зу­емо» в дан­ной акси­о­ма­ти­че­ской тео­рии, напри­мер в тео­рии множеств. При этом выска­зы­ва­ния понимаются как выска­зы­ва­ния в языке тео­рии множеств, како­вым можно счи­тать и само выска­зы­ва­ние о дока­зу­емо­сти утвер­жде­ния $A$. Эта логика инте­ресна тем, что даёт точ­ную матема­ти­че­скую семан­тику модаль­но­сти и при­ме­ня­ется для иссле­до­ва­ния обыч­ных клас­си­че­ских акси­о­ма­ти­че­ских тео­рий.

Времен­ная логика, опи­сы­вающая раз­ви­тие неко­то­рого процесса во времени: $□\, A$ озна­чает «все­гда в будущем будет верно $A$». Раз­лич­ные модели тече­ния времени — непре­рыв­ное, дис­крет­ное или даже вет­вяще­еся — при­во­дят к раз­ным времен­ным логи­кам. Времен­ные логики, при­ме­ня­емые на прак­тике для верифи­кации программ, исполь­зуют и неко­то­рые допол­ни­тель­ные связки, напри­мер двухмест­ную связку, выражающую «$A$ имеет место до тех пор, пока $B$».

Эпи­стеми­че­ская логика, опи­сы­вающая зна­ния и обмен информации между несколькими аген­тами: $□\,_x A$ озна­чает «агенту $x$ известно $A$» (в этой логике, как пра­вило, опи­сы­ваются зна­ния нескольких аген­тов $x$, $y$, … и каж­дому из них соот­вет­ствует своя модаль­ность $□\,_x$, $□\,_y$, …). Эпи­стеми­че­ская логика явля­ется частью (формаль­ной) эпи­стемо­логии — обшир­ного и важ­ного раз­дела фило­софии, занимающегося иссле­до­ва­нием таких поня­тий, как зна­ние и вера, того как зна­ние воз­ни­кает, как оно свя­зано с поня­тием дока­за­тельства (обос­но­ва­ния). Форма­лизм эпи­стеми­че­ской логики поз­во­ляет постро­ить модели раз­лич­ных аспек­тов этих явле­ний и исполь­зо­вать их для ана­лиза тех или иных тео­ре­ти­че­ских положе­ний.

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

Деон­ти­че­ская логика форма­ли­зует модаль­но­сти типа должен­ство­ва­ния, напри­мер $□\, A$ можно понимать как «$A$ тре­бу­ется» или «$A$ обя­за­тельно» (двойствен­ную модаль­ность можно понимать как «$A$ раз­решено»). Такие логики впер­вые стали рас­смат­ри­ваться в фило­софии и тео­рии права для форма­ли­за­ции и ана­лиза раз­лич­ных аспек­тов пра­во­вых систем.

Много­знач­ная логика и нечёт­кая логика. Много­знач­ные логики воз­ни­кают, если допус­каются другие истин­ност­ные зна­че­ния, помимо клас­си­че­ских истины 1 и лжи 0. Напри­мер, можно рас­смат­ри­вать промежу­точ­ное зна­че­ние 1/2 и интер­пре­ти­ро­вать его как «неиз­вестно». Сле­дующий шаг тре­бует опре­де­ле­ния того, каким обра­зом вычис­ляются зна­че­ния логи­че­ских свя­зок, и кон­крет­ное реше­ние по этому поводу может при­ве­сти к раз­лич­ным логи­кам.

Если пойти дальше по пути много­знач­но­сти, то есте­ственно воз­ни­кает идея о том, что истин­ност­ным зна­че­нием выска­зы­ва­ния может быть любое веще­ствен­ное число в интер­вале $[0,1]$ (напри­мер, это число может выражать степень нашей уве­рен­но­сти в спра­вед­ли­во­сти выска­зы­ва­ния). Такие логики часто назы­вают «нечёт­кими» (fuzzy), поскольку пре­ди­каты в такой системе могут выгля­деть как размытые, не имеющие чёт­ких гра­ниц. Напри­мер, выска­зы­ва­ние о том, что видимый цвет явля­ется крас­ным, не явля­ется чёт­ким в силу неопре­де­лён­но­сти самого поня­тия «крас­ный».

Нечёт­кие логики при­званы форма­ли­зо­вать рас­суж­де­ния в усло­виях неопре­де­лён­но­сти или неточ­но­сти информации. Под­лин­ным «отцом» нечёт­кой логики и тео­рии нечёт­ких множеств был Л. Заде. Он уви­дел потенциал этой логики для раз­лич­ных инже­нер­ных при­ме­не­ний, напри­мер в такой обла­сти, как экс­перт­ные системы или тео­рия управ­ле­ния, и сде­лал очень много для её попу­ля­ри­за­ции.

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

Аргументы и дока­за­тельства, при­во­димые в суде, могут быть оспо­рены или опро­верг­нуты про­тив­ной сто­ро­ной. Процесс выстра­и­ва­ния аргумен­тов, таким обра­зом, на прак­тике выгля­дит совершенно непо­хоже на при­выч­ные нам дедук­тив­ные матема­ти­че­ские дока­за­тельства. Эти аспекты изу­чает тео­рия аргумен­тации — весьма раз­ви­тая область иссле­до­ва­ний, свя­зан­ная с фило­софией, линг­ви­сти­кой, тео­рией права и искус­ствен­ным интел­лек­том. Формаль­ные модели аргумен­тации во многих слу­чаях бази­руются на немо­но­тон­ных логи­ках.

Пара­не­про­ти­во­ре­чи­вая логика. Как известно, в клас­си­че­ской логике действует закон ex contradictio quodlibet, т. е. из про­ти­во­ре­чия сле­дует всё что угодно. Поэтому про­ти­во­ре­чи­вые клас­си­че­ские системы все экви­ва­лентны между собой и, по суще­ству, бес­по­лезны. На прак­тике людям при­хо­дится рас­суж­дать в не столь сте­риль­ных усло­виях: не все­гда бывает известно, есть ли про­ти­во­ре­чие в имеющейся информации, на осно­ва­нии кото­рой при­хо­дится делать выводы. Логики, при­спо­соб­лен­ные для рас­суж­де­ний в усло­виях возможно про­ти­во­ре­чи­вых предпо­ложе­ний, назы­ваются пара­не­про­ти­во­ре­чи­выми. В таких системах воз­ник­но­ве­ние про­ти­во­ре­чия не при­во­дит к дока­зу­емо­сти всех вообще утвер­жде­ний.

Можно ска­зать, что наша обы­ден­ная логика (как спо­соб умо­за­клю­че­ний на основе имеющейся информации) явля­ется одно­временно нечёт­кой, пара­не­про­ти­во­ре­чи­вой и немо­но­тон­ной. Разуме­ется, все эти формаль­ные системы являются лишь при­ближён­ными и гру­быми моде­лями отдель­ных аспек­тов той самой «обы­ден­ной логики».

Грамма­тики Хом­ского и семан­тика Мон­тегю. Одной из тео­рий, соеди­нивших в себе сразу несколько аспек­тов неклас­си­че­ских логик — кван­торы, пре­ди­каты, модаль­но­сти, модели Крипке и лямбда-абстракцию — явля­ется семан­тика Мон­тегю. Эта тео­рия, пред­ложен­ная аме­ри­кан­ским логи­ком Р. Мон­тегю в начале 1970‐х годов, пред­став­ляет собой попытку при­ме­нить идеи матема­ти­че­ской логики к труд­ной задаче опи­са­ния семан­тики есте­ствен­ного языка. Она, по суще­ству, положила начало целому направ­ле­нию в матема­ти­че­ской линг­ви­стике — формаль­ной семан­тике. Ранее работы Н. Хом­ского, создавшего тео­рию формаль­ных грамма­тик, про­из­вели рево­люцию в понима­нии син­так­сиса есте­ствен­ных язы­ков. При­ме­не­ния матема­ти­че­ской логики в линг­ви­стике, из кото­рых мы вскользь упомя­нули лишь два важ­ных направ­ле­ния, без­условно заслужи­вают отдель­ного разго­вора.

Неужели это всё матема­тика? — недо­умённо вос­клик­нет чита­тель. И да, и нет. Иссле­до­ва­тели, при­ме­няющие методы матема­ти­че­ской логики в той или иной обла­сти зна­ния, должны пре­жде всего быть компе­тент­ными спе­ци­а­ли­стами именно в этой обла­сти и раз­би­раться в поста­нов­ках спе­ци­фи­че­ских для неё задач. Напом­ним, что многие созда­тели матема­ти­че­ской логики — Гёдель, Тью­ринг, фон Нейман и др. — не были только лишь «чистыми» матема­ти­ками.

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

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

Разворот книги

Книга «Математическая составляющая»
Книга «Математическая составляющая»

Допол­не­ния, коммен­та­рии

Для внима­тель­ного чита­теля дадим несколько пояс­не­ний к рас­сказу об Entscheidungsproblem.

Во-пер­вых, в стан­дарт­ной форму­ли­ровке Гёделя—Бер­найса тео­рия множеств зада­ётся неко­то­рым конеч­ным набо­ром аксиом, скажем, $A_1$, …, $A_n$. Тогда вопрос о выво­димо­сти дан­ного утвер­жде­ния $A$ из аксиом тео­рии множеств сво­дится к дока­зу­емо­сти утвер­жде­ния $(A_1 \land { … } \land A_n) \to A$ в исчис­ле­нии пре­ди­ка­тов.

Во‐в­то­рых, из тео­рем Гёделя о непол­ноте выте­кает, что вопрос о выво­димо­сти гипо­тезы $A$ из аксиом тео­рии множеств, вообще говоря, может быть не рав­но­си­лен самой гипо­тезе $A$. По всей видимо­сти, Гиль­берт, кото­рый рас­счи­ты­вал постро­ить пол­ную акси­о­ма­ти­за­цию тео­рии множеств, эти два вопроса отож­деств­лял. С такой точки зре­ния, алго­ритм реше­ния Entscheidungsproblem давал бы, в част­но­сти, и реше­ние про­блемы про­стых чисел-близ­нецов.

Доба­вим несколько штри­хов к рас­сказу об алго­ритми­че­ских про­блемах.

В связи с 10‐й про­блемой Гиль­берта, во‐пер­вых, отме­тим, что её реше­ние поз­во­лило постро­ить и тот самый цело­чис­лен­ный много­член, множе­ством положи­тель­ных зна­че­ний кото­рого при нату­раль­ных зна­че­ниях перемен­ных явля­ется множе­ство всех про­стых чисел (см. коммен­та­рии к ста­тье «Пери­о­ди­че­ские цикады»).

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

Алго­ритми­че­ские про­блемы хорошо известны и в других обла­стях матема­тики. Клас­си­че­ские алго­ритми­че­ские про­блемы в алгебре — это про­блема рас­по­зна­ва­ния равен­ства элемен­тов в группах, задан­ных конеч­ным чис­лом порож­дающих и опре­де­ляющих соот­ноше­ний, и про­блема рас­по­зна­ва­ния изо­морфизма таких групп (про­блемы Дена). В топо­логии — это про­блемы рас­по­зна­ва­ния три­ви­аль­но­сти узла и гомеоморфизма много­об­ра­зий. Если для про­блемы рас­по­зна­ва­ния три­ви­аль­но­сти узла В. Хаке­ном в конце 1960‐х годов было най­дено алго­ритми­че­ское реше­ние, то для осталь­ных из упомя­ну­тых задач была дока­зана невозмож­ность такого реше­ния: для про­блемы равен­ства в группах это было сде­лано П. С. Нови­ко­вым в 1953 году, для про­блемы изо­морфизма групп С. И. Адя­ном в 1957 году.

Нераз­решимость про­блемы гомеоморфизма много­об­ра­зий размер­но­сти больше трёх дока­зана А. A. Мар­ко­вым в 1958 году. Заме­тим также, что для двумер­ных много­об­ра­зий задача раз­решима в силу клас­си­че­ских результа­тов об их клас­сифи­кации. Для трёхмер­ных много­об­ра­зий эта про­блема, видимо, пока открыта, хотя на основе результа­тов Г. Я. Перельмана по гипо­тезе Тёр­стона в этом направ­ле­нии полу­чены суще­ствен­ные про­движе­ния.

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

Лите­ра­тура

Смал­лиан Р. М. Принцесса или тигр?. — М.: Мир, 1985. — [Яркое и доступ­ное вве­де­ние в мир логи­че­ских идей вокруг тео­рем Гёделя о непол­ноте].

Булос Дж., Джеффри Р. Вычис­лимость и логика. — М.: Мир, 1994. — [Основ­ные сюжеты матема­ти­че­ской логики, изложен­ные с под­лин­ным педагоги­че­ским мастер­ством].

Верещагин Н. К., Шень А. Х. Лекции по матема­ти­че­ской логике. — М: МЦМНО, 2012. — [Исклю­чи­тельно ясно напи­сан­ный учеб­ник, соот­вет­ствующий программе ввод­ного курса матема­ти­че­ской логики, кото­рый можно начи­нать читать уже в старших клас­сах школы].

Davis M. Engines of logic: mathematicians and the origin of the computer. — N.Y.: Norton, 2005. — [Увле­ка­тель­ная исто­рия созда­ния компью­тера и тео­рии алго­ритмов, изложен­ная млад­шим современ­ни­ком и участ­ни­ком процесса].

Franzen T. Gödel's Theorem: An Incomplete Guide to its Use and Abuse. — Wellesley, Massachusetts: A. K. Peters, Ltd., 2005. — [Как надо и как не надо интер­пре­ти­ро­вать тео­ремы Гёделя о непол­ноте. Напри­мер, почему тео­ремы Гёделя не гово­рят о том, что чело­век в позна­ва­тель­ных спо­соб­но­стях пре­вос­хо­дит компью­тер].

Halpern J. Y., Harper R., Immerman N., Kolaitis Ph. G., Vardi M. Y., Vianu V. On the Unusual Effectiveness of Logic in Computer Science // Bulletin of Symbolic Logic. 2001. V. 7. N. 2. P. 213—236. — [О прак­ти­че­ских при­ложе­ниях логики, ста­тья напи­сана как манифест].