metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-07-02 01:18 pm

Функциональный апартеид

http://udpn.livejournal.com/78084.html?style=mine
Обычно говорят, что нормальный порядок редукции нужен для того, чтобы bottom в аргументе не превращался в bottom в результате всегда, когда это возможно. Само по себе это никому не нужно. Дело именно в отложенном вычислении аргументов. Чтобы определить управляющие конструкции в языке с аппл. порядком редукции, нужно это делать явно, и их можно ввести только конечное число на этапе разработки языка. С нормальным порядком мы имеем возможность определять новые конструкции в любом количестве.

Всех, кто ничего не понял - отправить в индию и бангладеш, купаться в ганге и поклонятся коровам.
ext_615659: (Трубка вас согреет)

[identity profile] akuklev.livejournal.com 2012-07-02 07:41 pm (UTC)(link)
Реально достаточно. На агде и родственных языках заведомо определяются все функции для которых можно дать оценку сверху скорости выполнения, которая выразима в терминах обобщённых функций Гудштейна (http://en.wikipedia.org/wiki/Goodstein's_theorem). То есть любые алгоритмы даже со временем работы O(2^2^...^n) туда влезают. Влезают любые фукнции Акермана, стрелки Конвея и чёртзнаетчто. Я слышал лишь про одну тотальную функцию, которую так построить невозможно — функцию TREE Фридмана.

Цитирую Википедию (http://en.wikipedia.org/wiki/Kruskal%27s_tree_theorem): «The latter theorem ensures the existence of a rapidly growing function that Friedman called TREE, such that TREE(n) is the length of a longest sequence of n-labelled trees T1,...,Tm in which each Ti has at most i vertices, and no tree is embeddable into a later tree.
The TREE sequence begins TREE(1) = 1, TREE(2) = 3, then suddenly TREE(3) explodes to a value so enormously large that many other "large" combinatorial constants, such as Friedman's n(4), are extremely small by comparison. A lower bound for n(4), and hence an extremely weak lower bound for TREE(3), is A(A(...A(1)...)), where the number of A's is A(187196), and A() is a version of Ackermann's function: A(x) = 2↑↑...↑x with x-1 ↑s (Knuth up-arrows). Graham's number, for example, is approximately A^64(4) which is much smaller than the lower bound A^A(187196)(1).»

В общем, на практике больше не нать.

[identity profile] antontsau.livejournal.com 2012-07-02 08:15 pm (UTC)(link)
доктор, вы маньяк.

[identity profile] thesz.livejournal.com 2012-07-02 08:30 pm (UTC)(link)
Уровень do-нотации делается с помощью... do-нотации!

Точнее, с помощью её разворачивания в комбинаторы. Чуть было не сделал, кстати, для одного варианта описания железа, где требовалось следить за количеством промежуточных проводов.

А далее можно и синтаксис с помощью квазиквотеров прикрутить, если надо усложнение работы.

Хотя я согласен, что DSL в Хаскеле слабоваты.

[identity profile] udpn.livejournal.com 2012-07-02 09:04 pm (UTC)(link)
Здесь я, похоже, слился, потому что Сoq видел полтора раза в жизни. Это там в Notation вставка ML'я? Как это сказывается на корректности программ? Сам Coq-то ленивый?

[identity profile] udpn.livejournal.com 2012-07-02 09:09 pm (UTC)(link)
А можно пример, на котором эта разница будет видна? Или лучше спросить самого codedot?

[identity profile] udpn.livejournal.com 2012-07-02 09:31 pm (UTC)(link)
"Абстрактная семантика"?

[identity profile] jakobz.livejournal.com 2012-07-03 12:17 am (UTC)(link)
Всех, кто ничего не понял - отправить в индию и бангладеш, купаться в ганге и поклонятся коровам.

[identity profile] gds.livejournal.com 2012-07-03 01:36 am (UTC)(link)
в Notation -- вставка того же Coq'а. Символы cond/th/el -- выражения, они не обязаны быть значениями и не обязаны вычисляться, они просто подставляются, почти синтаксически. На корректности сказывается как любой другой Coq код.
В do-нотации, если по памяти, у меня было как-то так: Notation "a <- b ;; c" := "bind (fun a => c) b", то есть, "a" рассматривается как идентификатор, и везде, где используется эта нотация, данное ограничение учитывается.
Сам Coq -- скорее строгий. Впрочем, 1. касаемо доказательств и редукций: есть тактики для ленивой работы с пруф-термами, для ленивой редукции, 2. в некоторых местах он при экстракции в окамл использует лентяйку, сходу помню экстракцию всяких коиндуктивных типов данных и работу с ними. Вот тут мне надо было бы толком разобраться, почему там лентяйка, а то понятно только интуитивно, но никак не чётко.

[identity profile] m e (from livejournal.com) 2012-07-03 08:30 am (UTC)(link)
это я к тому, что получается уже не апартеид, а кастовая система:

1. кто не понял высказывание

2. кто понял высказывание, но не понял, что оно неверное

3. кто понял высказывание, и понял, что оно неверное

как вариант, можно ни апартеид, ни кастовую систему не вводить, и оставить всех на своих местах :-)

[identity profile] nivanych.livejournal.com 2012-07-03 08:31 am (UTC)(link)
Я лично не против ;-)

[identity profile] nivanych.livejournal.com 2012-07-03 08:38 am (UTC)(link)
А тестировать кто за них будет?

[identity profile] nivanych.livejournal.com 2012-07-03 08:39 am (UTC)(link)
Ви так говорите, как будто, в этом есть что-то плохое!

[identity profile] tzirechnoy.livejournal.com 2012-07-03 08:48 am (UTC)(link)
Да, попробую расшыфровать своё возмущение: у меня есть сильное подозрение, что слова "язык с аппл. порядком редукции" не имеют не то что чёткого -- дажэ вменяемого определения, и применение термина "порядок редукцыи" по отношэнию к языкам можэт иметь смысл только после какого-то частного (одного из многих) отображэния языка (включая семантику) на лямбда-исчисление.

[identity profile] metaclass.livejournal.com 2012-07-03 08:53 am (UTC)(link)
Хорошо доказанные программы в тестировании не нуждаются.
Поэтому тестерш переквалифицируют в службу поддержки мозгов тех, кто эти доказанные программы пишет. Поддержка осуществляется таким образом, что бывшие тестерши очень быстро уходят в декрет.

[identity profile] udpn.livejournal.com 2012-07-03 09:30 am (UTC)(link)
Да я пытаюсь понять, как это называется на самом деле, и всего-то.

[identity profile] nivanych.livejournal.com 2012-07-03 10:00 am (UTC)(link)
Это неправда.
Бывают ещё и логические ошибки, а их сложно убрать доказательствами.
Кроме того, можно забыть написать нужные типы для доказательств.
То есть, хотя и всё сформулированное доказано, но сформулировано не всё.

Однако, в целом, мысль мне нравится! ;-)

[identity profile] nponeccop.livejournal.com 2012-07-03 11:49 am (UTC)(link)
Лучше спросите самого лэмпинга

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.90.2386

Levy[4, 5] has shown that there are lambda expressions for which any order of reduction duplicates work. One
example is ...

[identity profile] nivanych.livejournal.com 2012-07-03 05:40 pm (UTC)(link)
Да вроде бы, описания потребления ресурсов (CPU-memory-traffic) программой в разные моменты времени всегда обзывалось ресурсной семантикой...

[identity profile] nivanych.livejournal.com 2012-07-03 05:47 pm (UTC)(link)
"Evaluation" происходит в лямбде или в графе.
Поэтому, если язык представляет собой отображение на лямбду, то про редкуции и судят по лямбде или по graph-rewriting-системе.
Если подходить к вопросу с особенной выдумкой, то можно придумать исключение. Но вполне можно говорить, что трансляция в итоговую исполнительную машинку всегда происходит этапами.
Подобный вопрос вообще может иметь место довольно редко. Впрочем, даже и понятно, в каких случаях.
Что не так?

[identity profile] tzirechnoy.livejournal.com 2012-07-03 06:10 pm (UTC)(link)
>Поэтому, если язык представляет собой отображение на лямбду,

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

[identity profile] nivanych.livejournal.com 2012-07-04 04:29 am (UTC)(link)
Действительно, он берёт случайные числа, собранные системой.
И они влияют на ход компиляции. А откуда вы знали?

Page 3 of 3