2014-10-17 12 views
10

Может кто-нибудь помочь мне понять следующее определение из бумаги Вадлера под названием «Comprehending Monads»? (Выдержка из раздела 3.2/страница 9, то есть «Строгость Монада» подраздел.)Что означает «⊥» в «Монархии строгости» из статьи П. Вадлера?


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

строгой ех =, если х ≠ ⊥, то ех еще ⊥.

Оперативно, строгая ех уменьшается на первом снижении х к слабой головной нормальной форме (WHNF), а затем уменьшая применение ех. С другой стороны, это безопасно для снижения х и ех параллельно, но не разрешить доступ к результату до х находится в WHNF.


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

Учитывая, что Вадлер продолжает утверждать, что «мы будем использовать [строгие] методы контроля за ленивыми программами», это кажется довольно важной концепцией для понимания.

+7

Обычно это называется дном. – Squidly

+2

Что ваш вопрос имеет отношение к монадам? – leftaroundabout

+3

Это называется дном, или в Haskell, который называется «undefined». Это лишь одна из форм, хотя технически нижняя часть также является не-завершающим вычислением, например 'length [1 ..]' – bheklilr

ответ

10

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

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

7

В стандартной булевой логике, символ , прочитать или константы 'лжи нижней, это просто заявление, которое всегда ложно, эквивалент false постоянная в языках программирования. Форма представляет собой перевернутую (перевернутую) версию символа (verum или top), что эквивалентно true - и есть мнемоническое значение в том, что символ выглядит как заглавная буква T. (Названия verum и falsum являются латинскими для «истинных» и «ложных», имена «сверху» и «снизу» исходят из использования символов в теории упорядоченных множеств, где они были выбраны на основе расположение горизонтальной перекладины.)

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

+5

За исключением того, что в ленивом функциональном языке 'f x' может быть определен, даже если' x' не определено! например если 'f = const 1'. Вадлер не просто замечает, что результат функции неопределен, если он не определен (поскольку это не всегда верно), он * определяет * функцию 'strict', которая преобразует любую функцию для получения этого свойства. – Ben