Что такое дробно-подобная запись в «дискретной математике» для формальных правил?

18

В статье «Бесконфликтный реплицированный тип данных JSON» я встретил эту запись для формального определения «правил»:

Некоторые из «правил», показанных в статье] [1

Как называется эта запись? Как мне это прочитать?

Например:

  • DOCправило не имеет ничего в своем «числитель» - почему?
  • то EXECи GETправила , по всей видимости, имеют два отдельных условия выше линии, что это значит?
  • VARправило выделяется немного , как хорошо, так как в то время как многие другие правила используют какое - то стрелки (который я бы означать «подразумевает») наверху это один только кажется , говорят , что х есть элемент чего - то.
  • почти все приправлено инициалом, Ap,который в тексте описывается как «состояние реплики p описывается Ap, конечной частичной функцией» - как опытный читатель этой нотации будет «видеть» эту часть каждого правила?

На этом сайте был предложен связанный вопрос, который имеет очень похожую нотацию, на вопрос о значении ⟨B, s⟩ -> ⟨B ', s'⟩ как исходного правила в этом вопросе о малых шагах. семантика? - это помечено как операционная семантика , и это, кажется, является сильным лидерством. Действительно ли это та основа, в которой я должен интерпретировать эти цифры? Не могли бы вы вкратце изложить это в форме «ускоренного курса», чтобы, даже если я не смог проверить правильность их доказательств, я хотя бы смог немного лучше понять, что они говорят в этом разделе?

natevw
источник

Ответы:

25

Это стандартное обозначение для правила вывода . Помещения располагаются над горизонтальной линией, а вывод - под чертой. Таким образом, он выглядит как «дробь», но с одним или несколькими логическими предложениями над линией и одним предложением под линией. Если рядом с ней вы видите метку (например, «LET» или «VAR»), это просто удобочитаемое имя для идентификации конкретного правила.

Вы также можете увидеть, что это называется естественным удержанием или естественным удержанием в стиле Генцена .

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

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

DW
источник
2
Одно известное использование - это определение типа Хиндли-Милнера: в этом ответе «Какую часть Милнера-Хиндли вы не понимаете?» Рассказывается, как читать и использовать этот набор правил.
DylanSp
Одно небольшое исправление: предпосылки и выводы - это суждения , а не суждения . Предложения являются специфической формой суждения. В этом отношении суждения очевидны , а не верны (потому что понятие истины трудно определить и не очень интересно для семантики языка программирования).
садовник
7

Вот очень неофициальное объяснение, которое может помочь людям, незнакомым с формальными обозначениями, войти в дверь. Это не заменяет формальное определение!

Ар является состоянием вашей системы или вашей работающей программы. «Состояние» может означать много вещей, но в этом случае оно включает список всех определенных локальных переменных и их значений. Почему Ap функция? Потому что это удобный способ выражения присваивания переменных: Ap (x) дает значение переменной x .

Теперь давайте возьмем правило EXEC в качестве примера. Он определяет семантику выполнения команды cmd1, за которой следует команда cmd2 , т. Е. Что происходит с состоянием Ap системы при выполнении cmd1, за которым следует cmd2 .

  • Над линией: это помещения. Что они говорят: «Пусть cmd1 будет командой. Если вы выполните команду cmd1, когда ваша система находится в состоянии Ap , ваша система перейдет в новое состояние Ap ' ».
  • Ниже строки: здесь правило описывает, что значит последовательно выполнять две команды cmd1 и cmd2 . Что он говорит: «Предполагая, что ваша система находится в состоянии Ap , выполнение cmd1, а затем cmd2 означает выполнение cmd2, когда ваша система находится в состоянии Ap ' » (помните, что Ap' - это состояние, которое вы получаете после выполнения cmd1 , как определено в предпосылки).

Другие правила описывают семантику отдельных команд и выражений. Например, правило VAR описывает, что значит «выполнять» переменную: если x - локальная переменная (над строкой), то что это значит для оценки / выполнения переменной x ? Это написано ниже строки: когда ваша программа находится в состоянии Ap , оценка x дает вам значение x , то есть Ap (x) .

Надеюсь, это поможет.

trunklop
источник
Спасибо, это очень помогает понять и именно то, что я искал! Однако это оставляет мой первый вопрос без ответа: у этой нотации есть имя, вообще и / или в этом конкретном контексте? Мое предположение было «Оперативная семантика», но другой ответ здесь пока говорит, что это просто «правила вывода». Я предполагаю, что если я задам вопрос из двух частей, я заслуживаю того, чтобы разделить ответы, но теперь я разрываюсь между тем, который принять :-)
natevw
1
@natevw Это правила вывода. Операционная семантика - это только одна из многих вещей, которые обычно выражаются с помощью правил вывода.
Жиль "ТАК - перестань быть злым"