LINUX.ORG.RU

Что такое «денотационная семантика»?

 ,


0

1

Кто такой Окасаки и за что его надо почитать?

2016, Окасаки Крис, Чисто функциональные структуры данных
1996, Chris Okasaki, Purely Functional Data Structures, 162 страницы

Википедия совсем другое пишет:

Денотационная семантика (англ. denotational semantics) выражениям в программе ставит в соответствие настоящие математические объекты, то есть, выражения обозначают (англ. to denote — откуда «денотационная») их величины)
Важнейшие, в том числе пионерские, результаты построения денотационных семантик получены в работах Д. Скотта (Dana Scott) и К. Страчей (Christopher Strachey) в конце 1960-х — начале 1970-х в Оксфордском университете

Бестиповое λ-исчисление

1557, Роберт Рекорд (Recorde Robert), The Whetstone of Witte, 332 страницы (Оксфордский университет)
ввёл знак (символ) для обозначения равенства = в 1557 году (в 16-м (XVI) веке).
«В континентальной Европе знак = был введён Лейбницем только на рубеже XVII—XVIII веков, то есть более чем через 100 лет после смерти Роберта Рекорда.»

1936, Алонзо Чёрч, An Unsolvable Problem of Elementary Number Theory (Принстонский университет)
представил безтиповое лямбда-исчисление в статье «Унифицированная теория формальных систем», опубликованной в апреле 1936 года в журнале American Journal of Mathematics.

Переменные: x, y, z, … являются λ-термами.
Абстракция: Если M λ-терм и x — переменная, то (λx.M) — λ-терм (называется абстракцией).
Аппликация: Если M и N λ-термы, то (M N) — λ-терм (называется аппликацией).

само по себе λ-исчисление — это лишь синтаксис, набор правил для работы с символами.

Чтобы оно «обрело смысл» или «семантику», нужно связать эти символы с чем-то осмысленным, например, с математическими объектами.

Смысл (семантика) в данном контексте означает, что каждый термин λ-исчисления будет интерпретироваться как некоторый математический объект, а операции над терминами будут соответствовать операциям над этими объектами.

Двоичное и десятичное

Можно определить функции:

  • добавления единицы
  • удвоения
  • удесятирения

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

Аппликативный синтаксис

Аппликативный синтаксис эволюционировал из работ Шёнфинкеля, Карри и Чёрча. Функции обозначаются переменными или лямбда-абстракциями. Именование функций в аппликативном синтаксисе безтипового лямбда-исчисления осуществляется через присвоение переменным абстракций. Алонзо Чёрч (Alonzo Church), хотя и известен своей нотацией с лямбда-абстракцией и явными скобками, в некоторых своих работах также использовал более компактные формы записи, близкие к аппликативному синтаксису, особенно при работе с комбинаторами. Например, вместо того чтобы постоянно писать λx.x+1, он мог ввести сокращение f для этой функции, это записывалось в духе:

f≡λx.x+1

Таким образом, Чёрч ввёл операцию именования как связь между лямбда-выражением и символическим именем. Однако он ещё не привязал это к конкретному синтаксису, так как его работа была сосредоточена на чистой теории. Именование как операция — это идея Чёрча, использование для неё знака равенства закрепилось благодаря разработчикам функциональных языков, создатель MetaLanguage (ML) - Робин Милнер (1970-е годы).
Лямбда-абстракция (определение анонимной функции) записывается как λx.t, где x — аргумент, а t — тело функции.
Определим переменную f и присвоим ей лямбда-выражение (имеющее в безтиповом λ-исчислении единственный возможный для переменных тип «функция») в качестве значения, например функцию, которая возвращает переданный аргумент:

f=(λx.x)
f=λx.x

Теперь мы можем использовать переменную f в выражениях. Применим f к другому лямбда-выражению, например, (λy.y):

((λx.x) (λy.y))
((f) (λy.y))

В аппликативном синтаксисе приложение функции f к аргументу x записывается как

f λy.y

без скобок, a применение функции g к двум аргументам w и z — как

g w z 

Бесскобочность достигается за счёт соглашения о левоассоциативности (см. также Каррирование). Выражение g w z интерпретируется как (g w) z, то есть сначала g применяется к w, а затем результат применяется к z.

Семантика

Теоретико-множественный подход
Категорный подход

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

нужно:

  • Определить множество D, элементы которого будут значениями λ-выражений
    Без такого множества D мы не можем корректно описать, что означают выражения λ-исчисления. Мы не можем сказать, какие у них значения. А без возможности приписать выражениям значения нельзя говорить об их смысле. Без подходящего D мы не можем задать интерпретацию термов и операций λ-исчисления.
  • Интерпретировать функции как элементы этого множества
    (D должно содержать все функции из D в D, то есть D должно содержать множество всех функций D → D)

построение такого множества D - нетривиальная математическая задача (из-за парадокса Кантора). Ее решение привело к развитию теории доменов и других разделов математики.

идея фиксированной точки, когда D строится как фиксированное множество, удовлетворяющее

D≅D→D

И вот в этом месте я не осилил. Разъясните, бегом пожалуйста, люди злые добрые.

Как мне этим вашим лямбда-исчислением описать байт, его значения, и операции с ним? Нумералы Чёрча (функции с двумя параметрами) я могу написать, но дальше дело не идёт.

★★★★
Ответ на: комментарий от seiwhale

можно сделать переменную, дать ей имя, например:

н1=λf.λx.f x

так же можно записать переменные н2, н3, …, н9
затем эти переменные я смогу передавать в функции удесятирения и/или прибавления, что позволит мне записать числа в десятичной системе счисления.

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

Shushundr ★★★★
() автор топика
Ответ на: комментарий от seiwhale

«Единица это абстракция.»

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

Shushundr ★★★★
() автор топика

Как мне этим вашим лямбда-исчислением описать байт, его значения, и операции с ним?

Начни с определения единицы по Бурбаки ©,
а далее следуй советам твоего лечащего психиатра :)

quickquest ★★★★★
()
Ответ на: комментарий от Shushundr

Для того, чтобы эту мыслительную операцию корректно выполнить, нужно было указать, чем единица от абстракции отличается

Подмена понятий ))

Не буду дальше спорить.

seiwhale
()
Ответ на: комментарий от quickquest

следуй советам твоего лечащего психиатра

Он не может советы сформулировать, ему нехватает подготовки.

Shushundr ★★★★
() автор топика
Ответ на: комментарий от Shushundr

Как мне этим вашим лямбда-исчислением описать байт, его значения, и операции с ним? Нумералы Чёрча (функции с двумя параметрами) я могу написать, но дальше дело не идёт.

Там на вики описано необходимое для GF(2), непонятно что ли как дойти до Z/256Z? Если примешь колёса, то можно будет быстро-решительно поделить на ноль.

ratvier ★★
()

Определи, что такое ноль (ничто) а единица - это ничто на единицу большее. Вот отсюда и пляши :)

Xintrea ★★★★★
()

гм, ты можешь ввести просто такой литерал «байт». Ну и работать с ним. Можешь ещё операции какие нибудь аксиоматически ввести.

Единственное, что не понятно, так это зачем тебе это?

Т.е. я портянку в топике прочитал. Но вот по ссылкам уже не пошёл. Задачу свою опиши подробнее пожалуйста.

AndreyKl ★★★★★
()
Ответ на: комментарий от Shushundr

Но повод ли это переходить к типизированному лямбда-исчислению? Я не уверен.

типы на сколько я помню для этого собственно и придумали: чтобы просто не применять операции к неподходящим объектам

правда там начинаются заморочки. но в версии просто типизированного ЛИ по моему даже заморочек не так уж много. Делай да и делай.

AndreyKl ★★★★★
()
Ответ на: комментарий от AndreyKl

Задачу свою опиши подробнее пожалуйста.

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

Говорят, что при помощи этого исчисления можно описать семантику чего-нибудь. Вот я и решил попробовать описать байт. Структура как структура, по аналогии можно было бы описать что-нибудь ещё, например int, float, double.

И пока что не получается (понять).

Можешь ввести просто такой литерал «байт», операции какие нибудь аксиоматически ввести.

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

Если я буду что-то лишнее в чистое λ-исчисление вводить, я боюсь, что у меня получится lisp. А мне такое не надо.

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)
Ответ на: комментарий от Shushundr

Стало чуток яснее, спасибо.

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

Вообще говоря, я сейчас кратенько опишу, и может ты поймёшь что оно тебе и не надо:

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

«Описать семантику» - в данном случае описать тип данных и действия над ним.

По «вычислительным способностям» ЛИ и машина тьюринга эквивалентны (есть док во). Ну, соотвественно, всё что ты можешь описать на императивных языках, ты можешь описать и в ЛИ.

Если всё ещё осталось желание описывать - давай разбирать что ты хочешь описать. Т.е. надо определиться что конкретно ты хочешь делать с байтом. Ну и потом это запрограммируешь (подскажу если нужно будет). Да и всё.

AndreyKl ★★★★★
()
Последнее исправление: AndreyKl (всего исправлений: 1)
Ответ на: комментарий от AndreyKl

что конкретно ты хочешь делать с байтом

Ну, например, обретать и терять. Мне нужно, чтобы байты как-то возникали (считывались), и затем выводились (на печать).

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

Представим, что у нас есть функции ReadFile, которая возвращает список байтов и функция WriteFile, которая принимает список байтов и записывает их в файл.

А я не могу представить. У меня есть множество D математических объектов, в котором у меня располагаются разные элементы, в этом множестве есть элемент «основа» (⊥), нумералы чёрча, и функции, образованные синтаксисом лямбда исчисления. Функций ReadFile и WriteFile там нет! К множеству математических объектов прилагается функция интерпретации, которая отображает термы из синтаксической записи лямбда-выражения на эти математические объекты. Я могу усложнить (точнее не могу, но могу такое вообразить) функцию интерпретации, чтобы она детектила в синтаксисе лямбда-выражения сложные функции (как паттерны) и сопоставляла их некоторым абстрактным операциями (типа «сложение», «умножение», «сдвиг», «вычитание», «деление»). И этим моя фантазия на текущий момент ограничивается. А не должна, потому что нужно как-то получить результат. Да и исходные данные хотелось бы как-то туда засовывать (и желательно не переводя их предварительно в лямбда-синтаксис вручную).

тебе нужна SECD-машина

И чё, в ней я ввода-вывода тоже не вижу…

тогда машина Кривина

пф, всё равно не вижу

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 2)
Ответ на: комментарий от quickquest

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

Затем «операцией интерпретации» отразить синтаксис чистого лямбда-исчисления на объекты той «модели виртуальной машины».

Тогда синтаксис начнёт описывать преобразования в той машине.

Это никак не будет видно снаружи (потому что виртуальная машина виртуальна и является математическим объектом).

Затем определить ВТОРУЮ функцию интерпретации (назвать её функцией эмуляции или виртуализации), которая будет изображать виртуальную машину в реальности. И вот в этой ВТОРОЙ функции можно будет сказать, что математический объект такой-то соотносится с реальностью так-то.

Shushundr ★★★★
() автор топика
Ответ на: комментарий от Shushundr

И вот в этой ВТОРОЙ функции можно будет сказать, что математический объект такой-то соотносится с реальностью так-то.

Это напоминает Теорему Клини: «Классы регулярных множеств и автоматных языков совпадают» ©.

quickquest ★★★★★
()
Ответ на: комментарий от Shushundr

Функций ReadFile и WriteFile там нет!

Ну, знаешь. в машине тьюринга тоже ReadFile и WriteFile нет. Но тебе ведь этот факт не мешает осознавать что МТ - это основа семантики современных императивных языков?

AndreyKl ★★★★★
()
Ответ на: комментарий от AndreyKl

в машине тьюринга тоже ReadFile и WriteFile нет

Есть. Оно головкой на ленте символы пишет, и читает.

МТ - это основа семантики

Ну, все другие операции эмулируются машиной Тьюринга.

А у денотационной семантики ничего такого нет внизу. Говорится просто «математические объекты». И это мешает.

Shushundr ★★★★
() автор топика

Прочитал как «детонационная семантика».

X512 ★★★★★
()
Ответ на: комментарий от Xintrea

Определи, что такое ноль (ничто) а единица - это ничто на единицу большее. Вот отсюда и пляши :)

ноль это арифметическое «ничто». а единица - минимальное «что-либо».

и не надо нам морочить голову своими Бурбаками.

alysnix ★★★
()
Ответ на: комментарий от Shushundr

я понял, ну бог с ним тогда, ладно, мешает - пусть мешает

AndreyKl ★★★★★
()
Ответ на: комментарий от ratvier

Не видел, мне это пока не нужно. Я нелюбопытный, и у меня нет параллельной аппаратуры. И в многопоточность я не умею.

Shushundr ★★★★
() автор топика
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)