Лямбда, которую мы потеряли
Apr. 3rd, 2008 03:06 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Пара задачек по лямбда-исчислению.
(1) Сконструируйте лямбда-терм F, такой что для любого терма M выполнялось бы
(2) Сконструируйте лямбда-терм G, такой что для любых термов M и N выполнялось бы
Ответы не скринятся, так что если хотите думать сами - не смотрите в комменты.
(1) Сконструируйте лямбда-терм F, такой что для любого терма M выполнялось бы
FM = MF
(2) Сконструируйте лямбда-терм G, такой что для любых термов M и N выполнялось бы
GMN = NG(NMG)
Ответы не скринятся, так что если хотите думать сами - не смотрите в комменты.
no subject
Date: 2008-04-03 12:34 pm (UTC)FM=(YG)M,
так как очевидно, что F - рекурсивна. Итак,
FM=(YG)M=G(YG)M
G(YG)M=MF=M(YG)
G = \a b . b a
F = Y(\a b . b a)
Вторая сложнее, сейчас подумаю.
no subject
Date: 2008-04-03 12:38 pm (UTC)G = Y (\f m n. n f (n m f))
no subject
Date: 2008-04-03 01:20 pm (UTC)Пусть имеется терм C=C[f,m,n,k,...] содержащий (возможно) указанные свободные переменные. Тогда для произвольных термов M, N, K, ... существует терм F, такой что
Доказательство - конструктивное, конструируется
и доказывается, что это то, что надо :)
no subject
Date: 2008-04-03 04:31 pm (UTC)no subject
Date: 2008-04-03 01:38 pm (UTC)G = \g m . m g g
Шо-то такое у нас летом было.
no subject
Date: 2008-04-03 01:54 pm (UTC)А что летом у вас было?
no subject
Date: 2008-04-03 02:06 pm (UTC)А откуда у тебя в журнале реклама? От неё фокс глючит.
no subject
Date: 2008-04-03 02:24 pm (UTC)Реклама у меня из-за улучшенного аккаунта, а он из-за желания иногда картинок выложить. Я бы и платный оплатил - только лень и не знаю как :)
no subject
Date: 2008-04-03 03:07 pm (UTC)no subject
Date: 2008-04-03 02:08 pm (UTC)Так?
no subject
Date: 2008-04-03 02:20 pm (UTC)На самом деле чтобы сошлось надо
но лучше не изобретать Y-подобный велосипед, а сразу им (Y) пользоваться, как
no subject
Date: 2008-04-03 03:08 pm (UTC)no subject
Date: 2008-04-03 03:26 pm (UTC)Теорема 1. Для любого терма F существует терм X, такой что
Этот X мудрецы зовут неподвижной точкой.
Доказательство: Введём
тогда искомая неподвижная точка
Воистину, это так
no subject
Date: 2008-04-03 03:34 pm (UTC)такой что для любого F
Доказательство: Из предыдущей теоремы замечаем, что
no subject
Date: 2008-04-06 07:24 pm (UTC)А дальше что? Зачем нужны все эти неподвижные точки и Y-ки? Почему все так носятся с ними? Что пытаются доказать или выразить?
no subject
Date: 2008-04-06 07:56 pm (UTC)no subject
Date: 2008-04-07 03:15 pm (UTC)no subject
Date: 2008-04-07 03:48 pm (UTC)Для меня ЛИ - это база, на основе которой скорее всего родится разумная универсальная нотация для записи вычислительных алгоритмов. Потому что современные массовые прикладные языки программирования - это, конечно, что-то типа римских цифр до изобретения арабских. По степени стройности общей концепции :-)
no subject
Date: 2008-04-07 04:12 pm (UTC)no subject
Date: 2008-04-07 04:43 pm (UTC)По-моему так задачек побольше решать надо: SICP, YAHT стоит прочесть и упражнения прорешать (ну второе, конечно, не такое заслуженно именитое как первое). Первое, кстати, многие люди делают не только на Схеме, но и, параллельно, на Хаскелле.
>Не является ли утопией моя задумка иметь конвертор (Haskell, например) -> (C, например)?
Не очень понятно, зачем. Компилятор GHC сам по себе и есть почти что такой конвертер. И потом Хаскелл всё-таки ленивый язык, ему сишная модель исполнения не очень подходит.
no subject
Date: 2008-04-07 07:38 pm (UTC)>Не очень понятно, зачем
В данном случае просто интересно провернуть такую комбинацию:
исходник на Haskell->конвертор->исходник на С->целевое окружение, для которого ещё нет (и скорее всего не будет в ближайшее время) поддержки Haskell runtime.
А эту ленивость можно обойти? Не пользоваться ей, например? Или без ленивости получится как в С без указателей? :-)
no subject
Date: 2008-04-07 08:02 pm (UTC)Обойти-то всё можно, только зачем тогда Хаскелл?
no subject
Date: 2008-04-03 04:30 pm (UTC)no subject
Date: 2008-04-05 07:08 am (UTC)no subject
Date: 2008-04-04 11:54 am (UTC)я тут пишу-таки работу про визуальный конструктор лямбда-выражений
и построил в нем ваш терм FM, где F=(\gm.m(gg))(\gm.m(gg)) а M - свободная переменная:
здесь анимация (200kb) построения этого терма и его редукции сначала до M((\gm.m(gg))(\gm.m(gg)))
а потом дальше до M((\m.m(\m.m(\m.m((\gm.m(gg))(\gm.m(gg)))))))
тут основа используемого синтаксиса
если вас заинтересует конструктор, то здесь можно его скачать.
он пишется на питоне и требует
python 2.5 http://www.python.org/download/
и pygame 1.8 http://www.pygame.org/download.shtml
сам он пока в сыром виде,
так что буду вам признателен за предложения по поводу интерфейса. и за баги.
no subject
Date: 2008-04-04 12:05 pm (UTC)А чтобы редукции в классической лямбде отображались где-нибудь внизу/сбоку?
no subject
Date: 2008-04-04 12:13 pm (UTC)правда пока в перемешку с другой информацией
no subject
Date: 2008-04-04 12:27 pm (UTC)http://deniok.narod.ru/
Без предварительных стрелочек юзерам совсем тяжело было. Да и потом все ругались, что тяжело алгоритм читать с экрана.
Чтобы это хозяйство было удобно многим, очевидно стоит регулировать скорость, либо сделать удобный пошаговый интерфейс.
no subject
Date: 2008-04-04 12:43 pm (UTC)надеюсь, достаточно вывода на консоль выбранного суб-терма и всего терма после редукции
регулировку скорости да, добавлю, спасибо.
интерфейс кажется довольно пошаговый: одно нажатие Enter - одна редукция. плюс возможность шагов назад.
no subject
Date: 2008-04-04 01:05 pm (UTC)no subject
Date: 2008-04-04 01:47 pm (UTC)еще (но это не строго) цвета в закрытом под-терме (под-терм без свободных переменных) объединены одним тоном (hue) и отличаются только яркостью.
no subject
Date: 2008-04-04 12:08 pm (UTC)no subject
Date: 2008-04-04 12:23 pm (UTC)а в тех старых гифах был немного другой синтаксис: "f x y" и "f (g x)" были наоборот ("f x y" был вряд). но буквально на выходных руководитель меня просветил как лучше.
может еще можно что-то улучшить?
no subject
Date: 2008-04-05 09:16 pm (UTC)