Re[10]: Примеры
От: Gaperton http://gaperton.livejournal.com
Дата: 29.01.12 11:26
Оценка:
Здравствуйте, DarkGray, Вы писали:

G>>Чушь. Можно сделать такой специализированный вычислитель, и что?


DG>шаблоны C++ именно таким вычислителем и являются.


Они являются чуточку большим, чем "высичлитетем, спосбным сгенерить последостельность длины N".
Re[11]: Примеры
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 29.01.12 11:32
Оценка:
G>Они являются чуточку большим, чем "высичлитетем, спосбным сгенерить последостельность длины N".

бессмысленное утверждение.
Re[11]: Примеры
От: Gaperton http://gaperton.livejournal.com
Дата: 29.01.12 11:34
Оценка: -1
DG>>шаблоны C++ именно таким вычислителем и являются.
G>Они являются чуточку большим, чем "высичлитетем, спосбным сгенерить последостельность длины N".

И, кстати, с длиной N конкретно в вычислениях на типах в С++ — проблемы. Конкретно — со списками типов. Их длина, насколько я помню, наперед ограничена программистом.
Re[12]: Примеры
От: Gaperton http://gaperton.livejournal.com
Дата: 29.01.12 11:39
Оценка:
Здравствуйте, DarkGray, Вы писали:

G>>Они являются чуточку большим, чем "высичлитетем, спосбным сгенерить последостельность длины N".


DG>бессмысленное утверждение.


Ну что вы. Бессмысленно было Ваше, зацитированное мной, утверждение. А мое вполне осмысленно.
Re[13]: Примеры
От: Gaperton http://gaperton.livejournal.com
Дата: 29.01.12 11:42
Оценка:
G>Ну что вы. Бессмысленно было Ваше, зацитированное мной, утверждение. А мое вполне осмысленно.

Скучно с вами.
Re[4]: Фундаментальный постулат программирования
От: mima  
Дата: 30.01.12 04:30
Оценка: +2
Здравствуйте, Дмитрий Писаренко, Вы писали:

ДП>Что касается теоремы Бёма-Якопини, то она имеет применение. Если я хочу написать DSL, то эта теорема говорит мне о минимальном наборе конструкций, которые должны там быть.


Ну, вот уже это — неверный вывод. "Минимальный набор" подразумевает необходимость, теорема же о достаточности. Поэтому может стоит прислушаться к словам Gaperton-а? Они вполне себе о практике: он говорит о том, что таких минимальных наборов больше чем один. Вам есть из чего выбирать для своего DSL.
Re[8]: Примеры
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 31.01.12 03:57
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Я не специалист по Хаскелю. Тем не менее, факт, что вычисления на типах (как-то — проверка физтческой размерности) там возможны — мне известен.


Тут такой вопрос возникает: понятно, что на тьюринг-полной системе можно делать любые вычисления. Но если некоторая система позволяет делать какие-то вычисления, это ведь еще не делает ее тьюринг-полной. Какие именно вычисления должна она уметь, чтобы быть полной?

Кое-какие вычисления на типах в хаскеле показывал thesz, но очень ограниченные (вроде сложения и умножения натуральных чисел) и работающие лишь на игрушечных примерах (на сложных компилятор падал). Достаточно ли сложения натуральных чисел для вычислительной полноты?
Re[6]: Примеры
От: vdimas Россия  
Дата: 31.01.12 06:48
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Шаблоны С++ — они вычислительн полны?


Теоретически да, попадают под определение ЧРФ, фактически же компиляторы ограничивают вложенность (т.е. потенциальной рекурсии) совсем небольшой величиной.
Re[9]: Примеры
От: vdimas Россия  
Дата: 31.01.12 06:52
Оценка:
Здравствуйте, D. Mon, Вы писали:

G>>Я не специалист по Хаскелю. Тем не менее, факт, что вычисления на типах (как-то — проверка физтческой размерности) там возможны — мне известен.


DM>Тут такой вопрос возникает: понятно, что на тьюринг-полной системе можно делать любые вычисления. Но если некоторая система позволяет делать какие-то вычисления, это ведь еще не делает ее тьюринг-полной. Какие именно вычисления должна она уметь, чтобы быть полной?


Система типов должна уметь зацикливаться на некоторых подстановках.
Т.е. должна иметь потенциально-бесконечную мощность.

Не знаю, возможно ли это для Хаскеля, но для шаблонов С++ это возможно, поэтому компиляторы имеют ограничение на глубину вложенности шаблонов.
Re[9]: Примеры
От: Gaperton http://gaperton.livejournal.com
Дата: 31.01.12 09:25
Оценка:
Здравствуйте, D. Mon, Вы писали:

G>>Я не специалист по Хаскелю. Тем не менее, факт, что вычисления на типах (как-то — проверка физтческой размерности) там возможны — мне известен.

DM>Тут такой вопрос возникает: понятно, что на тьюринг-полной системе можно делать любые вычисления. Но если некоторая система позволяет делать какие-то вычисления, это ведь еще не делает ее тьюринг-полной.

DM>Какие именно вычисления должна она уметь, чтобы быть полной?


На ней должна быть возможность написать машину Тьюринга. Или любую другую полную систему.

Говорить о каких-то особых вычислениях, которые должны быть, трудно, и это отлично показывает пример нормальных алгорифмов Маркова. "Программа" в данном случае — это упорядоченный набор текстовых замен. А состояние "программы" — это строка, над которой они производятся. И все. Нет там никаких вычислений в обычном понимании.

Второй пример — это модель kernel-stream. Это шейдерные вычисления в графускорителях, и map-reduce в NoSQL БД. Функции map и reduce описываются на полном языке (скажем, JavaScript), но сама модель вычислений такова, что в ней далеко не все выразимо.

DM>Кое-какие вычисления на типах в хаскеле показывал thesz, но очень ограниченные (вроде сложения и умножения натуральных чисел) и работающие лишь на игрушечных примерах (на сложных компилятор падал). Достаточно ли сложения натуральных чисел для вычислительной полноты?


Черт его знает. Я не сильный теоретик.
Re[9]: Примеры
От: Gaperton http://gaperton.livejournal.com
Дата: 31.01.12 09:20
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Тут такой вопрос возникает: понятно, что на тьюринг-полной системе можно делать любые вычисления. Но если некоторая система позволяет делать какие-то вычисления, это ведь еще не делает ее тьюринг-полной. Какие именно вычисления должна она уметь, чтобы быть полной?


DM>Кое-какие вычисления на типах в хаскеле показывал thesz, но очень ограниченные (вроде сложения и умножения натуральных чисел) и работающие лишь на игрушечных примерах (на сложных компилятор падал). Достаточно ли сложения натуральных чисел для вычислительной полноты?


Или вот еще один великолепный пример. Всем знакомый, старый добрый SQL 92.

Сложение в нем есть. Он не является вычислительно полным. Но при этом, вне всякого сомнения, позволяет производить годные, полезные вычисления.

А вычислительно полные системы — они, крайне разнообразны и не похожи друг на друга, настолько, что в общем случае по доступным в них операциям однозначно определить полноту невозможно. Думаю, именно это нам и хотели показать преподаватели, дав примеры двух сильно непохожих полных систем.
Re[10]: Примеры
От: Gaperton http://gaperton.livejournal.com
Дата: 31.01.12 11:31
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, D. Mon, Вы писали:


G>>>Я не специалист по Хаскелю. Тем не менее, факт, что вычисления на типах (как-то — проверка физтческой размерности) там возможны — мне известен.


DM>>Тут такой вопрос возникает: понятно, что на тьюринг-полной системе можно делать любые вычисления. Но если некоторая система позволяет делать какие-то вычисления, это ведь еще не делает ее тьюринг-полной. Какие именно вычисления должна она уметь, чтобы быть полной?


V>Система типов должна уметь зацикливаться на некоторых подстановках.

V>Т.е. должна иметь потенциально-бесконечную мощность.

И это условие не является необходимым. Пример — язык программирования FP, в котором можно писать в комбинаторном стиле, без рекурсии и явного зацикливания. Примеры приводятся в книге Филда "Функциональное программирование".

http://lib.ru/CTOTOR/FUNCPROG/
Re[10]: Примеры
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 31.01.12 11:50
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Или вот еще один великолепный пример. Всем знакомый, старый добрый SQL 92.

G>Сложение в нем есть. Он не является вычислительно полным.

А кстати. Считая, что база данных не ограничена в размерах (мы же говорим про язык, не про реализацию), один шаг машины Тьюринга описать на SQL должно быть несложно (три таблички — лента, программа, текущие счетчики позиции и состояния). Будем выполнять такой запрос в цикле, и МТ готова. А зациклить запрос в SQL нельзя, случайно?
Re[11]: Примеры
От: vdimas Россия  
Дата: 31.01.12 13:16
Оценка:
Здравствуйте, D. Mon, Вы писали:

А зациклить запрос в SQL нельзя, случайно?

Чередуя с обновлениями — нет.
Re[11]: Примеры
От: Gaperton http://gaperton.livejournal.com
Дата: 31.01.12 13:27
Оценка:
Здравствуйте, D. Mon, Вы писали:

G>>Или вот еще один великолепный пример. Всем знакомый, старый добрый SQL 92.

G>>Сложение в нем есть. Он не является вычислительно полным.

DM>А кстати. Считая, что база данных не ограничена в размерах (мы же говорим про язык, не про реализацию), один шаг машины Тьюринга описать на SQL должно быть несложно (три таблички — лента, программа, текущие счетчики позиции и состояния). Будем выполнять такой запрос в цикле, и МТ готова. А зациклить запрос в SQL нельзя, случайно?


Прямолинейным образом — нельзя. Однако, можно попробовать как-нибудь через задний проход воспользоваться косвенной рекурсией на триггерах (пара триггеров, триггерящих друг друга), чтобы попытаться умутить что-нибудь тьюринг-полное. Например, какой-нибудь cyclic tag system (полнота этой хрени также доказана).

Не уверен, что это возможно, но с вычислительной полнотой никогда и ни в чем нельзя быть уверенным.
Re: Фундаментальный постулат программирования
От: nikov США http://www.linkedin.com/in/nikov
Дата: 02.02.12 21:36
Оценка:
Здравствуйте, Дмитрий Писаренко, Вы писали:

ДП>Есть фундаментальный постулат: Если задача решается за конечное число шагов, то ее можно решить на любом языке программирования, в котором есть следующие конструкции:

ДП>а) Последовательность (инструкции выполняются в определенной последовательности)
ДП>б) Ветвление, развилки (конструкции if-else, switch)
ДП>в) Повтор (циклы любого рода)

Для Тьюринг-полноты достаточно одного комбинатора iota.
Гипотеза, предполагающая, что Тьюринг-полноты достаточно для решения любой в принципе решаемой задачи — это тезис Чёрча — Тьюринга, который не доказан, но считается хорошо эмпирически подтверждённым (пока нет ни одного реального контрпримера, хотя некоторые продолжают проводить исследования в этом направлении).
Re: Фундаментальный постулат программирования
От: batu Украина  
Дата: 10.02.12 16:19
Оценка: :)
Здравствуйте, Дмитрий Писаренко, Вы писали:

ДП>Здравствуйте!


ДП>Есть фундаментальный постулат: Если задача решается за конечное число шагов, то ее можно решить на любом языке программирования, в котором есть следующие конструкции:


ДП>а) Последовательность (инструкции выполняются в определенной последовательности)

ДП>б) Ветвление, развилки (конструкции if-else, switch)
ДП>в) Повтор (циклы любого рода)

ДП>Это означает: Язык программирования может быть каким угодно, но если в нем есть конструкции 3 указанных типов, то любую решаемую задачу на нем можно решить.


ДП>Подскажите, пожалуйста, как называется этот постулат и где можно найти его в развернутой форме (с формулами, блекджеком и культурологами).


ДП>Заранее благодарен


ДП>Дмитрий Писаренко

Это вы уже роскошно начинаете Необходимый и достаточный набор другой.
1. Операция присваивания нуля. Обнуление.
2. Прибавление 1. Следующий.
3. Переход по нулю. Ветвление.
Остальное можно получить из этого.
Re[2]: Фундаментальный постулат программирования
От: Tilir Россия http://tilir.livejournal.com
Дата: 10.02.12 18:49
Оценка: +2
Здравствуйте, Gaperton, Вы писали:

G> Ибо (контрпример), ситема вроде нормальных алгорифмов Маркова является вычислительно полной, и там нет никаких ветвлений и развилок. Он предстваляет собой упорядоченный набор простых текстовых замен, и он вычислительно полон.


Вообще-то есть

В нормальном алгорифме выбор подстановки идёт сверху вниз до первой удовлетворяющей входной строке, что является if-then выбором, а сам по себе этот процесс цикличен.

Любая вычислительно полная логическая система включая самые экзотические (о Колмогоровских комплексах слышали? а они есть) так или иначе оперирует с ветвлениями&(циклами|рекурсией) просто иногда как в случе комбинаторной логики Карри это забито куда-нибудь вглубь "рекурсивного комбинатора" или "комбинатора суперпозиции" и т.п. но это всегда есть.
Re: Фундаментальный постулат программирования
От: batu Украина  
Дата: 10.02.12 19:08
Оценка:
Здравствуйте, Дмитрий Писаренко, Вы писали:

ДП>Здравствуйте!


ДП>Есть фундаментальный постулат: Если задача решается за конечное число шагов, то ее можно решить на любом языке программирования, в котором есть следующие конструкции:


Еще малость подумал. Это не правильный постулат. Принципиальный вопрос в содержании самих шагов. Ведь они сами по себе могут быть не решаемы на машине тюринга, тем не менее алгоритм может быть и решаемый.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.