конечные автоматы для верификации
May. 8th, 2010 03:29 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Тут в разговоре про очередного, имхо, шарлатана, профессора Шалыто, выяснилось, что есть такая идея, будто для верификации программ достаточно FSM, конечного автомата.
Вот скажите мне, возьмём такой пример: даден алфавит, {a, b}, и две программы, одна генерирует все палиндромы в этом алфавите, вторая проверяет, что данная строка является палиндромом.
Скажите, какой конечный автомат может верифицировать эти программы?
Вот скажите мне, возьмём такой пример: даден алфавит, {a, b}, и две программы, одна генерирует все палиндромы в этом алфавите, вторая проверяет, что данная строка является палиндромом.
Скажите, какой конечный автомат может верифицировать эти программы?
no subject
Date: 2010-05-10 01:04 pm (UTC)no subject
Date: 2010-05-10 02:05 pm (UTC)no subject
Date: 2010-05-10 02:34 pm (UTC)Верификация программного обсепечения, неизвестная
no subject
Date: 2010-05-10 05:36 pm (UTC)Так если я повторю вопрос, можно ли на си написать программу, которая проверяет паритет скобок в другой программе?
no subject
Date: 2010-05-10 06:36 pm (UTC)По поводу скобок. Если "другая программа" задается через char getnextsymbol() то в общем случае нельзя, т.к. вложенность скобок может превысить любое значение представимое в данной реализации Си.
no subject
Date: 2010-05-10 07:42 pm (UTC)no subject
Date: 2010-05-10 08:06 pm (UTC)no subject
Date: 2010-05-10 08:23 pm (UTC)Может быть, Вы тут излагаете что-нибудь вроде нестандартного анализа, кто Вас знает, а я лезу с чепухой вроде континуума.
Потому что есть много различных взглядов на как бы одну и ту же вещь.
no subject
Date: 2010-05-10 09:02 pm (UTC)Конечный автомат всегда либо останавливается за конечное число шагов либо повторяет уже бывшее состояние и тогда не остановится никогда. Отсюда легко понять, что для класса конечных автоматов с числом состояний менее данной константы можно сделать универсальный конечный автомат который их будет верифицировать. Верифицировать в том смысле что он будет говорить остановится ли данный конечный автомат и если да то в каком состоянии. Это был ответ на исходный вопрос можно ли программы верифицировать конечными автоматами: программы на C можно.
Далее возник обратный вопрос. Можно ли проверить программой на C т.е. конечным автоматом парность скобок. Ответ вроде бы очевиден - нет. "Вообразить" бесконечно большую виртуальную память нельзя в том смысле, что это будет не расширением языка "С", а противоречивой системой. В C все типы включая указатели имеют только конечное количество значений. На этом построен весь язык начиная от массивов.
no subject
Date: 2010-05-10 09:42 pm (UTC)no subject
Date: 2010-05-10 09:56 pm (UTC)no subject
Date: 2010-05-10 10:57 pm (UTC)no subject
Date: 2010-05-10 11:39 pm (UTC)no subject
Date: 2010-05-11 07:16 am (UTC)no subject
Date: 2010-05-11 02:25 pm (UTC)no subject
Date: 2010-05-11 02:49 pm (UTC)The ability to create and destroy files from the above finite set is of little interest: there still is a finite constant N such that no program can at any point of its execution store more than N bits of data in files. This, together with the finiteness of addressable storage, means that the program is a finite state machine.
no subject
Date: 2010-05-11 05:19 pm (UTC)no subject
Date: 2010-05-11 06:34 pm (UTC)