Фундаментальный постулат программирования
От: Дмитрий Писаренко Россия http://dmitripisarenko.me
Дата: 28.01.12 12:18
Оценка:
Здравствуйте!

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

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

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

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

Заранее благодарен

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

http://dmitripisarenko.me
Re: Фундаментальный постулат программирования
От: 0x7be СССР  
Дата: 28.01.12 12:22
Оценка: 3 (2)
Здравствуйте, Дмитрий Писаренко, Вы писали:

ДП>...

ДП>Подскажите, пожалуйста, как называется этот постулат и где можно найти его в развернутой форме (с формулами, блекджеком и культурологами).
Уж не про тьюринг-полноту ли идет речь?
Re[2]: Фундаментальный постулат программирования
От: Дмитрий Писаренко Россия http://dmitripisarenko.me
Дата: 28.01.12 12:47
Оценка: 18 (3)
Здравствуйте!

Упоминание Тьюринга помогло мне найти то, что нужно: Теорема Бёма — Якопини.

Спасибо

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

http://dmitripisarenko.me
Re: Фундаментальный постулат программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 28.01.12 12:51
Оценка: 19 (3)
Здравствуйте, Дмитрий Писаренко, Вы писали:

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

ДП>Есть фундаментальный постулат: Если задача решается за конечное число шагов, то ее можно решить на любом языке программирования, в котором есть следующие конструкции:
ДП>а) Последовательность (инструкции выполняются в определенной последовательности)
ДП>б) Ветвление, развилки (конструкции if-else, switch)
ДП>в) Повтор (циклы любого рода)
ДП>Подскажите, пожалуйста, как называется этот постулат и где можно найти его в развернутой форме (с формулами, блекджеком и культурологами).

Теорема Бёма — Якопини (нашёл по "Теории алгоритмов" Матроса и Поднебесовой, там, по-моему, переврали транскрипцию фамилий "Бома — Джакопини", хотя с Corrado Böhm непонятно, как будет правильно)
Re: Фундаментальный постулат программирования
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 28.01.12 14:24
Оценка:
ДП>Подскажите, пожалуйста, как называется этот постулат

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

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


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

In computability theory, a system of data-manipulation rules (such as an instruction set, a programming language, or a cellular automaton) is said to be Turing complete or computationally universal if and only if it can be used to simulate any single-taped Turing machine and thus in principle any computer.

http://en.wikipedia.org/wiki/Turing_completeness

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



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

All real computing devices in existence today can be modeled as a finite state machine, as all real computers operate on finite resources. Such a machine has a set of states, and a set of state transitions which are affected by the input stream.

http://en.wikipedia.org/wiki/Computability#Formal_models_of_computation
Re: Фундаментальный постулат программирования
От: Gaperton http://gaperton.livejournal.com
Дата: 29.01.12 11:18
Оценка: -2
Здравствуйте, Дмитрий Писаренко, Вы писали:

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


"Фундаментальный постулат" называется "вычислимость по Черчу", или вычислительной полнотой. http://ru.wikipedia.org/wiki/Тезис_Чёрча_—_Тьюринга

И его невозможно ни доказать, ни опровергнуть. Звучит он, разумеется, не так, как у тебя.

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

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

ДП>Это означает:


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

И этот факт доказан. Первый курс университета, по специальности ВМиК, между делом так.

http://ru.wikipedia.org/wiki/Нормальный_алгоритм
Re[2]: Фундаментальный постулат программирования
От: Gaperton http://gaperton.livejournal.com
Дата: 29.01.12 11:36
Оценка:
О! Минус за ликбез о теории вычислимости — зачетен .
Re[2]: Фундаментальный постулат программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 29.01.12 11:50
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Здравствуйте, Дмитрий Писаренко, Вы писали:


...

ДП>>Это означает:


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


G>И этот факт доказан. Первый курс университета, по специальности ВМиК, между делом так.


Влад, ликбез устраивать, конечно, полезно, но теорема Бома-Якопини ничего не утверждает о том, могут ли быть построены системы вычисления, не включающие описаные выше элементы (последовательность, ветвление и цикл).
Re[3]: Фундаментальный постулат программирования
От: Gaperton http://gaperton.livejournal.com
Дата: 29.01.12 11:09
Оценка:
Здравствуйте, Курилка, Вы писали:

G>>И этот факт доказан. Первый курс университета, по специальности ВМиК, между делом так.


К>Влад, ликбез устраивать, конечно, полезно, но теорема Бома-Якопини ничего не утверждает о том, могут ли быть построены системы вычисления, не включающие описаные выше элементы (последовательность, ветвление и цикл).


Есть маленькая проблема. Указанная тобой теорема — о преобразовани уже готового алгоритма к структурному виду (любой исполняемый алгоритм...), а не о решении "любой проблемы, решаемой за окнечное количество шагов".

Автор же, судя по формулировке вопроса, смешивает само понятие вычислимости со структурным программированием. Это неверно.
Re[4]: Фундаментальный постулат программирования
От: Gaperton http://gaperton.livejournal.com
Дата: 29.01.12 11:16
Оценка:
G>Автор же, судя по формулировке вопроса, смешивает само понятие вычислимости со структурным программированием. Это неверно.

Хотя, впрочем, это частное высказывание — действительно верно. То есть — такие языки (в сочетании с деструктивным присваиванием, которое не было упомянуто) действительно вычислительно полны.

Но оно не особо полезно. Так как, вычислительно полны бывают самые неожиданные системы. В том числе, и те, в которых нет ни присваиваний, ни циклов, ни функций с рекурсиями.
Re[3]: Фундаментальный постулат программирования
От: Дмитрий Писаренко Россия http://dmitripisarenko.me
Дата: 29.01.12 11:16
Оценка: -6
Здравствуйте, Gaperton, Вы писали:

G>О! Минус за ликбез о теории вычислимости — зачетен .


Минус за грубость (тыканье) и ненужное теоретизирование.

Ваши знания, которыми Вы так гордитесь, не имеют абсолютно никакого значения для практики.

Вам хоть раз эти тьюринговые штучки понадобились при решении практических задач?

Если нет, то зачем их изучать?

* * *

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

http://dmitripisarenko.me
Re[4]: Фундаментальный постулат программирования
От: Gaperton http://gaperton.livejournal.com
Дата: 29.01.12 11:35
Оценка: +1
Здравствуйте, Дмитрий Писаренко, Вы писали:

G>>О! Минус за ликбез о теории вычислимости — зачетен .

ДП>Минус за грубость (тыканье) и ненужное теоретизирование.

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

ДП>Ваши знания, которыми Вы так гордитесь, не имеют абсолютно никакого значения для практики.


О как. Чем точно не стоит гордится — так это отсутствием фундаментальных знаний, которые положено знать первокурснику. Так как я уж как 15 лет как защитил диплом — этим мне гордится несколько поздно. Есть другие поводы.

А то, насколько они полезны — может судить только тот, кто ими обладает, не так ли?

ДП>Вам хоть раз эти тьюринговые штучки понадобились при решении практических задач?

ДП>Если нет, то зачем их изучать?

О, вопрос расширяется. Зачем вообще нужно фундаментальное знание? Ну, может, затем, чтобы не задавать глупых вопросов?

ДП>* * *


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


Удивительное рядом. А кто вам сказал, что ваш DSL должен обязательно быть вычислительно полон?
Re[4]: Фундаментальный постулат программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 29.01.12 11:37
Оценка: +1
Здравствуйте, Дмитрий Писаренко, Вы писали:

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


По-моему, делать DSL Тьюринг-полным далеко не обязательно, если не вредно.
Re[5]: Примеры
От: Gaperton http://gaperton.livejournal.com
Дата: 29.01.12 11:51
Оценка:
ДП>>Вам хоть раз эти тьюринговые штучки понадобились при решении практических задач?
ДП>>Если нет, то зачем их изучать?

G>О, вопрос расширяется. Зачем вообще нужно фундаментальное знание? Ну, может, затем, чтобы не задавать глупых вопросов?


Или вот возьмем элементарные, практические примеры. Сильно непохожие на то, с чем ты (Вы) привык иметь дело.

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

Ситема типов Хаскеля — вычислительно полна?

Понятное дело, большинству не надо иметь дело с теорией. А вот Александреску, имея фундаментальное образование, смог показать, что практически полезное можно делать с шаблонами С++. Ибо, они таки _почти_ вычислительно полны.
Re[5]: Еще примеры
От: Gaperton http://gaperton.livejournal.com
Дата: 29.01.12 11:16
Оценка:
ДП>>Что касается теоремы Бёма-Якопини, то она имеет применение. Если я хочу написать DSL, то эта теорема говорит мне о минимальном наборе конструкций, которые должны там быть.

G>Удивительное рядом. А кто вам сказал, что ваш DSL должен обязательно быть вычислительно полон?


awk.
sed.
lexx.
yacc.

Весьма успешные DSL. Част из них вычислительно полны, но не в твоем понимании. То есть, твоего понимания не хватит, чтобы доказать полноту.
Re[6]: Примеры
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 29.01.12 11:53
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Ситема типов Хаскеля — вычислительно полна?


Не должна бы. Те, кто заботится о завершимости алгоритмов типизации (не хочет, чтобы компилятор вис), обычно стараются не делать систему типов тьюринг-полной. Кажися, в стандартном хаскеле это так, а вот со всеми расширениями и примочками GHC уже не знаю.
Re[7]: Примеры
От: Gaperton http://gaperton.livejournal.com
Дата: 29.01.12 11:23
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Не должна бы. Те, кто заботится о завершимости алгоритмов типизации (не хочет, чтобы компилятор вис), обычно стараются не делать систему типов тьюринг-полной. Кажися, в стандартном хаскеле это так, а вот со всеми расширениями и примочками GHC уже не знаю.


Я не специалист по Хаскелю. Тем не менее, факт, что вычисления на типах (как-то — проверка физтческой размерности) там возможны — мне известен.
Re[7]: Примеры
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 29.01.12 11:37
Оценка:
G>>Ситема типов Хаскеля — вычислительно полна?

DM>Не должна бы. Те, кто заботится о завершимости алгоритмов типизации (не хочет, чтобы компилятор вис), обычно стараются не делать систему типов тьюринг-полной. Кажися, в стандартном хаскеле это так, а вот со всеми расширениями и примочками GHC уже не знаю.


здесь можно зайти с другой стороны:
любой "N-конечный алгоритм" можно реализовать на вычислителе без циклов, если у вычислителя есть возможность сгенерить последовательность длины N (в частности, последовательность натуральных чисел).
"N-конечным алгоритмом" назовем алгоритм, для которого известно, что он заведомо завершается за число шагов меньше N (или N(s), где s — конкретный набор входных данных алгоритма)

также помогает, что для большинства стандартных алгоритмов (сортировка, поиск, фильтрация, обработка графов и т.д.) известна верхняя оценка кол-ва шагов.
Re[8]: Примеры
От: Gaperton http://gaperton.livejournal.com
Дата: 29.01.12 12:03
Оценка:
Здравствуйте, DarkGray, Вы писали:

DG>любой "N-конечный алгоритм" можно реализовать на вычислителе без циклов, если у вычислителя есть возможность сгенерить последовательность длины N (в частности, последовательность натуральных чисел).


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

Вычислительно полные схемы зело разнообразны. И циклы — ни разу не являются необхогдимостью. Компбинаторные языки вычилистельно полны, шняга вроде алгорифмов Марова полна, функциональные с рекурсией языки полны. И все выражаются друг через друга (т.е. эквивалентны).

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

шаблоны C++ именно таким вычислителем и являются.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.