Здесь в канале приведено много случаев циклического замыкания, мало того, я писал неоднократно, что необходимо всячески избегать самореференций и циклических замыканий при осуществлении деятельности по имеющимся нормам:
Комментаторы, комментируя некоторые парадоксы, связанные с динамической или статической рекурсией, мне писали, впрочем, несколько самонадеянно, что это, мол, ничего особенного и что это легко решается.
Видно, что автор комментария имеет дело с вычислительными процессами, однако заметим при этом, что процессы, о которых он говорит — строго алгоритмические, хотя бы и сетевые. А вот три процесса, например, которые блокируют друг друга или три договора, которые перебрасывают друг другу комплекс собственника, или же три условия, которые мгновенно переводят право кредиторских требований... вовсе не находятся в алгоритмической системе, хотя да, можно сказать, что часть системы осуществления субъектами норм является алгоритмической.
То есть ситуативно, наверное, можно выдать сигнал, остановить всю систему и перезагрузить её, но... это хорошо в ЭВМ, а представьте себе, что речь идёт о системе отношений в обществе. Вы как останавливать все правоотношения и перезагружать их собираетесь? Было бы так замечательно запустить алгоритм на ЭВМ, чтобы он поработал и указал бы на точки, на которых будут происходить замыкания, юристы бы поработали и законодатель бы ликвидировал такие возможности.
Но вот незадача-то, что даже в алгоритмических системах (не говоря уже о более сложных) не существует и, что важнее — принципиально не может существовать алгоритма, который бы позволял изначально определить — произойдёт циклическое замыкание или нет. Ну, не существует сейчас, ну так сделают завтра, не правда ли? Вон сейчас «умные машины» уже по лицам людей распознают.
Не всё так просто.
Первый человек, а было это в 1936 году, который сформулировал то утверждение, которое я приведу, мы его обсудим и рассмотрим строгое его доказательство, был очень известный всем Алан Тьюринг (да, британский учёный, репрессированный ... нет не «кровавым сталинским режимом», а очень цивилизованным английским правосудием, был искалечен по приговору суда и покончил собой, помилован посмертно, помилован, Карл... посмертно, о как! но не реабилитирован, но ведь это — другоэ, понимать надо!).
Он сформулировал теорему:
Теорема останова
Следующая задача является неразрешимой на машине Тьюринга (следовательно не существует вообще общего алгоритма решения этой задачи):
Даны описание процедуры и её начальные входные данные. Требуется определить: завершится ли когда-либо выполнение процедуры с этими данными; либо, что процедура всё время будет работать без остановки.
Вообще говоря, те, кто обучался по крайней мере в советское время на математических факультетах да ещё и со специализацией так или иначе связанной с кибернетикой или вычислениями, эту теорему очень неплохо знают.
Вот довольно простое её доказательство.
Пусть есть множество ℜ алгоритмов, таких, что они принимают на вход некоторое натуральное число и выдают на выходе тоже натуральное число. Каждый алгоритм на языке полном по Тьюрингу, можно записать в виде конечной, пусть и очень-очень большой последовательности символов этого языка. Теперь давайте сделаем вот что: упорядочим множество ℜ, скажем, просто по алфавиту (или используем любую иную дисциплину упорядочивания, лишь бы она была одно-однозначной), тогда каждый алгоритм из этого множества ℜ непременно получит свой порядковый номер. Заметим, что этот номер будет, — о чудо! — натуральным числом. Одновременно можно сказать, что существует некоторый алгоритм, который, получив на вход порядковый номер, выдаст на выходе весь код соответствующего алгоритма.
Теперь давайте назовём Аналитиком некий алгоритм, который получает на вход пару натуральных чисел (n,x), и:
- останавливается и возвращает 1, если алгоритм с номером n не останавливается, получив на вход x;
- не останавливается в противном случае (если алгоритм с номером n останавливается, получив на вход x).
Если такой алгоритм построить можно, то мы опровергли утверждение теоремы и вот построили алгоритм анализа, а вот если в принципе нельзя, то теорема верна.
Попробуем пойти от обратного.
Пусть Аналитик существует.
Тогда создадим алгоритм Контраналитик, который принимает на вход число n, передаёт пару аргументов (n,n) Аналитику, получает результат работы Аналитика и возвращает этот результат работы как свой. Иначе говоря, Контраналитик останавливается и выдаёт 1 в том и только том случае, если не останавливается алгоритм с номером n, получив на вход число n. Пусть f — это порядковый номер самого Контраналитика в множестве ℜ (мы же множество это упорядочили и каждому алгоритму присвоили номер). Запустим Контраналитик, передавая ему ... число f.
Контраналитик остановится в том и только том случае, если алгоритм с номером f (то есть, он сам!) не останавливается, получив на вход число f (какое мы ему и передали).
Имеем противоречие:
Контраналитик остановится тогда и только тогда, когда он не остановится.
А исходили мы из того, что существует алгоритм Аналитик, описанный выше. Следовательно, наше предположение неверно и Аналитик не существует вообще. И, следовательно, утверждение Тьюринга верно.
QED
Что это значит? Это значит, что не существует общего (подчёркиваю: общего!) решения задачи, сформулированной в статье, ссылку на которую я дал в самом начале.
Поэтому никакого шапкозакидательства тут не пройдёт и необходимо для решения такого рода задач строго выделять те области, в которых наложены какие-то дополнительные ограничения... скажем, запрещающие создание произвольных алгоритмов или структур, которые их содержат. И это значит, между прочим, что профессия юриста как неалгоритмического анализатора системы прав не может быть передана никакой машине, сводимой, например, к машине Тьюринга.
Так что не всё так просто с заменой судов на ЭВМ. Даже на уровне формальной математики. А вот анализ доказательства Теоремы останова и взгляд через этот анализ на существующие нормы как раз юристу-инженеру может дать очень много. Скажем, может помочь конструировать циклы... Или избегать их.