On Thu, Jul 05, 2012 at 08:20:19PM +0400, "Артём Н." wrote: > 04.07.2012 09:21, Stanislav Maslovski пишет: > > Если система обладает неограниченной памятью, как машина Тьюринга с > > бесконечной > > лентой, то в общем случае нельзя. На практике нельзя уже при сколько-нибудь > > значительном объёме памяти, просто в силу потребного времени. > Я про практику.
На практике ситуация такова: случаев, где возможно *полное* формальное доказательство правильности программы *больше*, чем случаев, где для этого достаточно *простых* тестов. Как правило, построение *полного* теста эквивалентно решению исходной программной задачи, и, поэтому, не имеет никакой ценности для доказательства. > > На самом деле, он просто утверждает, что тестирование на примерах (т.е., > > твоё "перечисление всех состояний, подав на вход все комбинации нулей и > > единиц") ничего не гарантирует. > Всех состояний - гарантирует. Но это практически невозможно :-) Да нет же. Почему - следует из вышенаписанного. > > Можно 1000 раз успешно прогнать *все* > > комбинации входных переменных некой процедуры, а на 1001-м получить > > ошибку, например, из-за утечки памяти, или из-за переполнения какой-нибудь > > переменной-счётчика, которая не обнуляется между вызовами, и т.п. > Значит не были протестированы _все_ состояния. Задолбал! :) > > Похоже, что ты сам запутался в своих рассуждениях: тебя *принципиальная* > > доказуемость интересует, или всё же доказуемость в частных случаях? С > > первым всё ясно, а про второе тебе уже писали, что доказывать во многих > > случаях можно, для этого есть методы, и методы эти не основаны на > > переборе всех нулей и единиц. > Я неправильно выразился. Полное доказательство корректности достаточно сложной > системы провести на практике невозможно ввиду слишком больших затрат ресурсов > (и > ещё возможно, из-за отсутствия метода доказательства). Так? Нет. Я утверждал, что во многих случаях *полное* формальное доказательство *возможно* с конечными ресурсами и за конечное время. Просто это доказательство строится совсем не тем способом, который ты себе представляешь. Вот тебе элементарный пример: докажи теорему Пифагора *тестами* =) > >>> Например, существуют языки программирования, которые вычисляют через > >>> доказательство (через формальную процедуру вывода). PROLOG, например. > >>> На таких языках можно писать программы, которые сами же являются > >>> доказательствами своей правильности. > >> Да, кстати, Пролог я не понимаю. :-( > >> Изначально - всё просто. Затем, правила становятся какие-то дикие (к тому > >> месту, > >> где начинается рекурсия и прочее). Хотя, может, в книжке было плохо > >> описано. > >> Но почему программа является априори правильной? > > Я такого не утверждал. Что я утверждал, отквочено выше. > А, кажется понял. :-) Примерно: "Программа существует и выдаёт правильные > результаты, значит является правильной"? O_O > > Никто не сказал, однако: > > Чем ближе язык программирования по синтаксису и семантике к формальному > > описанию задачи, тем проще на нем написать верную программу. В случае > > пролога, текст программы просто перефразирует исходное условие на языке > > логики предикатов. Т.е., программа получается автоматически верной, если > > условие задачи было успешно выражено на языке формальной логики и затем > > записано в синтаксисе пролога. По сути, это всё, что требуется. Меньше > > уже нельзя, без наделения машины интеллектом и знаниями о внешнем мире. > Хм... Но это тоже самое. Просто программа - это описание. И язык здесь - > логика > предикатов. Проверка нужна для описания. Для проверки его соответствия условию > задачи. В сущности, это такая же программа, только "перевёрнутая". И, > соответственно, требует проверки. Так? Ты явно хочешь свернуть с доказательства правильности *решения* задачи на доказательство правильности *постановки* задачи. Это отдельная проблема, которая формальными методами не решается *в принципе*. > >> И на практике: будь всё так хорошо, как вы пишите, все бы уже давно писали > >> на > >> Прологе (по крайней мере, знали бы что это такое). :-) > > Незнание, как говорится, не освобождает от ответственности. Плюс, в > > идеальном мире все бы уже давно писали хотя бы на том же Haskell... > Что такое "идеальный мир", в данном случае? o.O Мир, в котором невежество не выставляется за геройство ;) -- Stanislav -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20120708132346.GC18653@kaiba.homelan