Jump to content

Кривая машина

Изображение машины Кривине

В теоретической информатике машина Кривина — это абстрактная машина (иногда называемая виртуальной машиной ). Как абстрактная машина, она имеет общие черты с машинами Тьюринга и SECD-машиной . Машина Кривина объясняет, как вычислить рекурсивную функцию. Более конкретно, он направлен на строгое определение к нормальной форме головы приведения лямбда-терма с использованием сокращения вызова по имени . Благодаря своему формализму он подробно рассказывает, как работает своего рода редукция, и закладывает теоретические основы операционной семантики функциональных языков программирования . С другой стороны, машина Кривина реализует вызов по имени, поскольку она оценивает тело β- редекса, прежде чем применить тело к своему параметру. Другими словами, в выражении ( λ x . t ) u сначала вычисляется λ x . прежде чем применять его к вам . В функциональном программировании это будет означать, что для оценки функции, примененной к параметру, сначала вычисляется функция, а затем применяется ее к параметру.

Машина Кривина была разработана французским логиком Жаном-Луи Кривином в начале 1980-х годов.

Звонок по имени и приведение головы в нормальную форму [ править ]

Машина Кривина основана на двух концепциях, связанных с лямбда-исчислением , а именно: уменьшении головы и вызове по имени.

головы нормальной Уменьшение формы

редекс [1] (говорят также β-редекс) — это термин лямбда-исчисления формы ( λ x . t ) u . Если терм имеет форму ( λ x .t ) ... u 1 , un его называют головным редексом . Головная нормальная форма — это термин лямбда-исчисления, который не является головным редексом. [а] Сокращение головы — это (непустая) последовательность сокращений термина, который сжимает редексы головы. Редукция головы термина t (которая, как предполагается, не находится в нормальной форме головы) — это редукция головы, которая начинается с термина t и заканчивается нормальной формой головы. С абстрактной точки зрения сокращение головы — это способ вычислений программы при вычислении рекурсивной подпрограммы. Важно понять, как такое сокращение может быть реализовано. Одна из целей машины Кривина — предложить процесс приведения термина в головную нормальную форму и формально описать этот процесс. Подобно тому, как Тьюринг использовал абстрактную машину для формального описания понятия алгоритма, Кривин использовал абстрактную машину для формального описания понятия приведения головы к нормальной форме.

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

Термин (( λ 0) ( λ 0)) ( λ 0) (который соответствует, если использовать явные переменные, термину ( λx . x ) ( λy . y ) ( λz . z )) не является нормальным в голове. форму, потому что ( λ 0) ( λ 0) сжимается в ( λ 0 ), давая головной редекс ( λ 0) ( λ 0), который сжимается в ( λ 0) и который, следовательно, является головной нормальной формой (( λ 0) ( λ 0)) ( λ 0). Другими словами, нормальная форма сокращения головы такова:

(( λ 0) ( λ 0)) ( λ 0) ➝ ( λ 0) ( λ 0) ➝ λ 0,

что соответствует:

( λx . x ) ( λy . y ) ( λz . z ) ➝ ( λy . y ) ( λz . z ) ➝ λz . з .

Далее мы увидим, как машина Кривина сокращает член (( λ 0) ( λ 0)) ( λ 0).

Звонить по имени [ править ]

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

Описание [ править ]

Представление машины Кривина, приведенное здесь, основано на обозначениях лямбда-термов, использующих индексы де Брёйна , и предполагает, что члены, для которых она вычисляет головные нормальные формы, замкнуты . [2] Он изменяет текущее состояние до тех пор, пока он больше не сможет этого делать, и в этом случае он получает нормальную форму головы. Эта головная нормальная форма представляет собой результат вычислений или выдает ошибку, означающую, что термин, с которого она началась, неверен. Однако он может вводить бесконечную последовательность переходов, а это означает, что член, который он пытается сократить, не имеет головной нормальной формы и соответствует непрерывным вычислениям.

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

Государство [ править ]

Государство состоит из трех компонентов [2]

  1. термин ,
  2. стек ,
  3. среда окружающая .

Термин представляет собой λ-терм с индексами де Брейна. Стек и среда принадлежат одной и той же рекурсивной структуре данных. Точнее, среда и стек — это списки пар <term, Environment> , которые называются замыканиями . Далее вставка в качестве главы списка ℓ (стека или окружения) элемента a записывается a:ℓ , тогда как пустой список записывается □. Стек — это место, где машина хранит замыкания, которые необходимо дополнительно оценить, тогда как среда — это связь между индексами и замыканиями в определенный момент времени во время оценки. Первый элемент среды — это замыкание, связанное с индексом 0 , второй элемент соответствует замыканию, связанному с индексом 1 и т. д. Если машине необходимо оценить индекс, она извлекает туда пару <term, Environment> замыкание, которое дает термин, который нужно оценить, и среду, в которой этот термин должен быть оценен. [б] Интуитивные пояснения позволяют понять правила работы машины. Если написать t для термина, p для стека, [с] и e для окружающей среды, состояния, связанные с этими тремя объектами, будут записываться t , p, e. Правила объясняют, как машина преобразует одно состояние в другое после выявления закономерностей между состояниями.

Начальное состояние направлено на оценку термина t , это состояние t ,□,□, в котором термин равен t , а стек и среда пусты. Конечное состояние (при отсутствии ошибки) имеет вид λ t , □, e, другими словами, результирующий терм представляет собой абстракцию вместе со своим окружением и пустым стеком.

Переходы [ править ]

Кривинская машина [2] имеет четыре перехода: App , Abs , Zero , Succ .

Переходы машины Кривина
Имя До После

Приложение

ту , п, е

т , < и , е>:p, е

пресс

λ t , < u ,e'>:p, e

т , р, < и , е'>:е

Ноль

0 , p, < t , e'>:e

т , п, е'

успех

n+1 , p, < t ,e'>:e

н, п, е

перехода Приложение удаляет параметр приложения и помещает его в стек для дальнейшей оценки. Переход Abs удаляет λ члена, вытаскивает замыкание из вершины стека и помещает его на вершину окружения. Это замыкание соответствует индексу де Брейна 0 в новой среде. Переход Зеро осуществляет первое замыкание среды. Срок этого закрытия становится текущим сроком, а среда этого закрытия становится текущей средой. Переход Succ удаляет первое замыкание списка окружения и уменьшает значение индекса.

Два примера [ править ]

Давайте оценим член ( λ 0 0) ( λ 0), который соответствует члену ( λ x . x x ) ( λ x . x ). Начнем с состояния ( λ 0 0) ( λ 0), □, □.

Оценка члена (λ 0 0) (λ 0)

( λ 0 0) ( λ 0), □, □

λ 0 0, [< λ 0, □>], □

0 0, □, [< λ 0, □>]

0, [<0, < λ 0, □>>], [< λ 0, □>]

λ 0, [<0, < λ 0, □>>], □

0, □, [<0, < λ 0, □>>]

0, □, [< λ 0, □>]

λ 0, □, □

Вывод состоит в том, что головная нормальная форма термина ( λ 0 0) ( λ 0) равна λ 0. Это переводится с переменными в: головная нормальная форма термина ( λ x . x x ) ( λ x . x ) x λ . х .

Давайте оценим член (( λ 0) ( λ 0)) ( λ 0), как показано ниже:

Оценка ((λ 0) (λ 0)) (λ 0)
(( λ 0) ( λ 0)) ( λ 0), □, □
( λ 0) ( λ 0), [<( λ 0), □>], □
( λ 0), [<( λ 0), □>,<( λ 0), □>], □
0, [<( λ 0), □>], [<( λ 0), □>]
λ 0, [<( λ 0), □>], □
0, □, [<( λ 0), □>]
( λ 0), □, □

Это подтверждает изложенный выше факт, что нормальная форма слагаемого (( λ 0) ( λ 0)) ( λ 0) равна ( λ 0).

Взаимные производные [ править ]

Машина Кривина, как и машина ЦЕК , не только функционально соответствует метациклическому вычислителю , [3] [4] [5] оно также синтаксически соответствует исчисление — вариант исчисления Пьера-Луи Кюрьена. исчисление явных замен , замкнутое при редукции, со стратегией редукции нормального порядка. [6] [7] [8]

Если исчисление включает в себя обобщенные сокращение (т.е. вложенное редекс сокращается за один шаг вместо двух), то синтаксически соответствующая машина совпадает с исходной машиной Жана-Луи Кривина. [9] [7] (Кроме того, если стратегия сокращения представляет собой вызов справа налево по значению и включает обобщенные сокращения, то синтаксически соответствующая машина — это Ксавье Лероя абстрактная машина ZINC , которая лежит в основе OCaml .) [10] [7]

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

Примечания [ править ]

  1. ^ Если иметь дело только с замкнутыми членами, эти члены принимают форму λ x . т .
  2. ^ Используя концепцию замыкания, можно заменить тройку <term,stack, Environment> , определяющую состояние, парой <closure,stack> , но это изменение носит косметический характер.
  3. ^ p — это куча , французское слово, обозначающее стек, которое мы не хотим путать с s , обозначающим состояние.

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

  1. ^ Барендрегт, Хендрик Питер (1984), Лямбда-исчисление: его синтаксис и семантика , Исследования по логике и основам математики, том. 103 (пересмотренная редакция), Северная Голландия, Амстердам, ISBN  0-444-87508-5 , заархивировано из оригинала 23 августа 2004 г. Исправления .
  2. ^ Jump up to: Перейти обратно: а б с Кюрьен, Пьер-Луи (1993). Категориальные комбинаторы, последовательные алгоритмы и функционалы (2-е изд.). Биркхаузер.
  3. ^ Шмидт, Дэвид А. (1980). «Машины переходов состояний для выражений лямбда-исчисления». Машины перехода состояний для выражений лямбда-исчисления . Конспекты лекций по информатике. Том. 94. Генерация компилятора, управляемая семантикой, LNCS 94. стр. 415–440. дои : 10.1007/3-540-10250-7_32 . ISBN  978-3-540-10250-2 .
  4. ^ Шмидт, Дэвид А. (2007). «Машины перехода состояний, еще раз». Вычисления высшего порядка и символьные вычисления . 20 (3): 333–335. дои : 10.1007/s10990-007-9017-x . S2CID   3012667 .
  5. ^ Агер, Мэдс Сиг; Бернацкий, Дариуш; Дэнви, Оливье ; Мидтгаард, январь (2003). «Функциональное соответствие между вычислителями и абстрактными машинами» . Серия отчетов БРИКС . 10 (13). 5-я Международная конференция ACM SIGPLAN по принципам и практике декларативного программирования (PPDP'03): 8–19. дои : 10.7146/brics.v10i13.21783 .
  6. ^ Кюрьен, Пьер-Луи (1991). «Абстрактная основа для машин окружающей среды» . Теоретическая информатика . 82 (2): 389–402. дои : 10.1016/0304-3975(91)90230-Y .
  7. ^ Jump up to: Перейти обратно: а б с Берначка, Малгожата; Дэнви, Оливье (2007). «Бетонная основа для экологических машин» . Транзакции ACM в вычислительной логике . 9 (1). Статья №6: 1–30. дои : 10.7146/brics.v13i3.21909 .
  8. ^ Свирстра, Воутер (2012). «От математики к абстрактной машине: формальный вывод исполняемой машины Кривина» . Электронные труды по теоретической информатике . 76 . Материалы четвертого семинара по математическо структурированному функциональному программированию (MSFP 2012): 163–177. arXiv : 1202.2924 . дои : 10.4204/EPTCS.76.10 . S2CID   14668530 .
  9. ^ Кривин, Жан-Луи (2007). «Машина лямбда-исчисления с вызовом по имени». Вычисления высшего порядка и символьные вычисления . 20 (3): 199–207. дои : 10.1007/s10990-007-9018-9 . S2CID   18158499 .
  10. ^ Лерой , Ксавье (1990). Эксперимент ZINC: экономичная реализация языка ML (Технический отчет). Инрия. 117.

Содержимое этой редакции переведено из существующей статьи французской Википедии по адресу fr:Machine de Krivine ; см. его историю для определения авторства.

Библиография [ править ]

  • Жан-Луи Кривин: Машина лямбда-исчисления с вызовом по имени . Высший порядок и символические вычисления 20(3): 199-207 (2007), архив .
  • Кюрьен, Пьер-Луи (1993). Категориальные комбинаторы, последовательные алгоритмы и функционалы (2-е изд.). Биркхаузер.
  • Фредерик Ланг: Объяснение ленивой машины Кривина с помощью явной подстановки и адресов . Высший порядок и символические вычисления 20(3): 257-270 (2007), архив .
  • Оливье Дэнви (ред.): Редакционная статья специального выпуска журнала «Высшие порядки и символические вычисления на машине Кривина», том. 20(3) (2007)

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

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: f89c5d466a8a763afded38d4054bbdf7__1706068380
URL1:https://arc.ask3.ru/arc/aa/f8/f7/f89c5d466a8a763afded38d4054bbdf7.html
Заголовок, (Title) документа по адресу, URL1:
Krivine machine - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)