~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ F5F8FE63D8BBBA1D50CE0DE6C40E24A6__1718407500 ✰
Заголовок документа оригинал.:
✰ Combinatory logic - Wikipedia ✰
Заголовок документа перевод.:
✰ Комбинаторная логика — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Combinatory_logic ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/f5/a6/f5f8fe63d8bbba1d50ce0de6c40e24a6.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/f5/a6/f5f8fe63d8bbba1d50ce0de6c40e24a6__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 04:37:14 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 15 June 2024, at 02:25 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Комбинаторная логика — Википедия Jump to content

Комбинаторная логика

Из Википедии, бесплатной энциклопедии

Комбинаторная логика — это обозначение, позволяющее устранить необходимость в количественных переменных в математической логике . Его представил Моисей Шёнфинкель. [1] и Хаскелл Карри , [2] и совсем недавно использовался в информатике как теоретическая модель вычислений , а также как основа для разработки функциональных языков программирования . Он основан на комбинаторах , которые были представлены Шенфинкелем в 1920 году с идеей предоставить аналогичный способ создания функций — и удалить любое упоминание переменных — особенно в логике предикатов . Комбинатор — это функция высшего порядка , которая использует только приложение функции и ранее определенные комбинаторы для определения результата на основе своих аргументов.

По математике [ править ]

Комбинаторная логика изначально задумывалась как «пред-логика», которая должна была прояснить роль количественных переменных в логике, по существу, путем их исключения. Другим способом устранения количественных переменных является Куайна логика функторов предикатов . Хотя выразительная сила комбинаторной логики обычно превышает силу логики первого порядка , выразительная сила логики функторов предикатов идентична силе логики первого порядка ( Quine 1960, 1966, 1976 ).

Первоначальный изобретатель комбинаторной логики Мозес Шенфинкель ничего не опубликовал по комбинаторной логике после своей оригинальной статьи 1924 года. Хаскелл Карри заново открыл комбинаторы, работая преподавателем в Принстонском университете в конце 1927 года. [3] В конце 1930-х годов Алонсо Чёрч и его студенты в Принстоне изобрели конкурирующий формализм функциональной абстракции — лямбда-исчисление , которое оказалось более популярным, чем комбинаторная логика. Результатом этих исторических случайностей стало то, что до тех пор, пока теоретическая информатика не начала проявлять интерес к комбинаторной логике в 1960-х и 1970-х годах, почти все работы по этому предмету велись Хаскеллом Карри и его учениками или Робертом Фейсом в Бельгии . Карри и Фейс (1958), а также Карри и др. (1972) рассматривают раннюю историю комбинаторной логики. Более современную трактовку комбинаторной логики и лямбда-исчисления вместе можно найти в книге Барендрегта . [4] в котором рассматриваются модели Даной Скотт комбинаторной логики, разработанные в 1960-х и 1970-х годах.

В вычислительной технике [ править ]

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

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

Комбинаторная логика может иметь множество интерпретаций. Многие ранние статьи Карри показывали, как перевести наборы аксиом традиционной логики в уравнения комбинаторной логики. [5] Дана Скотт в 1960-х и 1970-х годах показала, как объединить теорию моделей и комбинаторную логику.

Краткое изложение лямбда-исчисления [ править ]

Лямбда-исчисление связано с объектами, называемыми лямбда-термами , которые могут быть представлены следующими тремя формами строк:

где — это имя переменной, взятое из предопределенного бесконечного набора имен переменных, и и являются лямбда-термами.

Условия формы называются абстракциями . Переменная v называется формальным параметром абстракции, а является телом абстракции. Термин представляет функцию, которая, примененная к аргументу, связывает формальный параметр v с аргументом, а затем вычисляет результирующее значение - то есть возвращается , где каждое вхождение v заменяется аргументом.

Условия формы называются приложениями . Вызов или выполнение функции модели приложения: функция, представленная должен быть вызван с помощью в качестве аргумента, и результат вычисляется. Если (иногда называемый приложением ) — это абстракция, этот термин можно сократить : , аргумент, может быть подставлен в тело вместо формального параметра , и результатом является новый лямбда-терм, эквивалентный старому . Если лямбда-терм не содержит подчленов вида тогда его нельзя привести и говорят, что он находится в нормальной форме .

Выражение представляет собой результат взятия термина E и замены всех свободных вхождений v в него на a . Таким образом мы пишем

По соглашению мы принимаем как сокращение для (т.е. приложение остается ассоциативным ).

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

Квадрат х равен

(С использованием " ", чтобы указать умножение.) x здесь является формальным параметром функции. Чтобы вычислить квадрат для определенного аргумента, скажем, 3, мы вставляем его в определение вместо формального параметра:

Квадрат 3 это

Чтобы оценить полученное выражение , нам придется прибегнуть к нашим знаниям об умножении и числе 3. Поскольку любое вычисление представляет собой просто композицию оценки подходящих функций по подходящим примитивным аргументам, этого простого принципа замены достаточно, чтобы уловить основной механизм вычислений. Более того, в лямбда-исчислении такие понятия, как «3» и « ' может быть представлен без необходимости использования внешних примитивных операторов или констант. В лямбда-исчислении можно идентифицировать термины, которые при правильной интерпретации ведут себя как число 3 и как оператор умножения, см. Кодирование Чёрча .

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

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

Комбинаторное исчисление [ править ]

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

Комбинированные термины [ править ]

Комбинированный термин имеет одну из следующих форм:

Синтаксис Имя Описание
Икс Переменная Символ или строка, представляющая комбинационный термин.
п Примитивная функция из символов комбинатора I , K , S. Один
(Миннесота) Приложение Применение функции к аргументу. M и N — комбинационные термины.

Примитивные функции — это комбинаторы или функции, которые, если рассматривать их как лямбда-термины, не содержат свободных переменных .

Чтобы сократить обозначения, общее соглашение состоит в том, что , или даже , обозначает термин . Это то же общее соглашение (левая ассоциативность), что и для многократного применения в лямбда-исчислении.

Редукция комбинаторной логики [ править ]

В комбинаторной логике каждый примитивный комбинатор имеет правило редукции вида

( п Икс 1 ... Икс п ) знак равно E

где E — термин, упоминающий только переменные из набора { x 1 ... x n } . Именно таким образом примитивные комбинаторы ведут себя как функции.

Примеры комбинаторов [ править ]

Простейшим примером комбинатора является I , тождественный комбинатор, определяемый формулой

( я х ) = х

для всех условий x . Другой простой комбинатор — K , который создает постоянные функции: ( K x ) — это функция, которая для любого аргумента возвращает x , поэтому мы говорим

(( K Икс ) y ) знак равно Икс

для всех условий x и y . Или, следуя соглашению о многократном применении,

( К Икс у ) знак равно Икс

Третий комбинатор — S , который представляет собой обобщенную версию приложения:

( S Икс yz ) знак равно ( xz ( yz ))

S применяет x к y после первой замены z в каждый из них. Или, другими словами, x применяется к y внутри среды z .

Учитывая S и K , сам I не нужен, так как его можно построить из двух других:

(( СКК ) x )
= ( СКК х )
знак равно Кх ( ( Кх ) )
= х

для любого термина x . Обратите внимание, что хотя (( SKK ) Икс ) = ( я Икс ) для любого Икс , ( СКК ) не равен I. сам по себе Мы говорим, что термины экстенсионально равны . Расширенное равенство отражает математическое понятие равенства функций: две функции равны, если они всегда дают одинаковые результаты для одних и тех же аргументов. Напротив, сами термины вместе с сокращением примитивных комбинаторов отражают идею интенсионального равенства функций: две функции равны , только если они имеют идентичные реализации вплоть до расширения примитивных комбинаторов. Существует много способов реализовать функцию идентификации; ( СКК ) и я в числе этих способов. ( СКС ) — еще один. Мы будем использовать слово эквивалент для обозначения экстенсионального равенства, оставляя равным для идентичных комбинаторных терминов.

Более интересный комбинатор — комбинатор с фиксированной точкой или Y- комбинатор, который можно использовать для реализации рекурсии .

Полнота основы СК [ править ]

S и K можно составить так, чтобы получить комбинаторы, которые экстенсионально равны любому лямбда-терму и, следовательно, по тезису Чёрча, любой вычислимой функции. Доказательство состоит в том, чтобы представить преобразование T [ ], которое преобразует произвольный лямбда-терм в эквивалентный комбинатор.

T [ ] можно определить следующим образом:

  1. Т [ х ] => х
  2. Т [( Е Е ₂)] => ( Т [ Е ₁] Т [ Е ₂])
  3. Т [ λx . E ] => ( K T [ E ]) (если x не встречается свободно в E )
  4. Т [ λx . х ] => я
  5. Т [ λx . λy . E ] => Т [ λx . Т [ λy . E ]] (если x встречается свободно в E )
  6. T [ λx .( E E ₂)] => ( S T [ λx . E ₁] T [ λx . E₂ ]) (если x встречается свободно в E ₁ или E ₂)

Обратите внимание, что T [ ] в заданном виде не является хорошо типизированной математической функцией, а скорее переписчиком терминов: хотя в конечном итоге оно дает комбинатор, преобразование может генерировать промежуточные выражения, которые не являются ни лямбда-термами, ни комбинаторами, согласно правилу (5).

Этот процесс также известен как устранение абстракции . Это определение является исчерпывающим: любое лямбда-выражение будет подчиняться только одному из этих правил (см. Краткое описание лямбда-исчисления выше).

Это связано с процессом абстракции скобок , который берет выражение E , построенное на основе переменных и приложения, и создает выражение-комбинатор [x]E, в котором переменная x не является свободной, так что [ x ] E x = E. выполняется Очень простой алгоритм абстракции скобок определяется индукцией по структуре выражений следующим образом: [6]

  1. [ x ] y := K y
  2. [ х ] х := я
  3. [ Икс ]( Е₁ Е₂ ) = S ([ Икс ] Е₁ )([ Икс ] Е₂ )

Абстракция скобок вызывает перевод лямбда-терминов в выражения комбинатора путем интерпретации лямбда-абстракций с использованием алгоритма абстракции скобок.

Преобразование лямбда-члена в эквивалентный комбинаторный термин [ править ]

Например, мы преобразуем лямбда-терм λx . λy .( y x ) в комбинаторный термин:

Т [ λx . λy .( y x )]
знак равно Т [ λx . T [ λy .( y x )]] (на 5)
= T [ λx .( S T [ λy . y ] T [ λy . x ])] (на 6)
= T [ λx .( SI T [ λy . x ])] (на 4)
= T [ λx .( SI ( K T [ x ]))] (на 3)
= T [ λx .( SI ( K x ))] (на 1)
= ( S T [ λx .( SI )] T [ λx .( K x )]) (на 6)
= ( S ( K ( SI )) T [ λx .( K x )]) (на 3)
= ( S ( K ( SI )) ( S T [ λx . K ] T [ λx . x ])) (на 6)
= ( S ( K ( SI )) ( S ( KK ) T [ λx . x ])) (на 3)
= ( S ( K ( SI )) ( S ( KK ) I )) (на 4)

Если мы применим этот комбинаторный термин к любым двум терминам x и y (подавая их в виде очереди в комбинатор «справа»), он уменьшится следующим образом:

( S ( K ( S I )) ( S ( K K ) I ) xy)
= ( K ( S I ) x ( S ( K K ) I x) y)
= ( S I ( S ( K K ) I x) y)
знак равно ( я y ( S ( K K ) я ху))
= (y ( S ( K K ) I xy))
= (y ( K K x ( I x) y))
= (y ( K ( I x) y))
= (у ( я х))
= (ух)

Комбинаторное представление ( S ( K ( SI )) ( S ( KK ) I )) намного длиннее, чем представление в виде лямбда-терма λx . λy .(yx). Это типично. В общем, конструкция T [ ] может расширить лямбда-член длины n до комбинаторного члена длины Θ ( n 3 ). [7]

Объяснение преобразования T [] [ править ]

Преобразование T [ ] мотивировано желанием устранить абстракцию. Два особых случая, правила 3 ​​и 4, тривиальны: λx . x явно эквивалентен I и λx . Очевидно, что E эквивалентно ( K T [ E ]), если не появляется свободным в E. x

Первые два правила также просты: переменные преобразуются сами в себя, а приложения, которые разрешены в комбинаторных терминах, преобразуются в комбинаторы простым преобразованием приложения и аргумента в комбинаторы.

Интерес представляют правила 5 и 6. Правило 5 просто гласит, что для преобразования сложной абстракции в комбинатор мы должны сначала преобразовать ее тело в комбинатор, а затем устранить абстракцию. Правило 6 фактически устраняет абстракцию.

λx .( E E ₂) — это функция, которая принимает аргумент, скажем a , и подставляет его в лямбда-термин ( E E ₂) вместо x , получая ( E E ₂)[ x : = a ] . Но подставить a в ( E E ₂) вместо x — это то же самое, что подставить его одновременно в E ₁ и E ₂, поэтому

( E E ₂)[ x := a ] = ( E ₁[ x := a ] E ₂[ x := a ])
( λx .( E E ₂) а ) знак равно (( λx . E а ) ( λx . E а ))
знак равно ( S λx . E λx . E а )
знак равно (( S λx . E₁ λx . E ₂) а )

По экстенсиональному равенству

λx .( E E ₂) = ( S λx . E λx . E ₂)

Следовательно, чтобы найти комбинатор, эквивалентный λx .( E E ₂), достаточно найти комбинатор, эквивалентный ( S λx . E λx . E ₂), и

( S Т [ λx . E ₁] T [ λx . E ₂])

очевидно, отвечает всем требованиям. E ₁ и E ₂ содержат строго меньше приложений, чем ( E E ₂), поэтому рекурсия должна завершиться лямбда-термом без каких-либо приложений вообще — либо переменной, либо термином из форма λx . Э.

Упрощения трансформации [ править ]

η-редукция [ править ]

Комбинаторы, порожденные преобразованием T [ ], можно уменьшить, если принять во внимание правило η-редукции :

T [ λx .( E x )] = T [ E ] (если x не свободен в E )

λx .( E x) — функция, которая принимает аргумент x и применяет к нему функцию E ; функции E. это экстенсионально равно самой Поэтому достаточно преобразовать E к комбинаторной форме.

Принимая во внимание это упрощение, приведенный выше пример выглядит следующим образом:

  Т [ λx . λy .( y x )]
= ...
знак равно ( S ( K ( SI )) T [ λx .( K x )])
= ( S ( K ( SI )) K ) (путем η-редукции)

Этот комбинатор эквивалентен предыдущему, более длинному:

  ( S ( K ( SI )) K x y )
знак равно ( K ( SI ) Икс ( K Икс ) y )
знак равно ( SI ( K Икс ) y )
знак равно ( я y ( K x y ))
знак равно ( у ( К Икс у ))
= ( ух )

Аналогично, исходная версия преобразования T [ ] преобразовала тождественную функцию λf . λx .( f x ) в ( S ( S ( KS ) ( S ( KK ) I )) ( KI )). По правилу η-редукции λf . λx .( f x ) есть превратился Я. в

Однобалльная основа [ править ]

Существуют одноточечные базы, из которых можно составить каждый комбинатор, экстенсионально равный любому лямбда-терму. Простейшим примером такого базиса является { X }, где:

Икс λx .((x S ) K )

Нетрудно убедиться в том, что:

Икс ( Икс ( Икс ) ) = б К и
Икс ( Икс ( Икс ( Х Х ))) = б С.

Поскольку { K , S } является базисом, отсюда следует, что { X } тоже является базисом. Язык программирования Iota использует X в качестве единственного комбинатора.

Другой простой пример одноточечного базиса:

X' λx .(x K S K ) с
( Х' Х' ) Х' = б К и
Х' ( Х' Х' ) = б С

На самом деле таких баз существует бесконечно много. [8]

Комбинаторы B, C [ править ]

В дополнение к S и K включил два комбинатора , Шенфинкель (1924) которые теперь называются B и C , со следующими сокращениями:

( C ж г Икс ) знак равно (( ж Икс ) г )
( B ж г Икс ) знак равно ( ж ( г Икс ))

Он также объясняет, как их, в свою очередь, можно выразить, используя только S и K :

B знак равно ( S ( KS ) K )
C знак равно ( S ( S ( K ( S ( KS ) K )) S ) ( KK ))

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

  1. Т [ х ] ⇒ х
  2. Т [( E₁ E₂ )] ⇒ ( Т [ E₁ ] Т [ E₂ ])
  3. Т [ λx . E ] ⇒ ( K T [ E ]) (если x не свободен в E )
  4. Т [ λx . х ] ⇒ Я
  5. Т [ λx . λy . Е ] ⇒ Т [ λx . Т [ λy . E ]] (если x свободен в E )
  6. T [ λx .( E₁ E₂ )] ⇒ ( S T [ λx . E₁ ] T [ λx . E₂ ]) (если x свободен как в E₁ , так и в E₂ )
  7. T [ λx .( E₁ E₂ )] ⇒ ( C T [ λx . E₁ ] T [ E₂ ]) (если x свободен в E₁ , но не E₂ )
  8. T [ λx .( E₁ E₂ )] ⇒ ( BT T [ E₁ ] [ , λx . E₂ ]) (если x свободен в E₂ но не в E₁ )

Используя комбинаторы B и C , преобразование λx . λy .( y x ) выглядит так:

  Т [ λx . λy .( y x )]
знак равно Т [ λx . Т [ λy .( y x )]]
= T [ λx .( C T [ λy . y ] x )] (по правилу 7)
знак равно Т [ λx .( C I x )]
= ( C I ) (n-редукция)
= (традиционные канонические обозначения: )
= (традиционные канонические обозначения: )

И действительно, ( C I x y ) сводится к ( y x ):

  ( С я х у )
= ( я y x )
= ( у Икс )

Мотивация здесь в том, что и C являются ограниченными версиями S. B В то время как S принимает значение и подставляет его как в приложение, так и в его аргумент перед выполнением приложения, C выполняет замена только в заявлении, а B только в аргументе.

Современные названия комбинаторов взяты из докторской диссертации Хаскелла Карри 1930 года (см. Система B, C, K, W ). В S оригинальной статье Шенфинкеля то, что мы сейчас называем , K , I , B и C , называлось S , C , I , Z и T соответственно.

Уменьшение размера комбинатора, возникающее в результате новых правил преобразования, также может быть достигнуто без введения B и C , как показано в разделе 3.2 Тромпа (2008) .

CL K против I Расчет CL

Необходимо проводить различие между исчислением CL K , описанным в этой статье CL I. , и исчислением Это различие соответствует разнице между λ K и λ I. исчислением В отличие от исчисления λ K , исчисление λ I ограничивает абстракции:

λx . E где x имеет хотя бы одно свободное вхождение в E. ,

Как следствие, комбинатор K отсутствует ни в исчислении λ I , ни в CL I. исчислении Константы CL I : I , B , C и S , которые образуют основу, из которой CL I могут быть составлены все термины (равенство по модулю). Каждый терм λ I может быть преобразован в равный комбинатор CL I по правилам, аналогичным представленным выше для преобразования термов λ K в CL K. комбинаторы См. главу 9 в Barendregt (1984).

Обратное преобразование [ править ]

Преобразование L [ ] из комбинаторных термов в лямбда-термины тривиально:

L [ я ] знак равно λx . Икс
L [ K ] знак равно λx . λy . Икс
L [ C ] знак равно λx . λy . λz .( Икс z y )
L [ B ] знак равно λx . λy . λz .( Икс ( y z ))
L [ S ] знак равно λx . λy . λz .( Икс z ( y z ))
L [( E₁ E₂ )] = ( L [ E₁ ] L [ E₂ ])

Однако обратите внимание, что это преобразование не является обратным преобразование любой из версий T [ ], которые мы видели.

Неразрешимость комбинаторного исчисления [ править ]

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

Неопределимость предикатами [ править ]

Неразрешимые выше проблемы (эквивалентность, существование нормальной формы и т. д.) принимают в качестве входных данных синтаксические представления терминов в подходящей кодировке (например, кодировке Чёрча). Можно также рассмотреть игрушечную тривиальную модель вычислений, в которой мы «вычисляем» свойства терминов с помощью комбинаторов, применяемых непосредственно к самим терминам в качестве аргументов, а не к их синтаксическим представлениям. Точнее, пусть предикат является комбинатором, который при применении возвращает либо T , либо F (где T и F представляют собой общепринятые кодировки Чёрча истинного и ложного, λx . λy . x и λx . λy . y , преобразованные в комбинаторную логику комбинированные версии имеют T = K и F = ( K I ) ). Предикат N является нетривиальным , если существуют два аргумента A и B такие, NA что = T и N B = F . Комбинатор N является полным , если N M имеет нормальную форму для каждого аргумента M . Аналог теоремы Райса для этой игрушечной модели гласит, что каждый полный предикат тривиален. Доказательство этой теоремы довольно простое. [9]

Доказательство

Доведением до абсурда. существует полный нетривиальный предикат, скажем N. Предположим , Поскольку предполагается, что N нетривиально, существуют комбинаторы A и B такие, что

( N А ) = Т и
( N B ) знак равно F .
Определим ОТРИЦАНИЕ ≡ λx .(если ( N x ), то B else A ) ≡ λx .(( N x ) B A )
Определите АБСУРДУМ ≡ ( Y ОТРИЦАНИЕ)

Теорема о неподвижной точке дает: АБСУРДУМ = (ОТРИЦАНИЕ АБСУРДУМ), для

АБСУРДУМ ≡ ( ОТРИЦАНИЕ Y ) = (ОТРИЦАНИЕ ( ОТРИЦАНИЕ Y )) ≡ (ОТРИЦАНИЕ АБСУРДУМ).

Поскольку N должно быть полным либо:

  1. ( N ABSURDUM) = F или
  2. ( N абсурд) = T
  • Случай 1: F = ( N АБСУРДУМ) = N (ОТРИЦАНИЕ АБСУРДУМ) = ( NA ) = T , противоречие.
  • Случай 2: T = ( N АБСУРДУМ) = N (ОТРИЦАНИЕ АБСУРДУМ) = ( N B ) = F , снова противоречие.

Следовательно, ( N ABSURDUM) не является ни T , ни F , что противоречит предположению, что N будет полным нетривиальным предикатом. КЭД

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

(РАВНО AB ) = T , если A = B и
(РАВНО AB ) = F , если А B .

EQUAL существовало, то для всех A Если бы λx. (EQUAL x A ) должен быть полным нетривиальным предикатом.

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

Приложения [ править ]

Компиляция функциональных языков [ править ]

Дэвид Тернер использовал свои комбинаторы для реализации языка программирования SASL .

Кеннет Э. Айверсон использовал примитивы, основанные на комбинаторах Карри, в своем языке программирования J , преемнике APL . Это позволило сделать то, что Айверсон назвал неявным программированием , то есть программирование в функциональных выражениях, не содержащих переменных, а также мощные инструменты для работы с такими программами. Оказывается, неявное программирование возможно на любом APL-подобном языке с определяемыми пользователем операторами. [10]

Логика [ править ]

Изоморфизм Карри-Ховарда подразумевает связь между логикой и программированием: каждое доказательство теоремы интуиционистской логики соответствует редукции типизированного лямбда-терма, и наоборот. Более того, теоремы можно идентифицировать по сигнатурам функционального типа. В частности, типизированная комбинаторная логика соответствует системе Гильберта в теории доказательств .

Комбинаторы K и S соответствуют аксиомам

АК : А → ( Б А ),
КАК : ( А → ( В С )) → (( А В ) → ( А С )),

и применение функции соответствует правилу отделения (modus ponens)

МП из А и А Б выводится Б. :

Исчисление, состоящее из AK , AS и MP, является полным для импликативного фрагмента интуиционистской логики, что можно увидеть следующим образом. Рассмотрим множество W всех дедуктивно замкнутых множеств формул, упорядоченных по включению . Затем является интуиционистской рамкой Крипке , и мы определяем модель в этом кадре автор

Это определение подчиняется условиям выполнения →: с одной стороны, если , и таков, что и , затем по модусу поненсу. С другой стороны, если , затем по теореме о дедукции , таким образом, дедуктивное замыкание это элемент такой, что , , и .

Пусть А — любая формула, недоказуемая в исчислении. Тогда A не принадлежит дедуктивному замыканию X пустого множества, поэтому , и A не является интуиционистски допустимым.

См. также [ править ]

Ссылки [ править ]

Литература [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: F5F8FE63D8BBBA1D50CE0DE6C40E24A6__1718407500
URL1:https://en.wikipedia.org/wiki/Combinatory_logic
Заголовок, (Title) документа по адресу, URL1:
Combinatory logic - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)