deniok: (умничаю)
[personal profile] deniok
Пара задачек по лямбда-исчислению.

(1) Сконструируйте лямбда-терм F, такой что для любого терма M выполнялось бы
FM = MF


(2) Сконструируйте лямбда-терм G, такой что для любых термов M и N выполнялось бы
GMN = NG(NMG)


Ответы не скринятся, так что если хотите думать сами - не смотрите в комменты.

Date: 2008-04-03 01:54 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
Что-то мне эта версия непонятна. Скобочек по-моему не хватает в одном месте...

А что летом у вас было?

Date: 2008-04-03 02:06 pm (UTC)
From: [identity profile] nealar.livejournal.com
Там были алгоритмы Маркова на самом деле, но поскольку я о них кроме названия ничего не знаю, то делали лямбда-исчисление :)
А откуда у тебя в журнале реклама? От неё фокс глючит.

Date: 2008-04-03 02:24 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
Там - это где? Я не в курсе совершенно...

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

Date: 2008-04-03 03:07 pm (UTC)
From: [identity profile] nealar.livejournal.com
на icfpc2007

Date: 2008-04-03 02:08 pm (UTC)
From: [identity profile] nealar.livejournal.com
F = (\g. \m. m g g) (\g'. \m'. m' g' g')
Так?

Date: 2008-04-03 02:20 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
Ну это-то альфа-конверсия, она и так подразумевается где надо; а в конце всё равно не получается:
FM = (\g. \m. m g g) (\g'. \m'. m' g' g') M 
   = M (\g'. \m'. m' g' g') (\g'. \m'. m' g' g')
   фиг а не = M F, аппликация левоассоциативна
На самом деле чтобы сошлось надо
F = GG
G = \g m . m (g g)
но лучше не изобретать Y-подобный велосипед, а сразу им (Y) пользоваться, как [livejournal.com profile] lomeo.

Date: 2008-04-03 03:08 pm (UTC)
From: [identity profile] nealar.livejournal.com
Дык, это если Y уже есть. То есть, совет невеждам не подходит. :)

Date: 2008-04-03 03:26 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
Ну Y это средоточие всех тайн и загадок. Держи:

Теорема 1. Для любого терма F существует терм X, такой что
FX = X
Этот X мудрецы зовут неподвижной точкой.
Доказательство: Введём
G = \x.F(xx)
тогда искомая неподвижная точка
X = GG
Воистину, это так
X = GG 
  = (\x.F(xx))(\x.F(xx)) 
  = F((\x.F(xx))(\x.F(xx))) 
  = F(GG)
  = FX

Date: 2008-04-03 03:34 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
Теорема 2 Существует комбинатор неподвижной точки Y,
Y=\f.(\x.f(xx))(\x.f(xx))
такой что для любого F
F(YF)=YF

Доказательство: Из предыдущей теоремы замечаем, что
YF = (\x.F(xx))(\x.F(xx)) 
   = GG
   = X

Date: 2008-04-06 07:24 pm (UTC)
From: [identity profile] kernelring.livejournal.com
Как полный чайник, который интересуется ЛИ и функциональным программированием, не могу найти ответы на следующие вопросы:
А дальше что? Зачем нужны все эти неподвижные точки и Y-ки? Почему все так носятся с ними? Что пытаются доказать или выразить?

Date: 2008-04-06 07:56 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
Ну, если вы интересуетесь ЛИ, то непонятно, в чём вопрос. Как только мы ввели основные понятия (лямбда-терм с абстракцией и аппликацией) и задали схему бета-редукции, тут же Y и вылезает. Без него ЛИ не полное по Тьюрингу - арифметику, например, не задашь.

Date: 2008-04-07 03:15 pm (UTC)
From: [identity profile] kernelring.livejournal.com
Вопрос в том, что хочется видеть конечную цель. Без такого видения очень сложно отделять главное от шелухи. Вот задали арифметику, а потом что? Ради чего её задавали? Может быть есть какой-нибудь мануал, где бы уделялось место не вопросу "как", а "зачем"? Или без мощного математического бэкграунда в эту область лучше не соваться?

Date: 2008-04-07 03:48 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
Конечная цель - это очень индивидуально, нес па?

Для меня ЛИ - это база, на основе которой скорее всего родится разумная универсальная нотация для записи вычислительных алгоритмов. Потому что современные массовые прикладные языки программирования - это, конечно, что-то типа римских цифр до изобретения арабских. По степени стройности общей концепции :-)

Date: 2008-04-07 04:12 pm (UTC)
From: [identity profile] kernelring.livejournal.com
Полностью с вами согласен насчёт индивидуальности цели. На что, по вашему мнению, мне стоит обратить особое внимание при изучени ФП, если я преследую цель повышения продуктивности и выразительности труда программиста? Не является ли утопией моя задумка иметь конвертор (Haskell, например) -> (C, например)?

Date: 2008-04-07 04:43 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
>На что, по вашему мнению, мне стоит обратить особое внимание при изучени ФП, если я преследую цель повышения продуктивности и выразительности труда программиста?

По-моему так задачек побольше решать надо: SICP, YAHT стоит прочесть и упражнения прорешать (ну второе, конечно, не такое заслуженно именитое как первое). Первое, кстати, многие люди делают не только на Схеме, но и, параллельно, на Хаскелле.

>Не является ли утопией моя задумка иметь конвертор (Haskell, например) -> (C, например)?

Не очень понятно, зачем. Компилятор GHC сам по себе и есть почти что такой конвертер. И потом Хаскелл всё-таки ленивый язык, ему сишная модель исполнения не очень подходит.

Date: 2008-04-07 07:38 pm (UTC)
From: [identity profile] kernelring.livejournal.com
Спасибо за советы.
>Не очень понятно, зачем
В данном случае просто интересно провернуть такую комбинацию:
исходник на Haskell->конвертор->исходник на С->целевое окружение, для которого ещё нет (и скорее всего не будет в ближайшее время) поддержки Haskell runtime.
А эту ленивость можно обойти? Не пользоваться ей, например? Или без ленивости получится как в С без указателей? :-)

Date: 2008-04-07 08:02 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
>А эту ленивость можно обойти?

Обойти-то всё можно, только зачем тогда Хаскелл?

Profile

deniok: (Default)
deniok

February 2022

S M T W T F S
  12345
6789101112
13141516171819
20212223 242526
2728     

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 8th, 2025 08:13 am
Powered by Dreamwidth Studios