Re[9]: Проблема остановки и память
От: vdimas Россия  
Дата: 13.10.15 06:41
Оценка:
Здравствуйте, Куть, Вы писали:

К>А может, не нужно перебирать все строки, а можно как-нибудь сгруппировать их? А что, если Анализатор сам этим займётся на основе текста программы парсера, которую подали ему на вход?


Вооот...
Это другой полюс исследований в этой области.

Делается это через "док-ва". В практическом плане на прямо сегодня — через дедукцию и парные ей альфа/бета-редукции. Есть некий набор примитивов, про которые известны их характеристики. Любая программа — комбинация таких примитивов с учетом их ограничений. Св-ва подавляющего большинства однопоточных алгоритмов можно вывести через св-ва их примитивов и способа их комбинации.

Это т.н. "символьные вычисления" — противоположность твоему подходу.


К>Но люди как-то поняли, что она останавливается.


Не как-то, а через упомянутую дедукцию. Были найдены и доказаны св-ва алгоритма для N =0, 1, ... и были выражены св-ва алгоритма для любого N через св-ва алгоритма для (N-1).


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

К>Так какие фундаментальные ограничения у алгоритма?

"Алгоритм" не в состоянии сделать вывод о корректности программы за разумное время. "Алгоритм" может только выдать "да/нет" для конкретного набора входных данных. Чем это лучше запуска целевой программы на этих же данных — я ХЗ, если честно. От того, что мы проэмулировали императивный вычислитель, мы не поменяли низлежащую вычислительную модель; мы лишь, считай, добавили немного отладочной информации. ))
Отредактировано 13.10.2015 6:42 vdimas . Предыдущая версия .
Re[10]: Проблема остановки и память
От: Куть  
Дата: 19.10.15 12:44
Оценка: +1
Здравствуйте, vdimas, Вы писали:

V>Это т.н. "символьные вычисления" — противоположность твоему подходу.

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

V>Не как-то, а через упомянутую дедукцию. Были найдены и доказаны св-ва алгоритма для N =0, 1, ... и были выражены св-ва алгоритма для любого N через св-ва алгоритма для (N-1).

Наверное, спутал с индукцией? =)

V> Чем это лучше запуска целевой программы на этих же данных — я ХЗ, если честно.

Целевая программа может никогда не завершится, а Анализатор всегда завершается.
Re[11]: Проблема остановки и память
От: vdimas Россия  
Дата: 30.10.15 02:25
Оценка:
Здравствуйте, Куть, Вы писали:

V>>Это т.н. "символьные вычисления" — противоположность твоему подходу.

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

Похоже, ты уже споришь сам с собой. Я же не с этим спорил, а с тем, что в практическом плане это нам ничего не даёт.


К>Напомню, что в оригинальной проблеме остановки Анализатора не существует.


Я и не обсуждал эту проблему. Я демонстрировал, что твой Анализатор не работает лучше, чем сценарий непосредственного запуска самой программы. Именно поэтому предложил покопаться в альтернативном направлении.


V>>Не как-то, а через упомянутую дедукцию. Были найдены и доказаны св-ва алгоритма для N =0, 1, ... и были выражены св-ва алгоритма для любого N через св-ва алгоритма для (N-1).

К>Наверное, спутал с индукцией? =)

Почему спутал? Индукцией является умозрительный вывод (человеком) характеристик алгоритма от i = 0, 1.. до произвольного N, в процессе же работы символьного анализатора происходит обратное — именно дедукция.


V>> Чем это лучше запуска целевой программы на этих же данных — я ХЗ, если честно.

К>Целевая программа может никогда не завершится, а Анализатор всегда завершается.

Я давал оценки времени этого "всегда завершается" для небольшой разрядности и небольшого (по современным меркам) пространства состояний — Вселенная успеет миллиарды миллиардов раз по кругу схлопнуться в ЧД и снова взорваться.

Т.е., в смысле здравого материализма — нет ровно никакой разницы.
Re[9]: Проблема остановки и память
От: vdimas Россия  
Дата: 30.10.15 02:29
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


С этим никто и не спорит, просто напоминают, что такой алгоритм может быть выражен более простой моделью — КА, например. И прямо из св-в КА следует конечность мн-ва его состояний.
Re[10]: Проблема остановки и память
От: Evgeny.Panasyuk Россия  
Дата: 30.10.15 05:24
Оценка:
Здравствуйте, vdimas, Вы писали:

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

V>С этим никто и не спорит, просто напоминают, что такой алгоритм может быть выражен более простой моделью — КА, например. И прямо из св-в КА следует конечность мн-ва его состояний.

Конкретный обсуждаемый алгоритм не может быть выражен в КА, при этом у нас есть доказательство его не останова.
Re[12]: Проблема остановки и память
От: Куть  
Дата: 30.10.15 10:54
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Похоже, ты уже споришь сам с собой. Я же не с этим спорил, а с тем, что в практическом плане это нам ничего не даёт.

Ничего не даёт использование Анализатора вообще или конкретного описанного в доказательстве алгоритма (назовем его "наивным")?
Если наивного, то кто ещё спорит сам с собой =)
Если вообще, то есть практическое применение: http://rsdn.ru/forum/philosophy/6186702.1
Автор: kochetkov.vladimir
Дата: 18.09.15


V>Я и не обсуждал эту проблему. Я демонстрировал, что твой Анализатор не работает лучше, чем сценарий непосредственного запуска самой программы. Именно поэтому предложил покопаться в альтернативном направлении.

А я могу продемонстрировать, что это принципиально разные вещи.
Возьмём программу на питоне:
while True:
  pass
print("Done")

Даже наивный Анализатор завершается мгновенно, а программа не завершается.

К>Она тоже будет работать дольше, чем время жизни вселенной. Но люди как-то поняли, что она останавливается.

V>Не как-то, а через упомянутую дедукцию. Были найдены и доказаны св-ва алгоритма для N =0, 1, ... и были выражены св-ва алгоритма для любого N через св-ва алгоритма для (N-1).
К>Наверное, спутал с индукцией? =)
V>Почему спутал? Индукцией является умозрительный вывод (человеком) характеристик алгоритма от i = 0, 1.. до произвольного N, в процессе же работы символьного анализатора происходит обратное — именно дедукция.
Ты потерял контекст, мы и говорили о человеке. Аккерман опубликовал свою функцию в начале 20-го века.

V>Я давал оценки времени этого "всегда завершается" для небольшой разрядности и небольшого (по современным меркам) пространства состояний — Вселенная успеет миллиарды миллиардов раз по кругу схлопнуться в ЧД и снова взорваться.

V>Т.е., в смысле здравого материализма — нет ровно никакой разницы.
Для программы выше ты не успеешь подумать о вселенной, а Анализатор уже завершится.
Re[13]: Проблема остановки и память
От: vdimas Россия  
Дата: 03.11.15 01:27
Оценка:
Здравствуйте, Куть, Вы писали:

V>>Я и не обсуждал эту проблему. Я демонстрировал, что твой Анализатор не работает лучше, чем сценарий непосредственного запуска самой программы. Именно поэтому предложил покопаться в альтернативном направлении.

К>А я могу продемонстрировать, что это принципиально разные вещи.
К>Возьмём программу на питоне:
К>Даже наивный Анализатор завершается мгновенно, а программа не завершается.

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


К>Ты потерял контекст, мы и говорили о человеке. Аккерман опубликовал свою функцию в начале 20-го века.


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


V>>Т.е., в смысле здравого материализма — нет ровно никакой разницы.

К>Для программы выше ты не успеешь подумать о вселенной, а Анализатор уже завершится.

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

Даже в MS не сумели полностью избавиться от дедлоков в их SQL-сервере по объективным причинам.

Так вот, мой посыл в том, что современная многопоточная программа — это автомат с охренительным пространством состояний. И именно для обычной современной программы подобный анализатор фактически бесполезен из-за указанных мною ограничений. Простое зацикливание обнаруживается простой отладкой и это такой ничтожный %% всех сценариев, что овчинка выделки не стоит. А вот найти потенциальный сценарий дедлока или зацикливания алгоритма (алгоритмов) из мн/ва общающихся процессов, прогнав всевозможные взаимные относительные состояния всех потоков исполнения — вот это, действительно, будет востребованная весчь. И всё моё участие здесь сводится к тому, чтобы на пальцах объяснить, что избранный тобой путь поставленную задачу принципиально не решает из-за фундаментальных ограничений этого подхода (например, из двух процессов по 100 состояний в каждом, после прогона их всевозможных взаимных состояний, получим 10тыщ различных состояний эквивалентного одного автомата, и я давал прикидки именно на такой порядок кол-ва состояний).

В общем, нужен другой подход. Нужен символьный анализ, нужен "алфавит" известных "кубиков", нужен анализ и декомпозиция алгоритмов до этих кубиков с известными св-вами и затем аналитический вывод св-в программы из знаний о св-вах известных композиций из известных кубиков и далее по иерархии таких композиций. Это навскидку. А как оно будет, если заняться этим всерьез — я ХЗ.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.