Введение в контексты оценки в семантике программирования

Введение в контексты оценки в семантике программирования

7 июля 2025 г.
  1. Введение

  2. Перевод на последовательное исчисление

    2.1 Арифметические выражения

    2.2 Пусть привязки

    2.3 Определения верхнего уровня

    2.4 Алгебраические данные и типы кодов

    2.5 первоклассные функции

    2.6 Операторы управления

  3. Оценка в контексте

    3.1 Контексты оценки для развлечения

    3.2 Сосредоточение внимания на оценке в сердечнике

  4. Правила печати

    4.1 Правила печати для развлечения

    4.2 Правила печати для Core

    4.3 Тип. Звукость

  5. Понимание

    5.1 Контексты оценки являются первым классом

    5.2 Данные двойные до кодата

    5.3 LET-связы

    5.4 Трансформация случая

    5.5 Прямой и косвенный потребители

    5.6 Позвоните в запас, вызовов и eta-laws

    5.7 Линейная логика и двойственность исключений

  6. Связанная работа

  7. Заключение, заявление о доступности данных и подтверждение

A. Взаимосвязь с последовательным исчислением

B. Правила набора развлечений

C. Оперативная семантика лейбла/goto

Ссылки

3 Оценка в контексте

В конце раздела 2.1 мы столкнулись с проблемой, которую мы еще не можем полностью оценить термин (⌜2⌝ ∗ ⌜4⌝) + ⌜5⌝ в веселье или его перевод 𝜇𝛼. + (𝜇𝛽. ∗ (⌜2⌝, ⌜4⌝; 𝛽), ⌜5⌝; 𝛼) в ядре с доступными нам правилами: мы застряли. В этом разделе мы наконец -то решаем эту проблему. Мы собираемся показать, как мы сможем оценить суб -фрэльс развлечений в разделе 3.1, но, поскольку в конечном итоге мы больше заинтересованы в составлении программ в ядро ​​для оптимизации и сокращения этих программ, мы тратим больше времени на проблему для ядра в разделе 3.2.

3.1 Контексты оценки для развлечения

Проблема с оценкой термина (⌜2⌝ ∗ ⌜4⌝) + ⌜5⌝ заключается в том, что доступные правила позволяют только уменьшать прямые Redexes, а не Redexes, которые вложены где -то в пределах термина. Контексты оценки решают эту проблему, указав местоположения в пределах термина, которые находятся в положении оценки. В нашем примере термин (⌜2⌝ ∗ ⌜4⌝) + ⌜5⌝ может быть учтен в контексте оценки □ + ⌜5⌝ и Redex ⌜2⌝ ∗ ⌜4⌝. Затем мы можем использовать старые правила, чтобы уменьшить этот Redex до ⌜8⌝, а затем подключить этот результат к контексту оценки, который дает новый термин ⌜8⌝ + ⌜5⌝. Синтаксис контекстов оценки приведен в определении 3.1.

Эти контексты оценки также позволяют нам формально указать второе приблизительное правило оценки метки и конструкции GOTO из Раздела 2.6:

𝐸 [этикетка𝛼 {𝐸 ′ [goto(𝔱; 𝛼)]}] ⊲ 𝐸 [𝔱]

Здесь мы снова предполагаем, что 𝛼 не встречается свободным в 𝔱 и, кроме того, контекст внутренней оценки 𝐸 ′ не содержит другой конструкции метки. Для полной эксплуатационной семантики метки/goto нам также необходимо обрабатывать случаи, когда 𝛼 могут происходить бесплатно в 𝔱, и где 𝐸 ′ может содержать другие этикетки. В противном случае мы могли бы застрять во время оценки даже для закрытых и благоустроенных терминов, то есть теорема о прогрессе (см. Теорему 4.1 в разделе 4.3) не будет удерживать. Поскольку полная семантика, по сути, является предложением других классических операторов управления (i.p., Let/cc; также см. Обсуждение в разделе 5.3) и требует более формализма, мы не даем его здесь и вместо этого передаем заинтересованного читателя к краткому обсуждению в Приложении C.

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

Авторы:

(1) Дэвид Биндер, Университет Тюбингена, Германия;

(2) Марко Цшенке, Университет Тюбингена, Германия;

(3) Мариус Мюллер, Университет Тюбингена, Германия;

(4) Клаус Остерманн, Университет Тюбингена, Германия.


Эта статья естьДоступно на Arxivпод CC по 4,0 лицензии.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE