04.07.2012 09:21, Stanislav Maslovski пишет: >> К тому же, в данном частном случае, система, как правило, дискретна. >> И, в теории, возможно перечислить все её состояния, подав на вход все >> комбинации >> "нулей и единиц" (даже, если система с памятью). > Если система обладает неограниченной памятью, как машина Тьюринга с > бесконечной > лентой, то в общем случае нельзя. На практике нельзя уже при сколько-нибудь > значительном объёме памяти, просто в силу потребного времени. Я про практику.
>>> Т.е., общей процедуры доказательства правильности программ в принципе не >>> существует. Однако, это не означает, что в частных случаях такое >>> доказательство провести нельзя. >> Вопрос -то там был изначально в другом. >> А. Чуприна написал, что: >> "В данном случае компиляция выполняется вместо тестов. Тесты, в отличие от >> доказательства корректности, не являются гарантией надежности." > Верное утверждение. Согласен. Но вопрос не в том. >> Т.е., подразумевал, что в этом случае возможен отказ от тестов. > На самом деле, он просто утверждает, что тестирование на примерах (т.е., > твоё "перечисление всех состояний, подав на вход все комбинации нулей и > единиц") ничего не гарантирует. Всех состояний - гарантирует. Но это практически невозможно :-) > Можно 1000 раз успешно прогнать *все* > комбинации входных переменных некой процедуры, а на 1001-м получить > ошибку, например, из-за утечки памяти, или из-за переполнения какой-нибудь > переменной-счётчика, которая не обнуляется между вызовами, и т.п. Значит не были протестированы _все_ состояния. >> Мне кажется это сомнительным. >> По причине того, что полное доказательство, в принципе, провести невозможно >> (в >> зависимости от уровня сложности, конечно). > Похоже, что ты сам запутался в своих рассуждениях: тебя *принципиальная* > доказуемость интересует, или всё же доказуемость в частных случаях? С > первым всё ясно, а про второе тебе уже писали, что доказывать во многих > случаях можно, для этого есть методы, и методы эти не основаны на > переборе всех нулей и единиц. Я неправильно выразился. Полное доказательство корректности достаточно сложной системы провести на практике невозможно ввиду слишком больших затрат ресурсов (и ещё возможно, из-за отсутствия метода доказательства). Так? >>> Например, существуют языки программирования, которые вычисляют через >>> доказательство (через формальную процедуру вывода). PROLOG, например. >>> На таких языках можно писать программы, которые сами же являются >>> доказательствами своей правильности. >> Да, кстати, Пролог я не понимаю. :-( >> Изначально - всё просто. Затем, правила становятся какие-то дикие (к тому >> месту, >> где начинается рекурсия и прочее). Хотя, может, в книжке было плохо описано. >> Но почему программа является априори правильной? > Я такого не утверждал. Что я утверждал, отквочено выше. А, кажется понял. :-) Примерно: "Программа существует и выдаёт правильные результаты, значит является правильной"? >> Ведь она там - просто набор отношений, а "Пролог" - система вывода. >> Кто сказал, что данный набор отношений будет давать верный с точки зрения >> условий задачи результат на любом подмножестве входных данных? > Никто не сказал, однако: > Чем ближе язык программирования по синтаксису и семантике к формальному > описанию задачи, тем проще на нем написать верную программу. В случае > пролога, текст программы просто перефразирует исходное условие на языке > логики предикатов. Т.е., программа получается автоматически верной, если > условие задачи было успешно выражено на языке формальной логики и затем > записано в синтаксисе пролога. По сути, это всё, что требуется. Меньше > уже нельзя, без наделения машины интеллектом и знаниями о внешнем мире. Хм... Но это тоже самое. Просто программа - это описание. И язык здесь - логика предикатов. Проверка нужна для описания. Для проверки его соответствия условию задачи. В сущности, это такая же программа, только "перевёрнутая". И, соответственно, требует проверки. Так? >> И на практике: будь всё так хорошо, как вы пишите, все бы уже давно писали на >> Прологе (по крайней мере, знали бы что это такое). :-) > Незнание, как говорится, не освобождает от ответственности. Плюс, в > идеальном мире все бы уже давно писали хотя бы на том же Haskell... Что такое "идеальный мир", в данном случае? o.O -- 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/4ff5bec3.1080...@yandex.ru