1. Куча / Говнокод #20110

    −17

    1. 1
    2. 2
    3. 3
    (x) {
      if F(x,x) then { for(;;) }
    }

    http://www.michurin.net/computer-science/halting-problem.html
    Неразрешимость проблемы остановки имеет много доказательств. В терминах функций её очень просто доказать от противного.

    Допустим, у нас уже есть решение — функция F, которая принимает на вход некую функцию (вернее строку с текстом функции, байт-кодом или иной записью функции) и некие данные и отвечает на вопрос: «остановится ли функция-первый-аргумент, при работе с данными-вторым-аргументом, или будет работать вечно?»

    Давайте создадим функцию P(x), такого вида (на C-образном языке):

    P(x) {
    if F(x,x) then { for(;;) }
    }


    Строку, которая кодирует эту функцию обозначим p. Что будет, если мы вызовем функцию F(p,p)? Возможны два исхода:

    True, если P останавливается. Но при этом P(p) как раз не останавливается, если F(p,p)=True, то запускается бесконечный цикл.
    False, если P зависает. Но, как не трудно видеть, именно в этом случае P(p) не зависнет.

    Мы получили противоречие потому, что наша начальная посылка о существовании магической функции F была не правильной.

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

    В данном доказательстве на довольно глубинном уровне зарыто говно. Подробности в комментариях

    Запостил: j123123, 01 Июня 2016

    Комментарии (123) RSS

    • Для реальных вычислительных машин проблема остановки точно разрешима, и вот каким образом:
      Допустим, есть программа А, которой доступны 10 кб оперативной памяти, регистры процессора и сам процессор. Как узнать, зависает ли программа A? Очень просто: пишем программу Б, которая бы эмулировала 10 кб оперативной памяти и процессор с регистрами, загружаем туда нашу программу. На каждом "шаге" виртуального процессора, программа делает дамп оперативной памяти и регистров процессора и сравнивает этот дамп с теми дампами, которые уже записаны. Если этот дамп ни с одним другим не совпадает, то мы этот дамп записываем. Если дамп совпадает с более ранним дампом, то мы обнаружили зависание.
      Что касается доказательства неразрешимости, которое приведено в вашей заметке, то тут все очень просто: программа Б внутри программы Б обнаружит, что ей явно нехватает оперативной памяти для эмуляции самой себя, а дальше все ясно.

      К сожалению, такой способ проверки зависания не подходит для доказывания существования или несуществования нечетных совершенных чисел. На машине Тьюринга такая проверка будет работать далеко не всегда. Если реализовать программу, проверяющую зависания описанным выше способом, то такая программа никогда не обнаружит зависания этого:
      a=2
      while ( (a % 2) == 0)
      {
      a=a+2
      }
      если рост переменной a ничем не ограничен. Но человеку, понимающему смысл этой записи и знающему основы математики, вполне понятна причина зависания. Четное число + четное число это всегда четное число. Если верить тезису Чёрча-Тьюринга, то существует программа на машине Тьюринга, способная прийти к выводу, что эта программа зависает, поскольку человек вполне способен к нему прийти. Таким образом, чтобы обнаружить это зависание, программа ндолжна уметь делать какие-то рассуждения, а не просто выполнять некоторую программу, в надежде что ее состояние повторится или она остановится.
      Ответить
      • Возьмем программу нахождения зависаний для машины Тьюринга, которая пытается найти зависание только методом эмуляции и отслеживанием состояний программы и сравнивания эти состояния, проверяя, повторяются они или нет. Такая программа вполне возможна, ее даже можно написать. Пусть это будет функция Б(a,b).
        a - конечный набор инструкций тестируемой программы
        b - параметры, которые мы передаем тестируемой программе

        И пусть она возвращает true если ф-ция не останавливается, и false если останавливается. Впрочем, это не важно.
        Сделаем функцию В(a):

        B(a) {
        Б(a,a);
        }

        Что будет, если мы вызовем В(В)?
        Давайте смотреть по шагам:
        В(В) вызывает Б(В,В)
        Б(B,B) эмулирует работу В(В):

        #В(В) вызывает Б(B,B)
        #Б(B,B) эмулирует работу В(В):

        ##В(В) вызывает Б(B,B)
        ##Б(B,B) эмулирует работу В(В):

        ...

        И мы понимаем, что оно зависло, эмулируя само себя. Эта самоэмуляция никогда не остановится, потому что эмулируемая функция сама эмулирует саму себя и так до бесконечности, состояние первоначально эмулируемой функции никогда не повторится, потому что внутри эмулируемой функции будет еще эмуляция, внутри ней еще и так до бесконечности. Если мы поняли что оно зависло и если верить тезису Чёрча-Тьюринга, то должен существовать алгоритм, который это зависание способен обнаружить. Как бы он его стал обнаруживать? Хороший вопрос. Видимо, так же как и мы: пошагово выполнять тестируемую программу (эмуляция) и смотреть, не происходит ли внутри тестируемой программы эмуляции. Если происходит, то не повторяет ли эмулируемая внутри программы программа тот код, который уже обрабатывался? Иными словами, не эмулируется ли эмулятор, который эмулирует сам себя до бесконечности? Допустим, функция, обнаруживающая такого рода зависания это П(a,b).
        a - конечный набор инструкций тестируемой программы
        b - параметры, которые мы передаем тестируемой программе
        Ответить
        • Запустим теперь П(В,В)

          П(В,В) эмулирует работу В(В):

          #В(В) вызывает Б(B,B)
          #Б(B,B) эмулирует работу В(В):/1

          **STOP**

          Внутри функции В(В) началась эмуляция В(В)
          Условия остановки эмуляции /1 никогда выполнены не будут, будет разрастание В(В) которая себя внутри себя бесконечно эмулирует и не может остановиться.

          Теперь сделаем функцию Вп(a):

          Bп(a) {
          П(a,a);
          }

          Запустим Bп(Вп)

          Вп(Вп) вызывает П(Вп,Вп)
          П(Bп,Bп) эмулирует работу Вп(Вп): /1
          #Вп(Вп) вызывает П(Вп,Вп)
          #П(Bп,Bп) эмулирует работу Вп(Вп): /2

          **STOP**

          А вот это уже интересно. Что тут происходит? П(Вп,Bп) /1 эмулирует функцию Вп(Вп), которая запускает П(Вп,Bп) /2. Что должна сделать функция П(Вп,Bп) /1 ? Если ф-ция П(Bп,Bп) /1 "решила" что это зависает, тогда П(Bп,Bп) /1 завершает работу, но точно так же должна будет поступить функция П(Bп,Bп) /2. Если функция П(Bп,Bп) /2 так поступит, то П(Bп,Bп) /1 должна обнаружить это, и сообщить что это не зависает т.к. П(Bп,Bп) /2 завершилось. Это очень похоже на http://ru.wikipedia.org/wiki/Парадокс_Рассела
          А разгадка на самом деле проста. Функция П(Вп,Bп) /1 должна сообщить, что это зависает, и при этом *зависнуть*. Тогда никаких противоречий нет, потому что П(Bп,Bп) /2 поступит так же. Если нет возможности так сделать, то Bп(Вп) просто зависнет
          Ответить
          • И функция П(a,b) и функция Б(a,b) делает эмуляцию и отслеживает поведение (состояние) эмулируемой программы. Соединим их в одно целое: ПБ(a,b) которая возвращает true при зависании и false при не-зависании

            А теперь рассмотрим доказательство неразрешимости проблемы остановки, описанное в вашей этой заметке:

            Сделаем функцию Впб(a):

            Bпб(a) {
            if (ПБ(a,a)) { for(;;) }
            }
            Что будет, если мы вызовем функцию ПБ(Bпб,Bпб)? Давайте посмотрим

            ПБ(Bпб,Bпб) эмулирует работу Впб(Впб): /1
            #Впб(Впб) проверяет условие для if
            #Для этого Впб(Впб) вызывает ПБ(Bпб,Bпб)
            #ПБ(Bпб,Bпб) эмулирует работу Впб(Впб): /2

            **STOP**

            Функция ПБ(Bпб,Bпб) /1 обнаружила, что она эмулирует функцию Впб(Впб), которая вызывает ПБ(Bпб,Bпб) /2 которая эмулирует функцию Впб(Впб) итд. Ситуация аналогична предыдущей, и тут у нас такое же решение. ПБ(Bпб,Bпб) /1 должна сообщить что это зависает, и сама при этом она должна зависнуть, тогда никаких противоречий тут нет, и доказательство неразрешимости проблемы остановки, описанное в вашей в вашей заметке, является неверным потому что оно основано на предположении что программа, проверяющая зависание, должна обязательно завершиться при обнаружении зависания или независания. Не учитывается варианта, что такая программа может сообщить о зависании, но при этом зависнуть. Если же она обязательно должна завершаться как только обнаружит зависание, то такая программа просто зависнет в такой ситуации, при этом она "поймет" что она зависла, но сообщить она об этом не может, потому что если она об этом сообщит, то она должна не зависнуть.
            Ответить
      • > Для реальных вычислительных машин проблема остановки точно разрешима,

        она уже давно решена, в том смысле что это теоретическая проблема и к реальному нетеоретическому железу просто неприменима.
        Ответить
      • > Если этот дамп ни с одним другим не совпадает, то мы этот дамп записываем. Если дамп совпадает с более ранним дампом, то мы обнаружили зависание.

        А насколько простой будет сама задача сравнения дампа со всеми более ранними? Не «зависнет» ли программа на сравнениях?
        Ответить
        • Причём машина с N битами имеет 2^N состояний... Т.е. для худшего случая нам понадобится 2^N бит под флажки для уже пройденных состояний.

          Зато задачу остановки реальной машины всегда можно решить на машине тьюринга с бесконечной лентой.
          Ответить
          • > с бесконечной лентой

            Я заглянул в машинный зал и посмотрел, как работает энергогенератор. Институт не зависел от городских источников энергии. Вместо этого, после уточнения принципа детерминизма, решено было использовать хорошо известное Колесо Фортуны как источник даровой механической энергии. Над цементным полом зала возвышался только небольшой участок блестящего отполированного обода гигантского колеса, ось вращения которого лежала где-то в бесконечности, отчего обод выглядел просто лентой конвейера, выходящей из одной стены и уходящей в другую. Одно время было модно защищать диссертации на уточнении радиуса кривизны Колеса Фортуны, но поскольку все эти диссертации давали результат с крайне невысокой точностью, до десяти мегапарсеков, Учёный совет института принял решение прекратить рассмотрение диссертационных работ на эту тему вплоть до того времени, когда создание трансгалактических средств сообщения позволит рассчитывать на существенное повышение точности.

            Несколько бесов из обслуживающего персонала играли у Колеса – вскакивали на обод, проезжали до стены, соскакивали и мчались обратно. Я решительно призвал их к порядку. «Вы это прекратите, – сказал я, – это вам не балаган».


            Стругацкие, «Понедельник начинается в субботу».
            Ответить
          • За бесконечное время

            Это греет меня долгими холодными зимними вечерами...
            Ответить
            • За конечное. Там же всего 2^n итераций и столько же битов памяти.
              Ответить
              • Тогда зачем тебе бесконечная лента?
                Ответить
                • Чтобы отрезать от неё кусок нужной длины, а остаток юзать в своих грязных целях.
                  Ответить
    • Другими словами, если сказать человеку X который зависает если то что он эмулирует не зависает, а если то что он эмулирует - зависает -- то чтобы он сам при этом не зависал и поднял вверх левую руку, и дать ему задание, чтобы он у себя в голове проэмулировал Y = "человек X который эмулирует Y" то человек поймет, в чем тут подъебка.
      Ответить
      • https://lurkmore.to/Catch-22

        — Конечно, ловушка, — ответил Дейника. — И называется она «уловка двадцать два». «Уловка двадцать два» гласит: «Всякий, кто пытается уклониться от выполнения боевого долга, не является подлинно сумасшедшим».

        Да, это была настоящая ловушка. «Уловка двадцать два» разъясняла, что забота о себе самом перед лицом прямой и непосредственной опасности является проявлением здравого смысла. Орр был сумасшедшим, и его можно было освободить от полетов. Единственное, что он должен был для этого сделать, — попросить. Но как только он попросит, его тут же перестанут считать сумасшедшим и заставят снова летать на задания. Орр сумасшедший, раз он продолжает летать. Он был бы нормальным, если бы захотел перестать летать; но если он нормален, он обязан летать. Если он летает, значит, он сумасшедший и, следовательно, летать не должен; но если он не хочет летать, — значит, он здоров и летать обязан. Кристальная ясность этого положения произвела на Йоссариана такое глубокое впечатление, что он многозначительно присвистнул.
        Ответить
    • > если рост переменной a ничем не ограничен.
      Ограничен размером оперативной памяти. Поэтому да, для любой программы с заданным размером оперативной памяти можно сказать остановится она или нет.
      А вот для машины тьюринга с бесконечной лентой и других машин без заданного ограничения памяти проблема остановки неразрешима.
      > Если мы поняли что оно зависло и если верить тезису Чёрча-Тьюринга, то должен существовать алгоритм, который это зависание способен обнаружить.
      Смешная шутка. Можно так запутать программу что мы точно не поймем что она что-то там эмулирует, с чего это алгоритм должен понять.
      > Не учитывается варианта, что такая программа может сообщить о зависании, но при этом зависнуть.
      Этот вариант невозможен. Если программа нам что-то сообщает, то конечно мы ее остановим и не будет продолжать. Ну и в чем говно доказательства то?
      Ответить
      • >А вот для машины тьюринга с бесконечной лентой и других машин без заданного ограничения памяти проблема остановки неразрешима.
        Может быть. Только доказательство какое-то дырявое. Ну вот конкретная программа, которой сказали эмулировать саму себя эмулирующую себя эмулирующую себя и так до бесконечности, она МОЖЕТ понять что тут дело неладно, так что тут есть над чем подумать

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

        >Этот вариант невозможен. Если программа нам что-то сообщает, то конечно мы ее остановим и не будет продолжать.
        Ну это мы ее остановим, внешнее воздействие
        Ответить
      • > Ну и в чем говно доказательства то?
        Представь что тебе вот сказали X; Только этот X рекурсивный:
        X = "чтобы ты представил сам себя в параллельной вселенной, где бы тебе сказали X и если то что ты представил зависнет то тогда ты подними правую руку, а если оно не зависло и поднимает руку, то ты тогда сам зависни"

        А теперь скажи, разве из этого следует что тебя не существует?
        Ответить
        • > Ну вот конкретная программа, которой сказали эмулировать саму себя эмулирующую себя эмулирующую себя и так до бесконечности, она МОЖЕТ понять что тут дело неладно, так что тут есть над чем подумать
          Не может конечно. Ей сказали например эмулировать компьютер, на компьютере запустили майнкрафт, в майнкрафте собрали машину тьюринга и на ней запустили эту программу. Как программе понять что они не просто в майнкрафт играют а что-то там эмулировать начали.
          Ответить
          • >Ей сказали например эмулировать компьютер, на компьютере запустили майнкрафт, в майнкрафте собрали машину тьюринга и на ней запустили эту программу. Как программе понять что они не просто в майнкрафт играют а что-то там эмулировать начали.

            Если ты начал делать подобный эмулятор, тебе еще надо бы доказать самому себе, что эта машина тьюринга внутри майнкрафта будет полностью эквивалентна той, которая в ней самой потом будет эмулироваться в последствии. Например, там может внезапно заспавниться крипер и взорвать твою машину тьюринга нафиг. Если это так, если ты это можешь математически доказать, то рано или поздно (но в любом случае за конечное время) программа сможет перелезть через уровни абстракции, пронюхать что там где-то в майнкрафте есть машина тьюринга которая никогда криппером не взрывается и работает вечно, и оказывается что она исполняет то, что в конечном итоге исполняет ту же машину тьюринга, которая саму себя в итоге эмулирует, ну и так далее.
            Ответить
            • > пронюхать что там где-то в майнкрафте есть машина тьюринга которая никогда криппером не взрывается и работает вечно
              сможет
              > оказывается что она исполняет то, что в конечном итоге исполняет ту же машину тьюринга, которая саму себя в итоге эмулирует
              не сможет. Например пусть первая машина первым делом выводит "1", а вторая - "11". Тогда эти машины будут разными, она и не догадается что мы на самом деле в майнкрафте сделали чтоб к машине добавлялся вывод единички, на результат зависнет\не зависнет он же не влияет.
              Ответить
              • >Например пусть первая машина первым делом выводит "1", а вторая - "11".
                Это уже смена изначальной постановки задачи. Но вроде бы нам не важно, что там оно первым делом выводит. Важно понять, зависает эмулируемая штука, или нет. Так что выводимые машиной тьюринга единички можно смело в /dev/null отправлять, если мы ставим задачу доказать зависаемость.
                Ответить
        • > если то что ты представил зависнет
          ну так я не смогу узнать зависло оно или нет. Я буду бесконечно долго ждать, а оно будет продолжать и продолжать что-то считать, ни разу не повторяясь.
          Ответить
          • Ты сможешь понять то, что ты этого понять не сможешь. А если ты это не сможешь понять, то ты завис. А если ты завис то ты должен поднять руку, потому что ты не завис. Но если ты поднял руку, то ты должен зависнуть. И ты это все прекрасно понимаешь. Все что тебе остается делать, это просто зависнуть, не поднимать руки. Сам ты прекрасно знаешь, что ты завис(проблема останова решена), только сообщать об этом ты не можешь.
            Ответить
            • Ну т.е. я не смогу выполнить Х. Тогда и машины тьюринга выполняющей Х не существует. Исходному доказательству это не противоречит.
              Ответить
              • Ты сможешь понять что ты зависнешь, и все последующие эмуляции тебя в твоем воображени и в воображении внутри воображений на каком угодно уровне вложенности тоже зависнут. Так что проблема останова решена
                Ответить
                • Как она решена если я даже не могу выполнить то что мне сказали, т.е. Х.
                  Ответить
                  • Почему не можешь? Не можешь представить самого себя? Я например могу
                    Ответить
                    • Ну ты Х то слышал? Выполнил? руку поднял или висишь?
                      Ответить
                      • слышал, вишу, но понимаю это
                        Ответить
                        • Ну а толку от понимания, раз ты даже не можешь Х выполнить. Тебе же сказали руку поднять, а ты висишь.
                          Ответить
                          • Не, так не выйдет. Но я могу поднять ногу например, и продолжить висеть.
                            Ответить
                            • Ну т.е. ты не способен выполнить Х. О чем я и говорю.
                              Ответить
                              • Способен же. Просто я хорошо в рекурсию умею. Приходится вынужденно зависнуть и не сообщать об этом, но понимание природы самого зависания у меня есть. А если верить этому доказательству, то получается что меня не существует
                                Ответить
                                • Понимание есть, но выполнить Х ты не можешь, ты вынужден его нарушить. Если верить доказательству не существует того кто способен выполнить Х, ни машины ни человека, твой(и мой) примеры это подтверждают.
                                  Ответить
                                  • Я вынужден был сообщить SIGKILL условному процессу в моей голове, который это эмулировал. А сам этот процесс в процессе своего выполнения ничего не нарушал. Так что выполнить X я смог
                                    Ответить
                                    • В X тебя просили не просто что-то там представить. Тебя просили поднять руку (ну или зависнуть если воображаемый поднимет). Ты не поднял. Следовательно, Х не выполнен.
                                      Ответить
          • >ни разу не повторяясь.
            Надо сопоставления делать, например доказывать что эта штука делает (эмулирует) то, что делала эта же штука 10000 годами ранее (может быть оно там каким-то хитрым образом обфукцсированно из-за пропускания через эмулятор, но это ж можно распутать за конечное время)
            Ответить
            • Нельзя распутать. Например я обнаружил что эта программа эмулируют другую программу всегда, за исключением какой-то одной комбинации значений в памяти, при которой ее поведение отличается. И тогда мне остается только продолжать симуляцию и ждать возникнет ли эта комбинация. А если она никогда не возникнет, то я так и не смог узнать за конечное время эмулирует она или нет.
              Ответить
              • >Например я обнаружил что эта программа эмулируют другую программу всегда, за исключением какой-то одной комбинации значений в памяти, при которой ее поведение отличается.
                Тогда надо попробовать доказать, что такой комбинации в памяти никогда не наступит

                >И тогда мне остается только продолжать симуляцию и ждать возникнет ли эта комбинация.
                Могут быть и другие способы доказать это. Чисто математическими способами, например теорема Ферма была доказана без всяких переборов (перебором ее можно было б только опровергнуть, это тоже пытались делать, безуспешно).
                Ответить
                • > Могут быть и другие способы доказать это. Чисто математическими способами, например теорема Ферма была доказана без всяких переборов
                  А могут и не быть. Итого: нам не удалось доказать что возможна машина, которая будет определять что она эмулирует сама себя. Таким образом, исходное доказательство о неразрешимости остается в силе.
                  Ответить
                  • >нам не удалось доказать что возможна машина, которая будет определять что она эмулирует сама себя.
                    Как не удалось доказать и то, что такая машина невозможна
                    Ответить
                    • Допустим, что наша функция умеет распознавать, себя она эмулирует или нет. В итоге что она должна вернуть когда мы задаем ей "Х" из ветки выше? Она не может ни зависнуть ни не зависнуть, т.к. парадокс лжеца. Отсюда вывод - такой функции не существует.
                      Ответить
                      • Если ей задать X из ветки выше, она поймет что эмулирует себя. Но никто ж не обязывает ее зависать или не зависать
                        Ответить
                        • Ну поняла она. Но нам пофиг что она поняла, нам ответ нужен - что она вернет, поднимет руку или зависнет? у нас там условно говоря if(эта функция) then поднять else зависнуть.
                          Ответить
                          • отладчиком к ней цепляться, очевидно же. Пусть оно в какую-нибудь область памяти пишет "YA ZAVIS I YA DOKAZAL CHTO YA SAM SEBYA EMULIRUIU"
                            Ответить
                            • я написал строку.
                              if(эта функция) then поднять else зависнуть.
                              она зависла, нарушив Х. Я не хочу никаким отладчиком цепляться, я сразу выкидываю эту функцию т.к. она не работает, виснет вместо ответа.
                              Ответить
                              • ок, выкидывай. Но доказательство невозможности такой функции(которая может "понять" что она сама себя эмулирует) я не увидел. Для некоторого множества частных случаев такую функцию точно можно создать
                                Ответить
                                • С тем что для некоторого множества частных случаев никто и не спорит. Важно что в общем случае такой функции нет, она зависает вместо ответа.
                                  ---
                                  > которая может "понять" что она сама себя эмулирует
                                  Внутри себя она может "понимать" что угодно. От нее требуется вернуть правильный результат - а она не возвращает.
                                  Ответить
                                  • Бля, это штырит даже круче вореций.
                                    Ответить
                                    • Особенно если одновременьше верблюдаешься вникнуть в удалишние кобенации.

                                      Кстати, шесть юзеров пытаются утопить это интересное обсуждение.
                                      Ответить
                                      • Это обсуждение обязательно надо схоронить и натализировать. Будет вообще как трава. А потом вореционизировать.
                                        Ответить
                                        • Надо больше реминисценций! Одной «Уловки двадцать два» мало! По любому же у писателей-фантастов что-то подобное встречалось не раз.
                                          Ответить
                                        • Почитай "Анафем". Стиль почти вореационный, все слова незнакомые, но, в принципе, догадываешься о чём речь. Забавно, что в русском переводе эту фишку сохранили :)
                                          Ответить
                                        • Надо уже Пи в тред приглашать.
                                          Ответить
                                      • С чего бы оно интересное? Ошибка в рассуждениях тривиальна, даже wxvxw не понадобился.
                                        Ответить
                                        • А в чем ошибка-то? Я вижу только аргументы из разряда "Если взять гипотетический калькулятор и на нем разделить 0 на 0 то тогда непонятно, что именно ему надо считать и выводить. Следовательно, калькуляторов не существует".

                                          Есть ли хоть одна реальная функция, для которой было бы доказано, что мы не можем ни доказать, ни опровергнуть ее зависаемость?
                                          Ответить
                                          • Да, кстати. Продолжая аналогию с калькулятором. Быть может это говорит не о том, что калькулятора не существует, а о том, что самого деления на ноль не существует.

                                            Может быть самой машины тьюринга попросту нет, и потому получается такая нелепая ситуация, когда программа вроде бы способна понять, что от ее выбора зависнуть или не зависнуть зависит то, нужно ли ей будет зависнуть или не зависнуть(зависнуть если не зависнет и не зависать если зависнет). Понятное дело, что на конечной памяти такие трюки не пройдут
                                            Ответить
                                          • Конечно. Функция которая на входе получает номер машины тьюринга, строит ее и исполняет. Для этой функции было доказано, что мы не можем ни доказать ни опровергнуть ее зависаемость (для произвольного аргумента в общем виде).
                                            Ответить
                                            • Для произвольного алгоритма в общем виде - не годится. Надо чтобы была вполне конкретная заданная конечным числом байтов функция, которая полностью детерминированно выполняется и не принимает никаких аргументов извне (считаем что все аргументы, которые бы следовало в нее передавать, зашиты намертво в исходнике)
                                              Ответить
                                              • тут еще такая ловушка. Если предположить что есть функция X для которой доказали, что за конечное время мы не можем ни доказать, ни опровергнуть что она зависает, то это будет как раз таки означать, что мы доказали ее зависаемость. Если программа не зависает, то мы всегда за конечное число шагов можем ее завершить, просто выполнив. А раз мы не можем за конечное число шагов доказать ее независаемость, значит она зависает.

                                                Таким образом, любая функция, для которой доказано, что за конечное время мы не можем ни доказать, ни опровергнуть что она зависает, должна на самом деле зависать, да? Конечно же нет, ведь зависание мы как бы не должны уметь доказывать. Следовательно, не существует, такой функции, для которой мы можем доказать, что мы не можем ни доказать ни опровергнуть что она зависает.
                                                Ответить
                                                • Да, так и есть. Поэтому есть только функции про которые мы пока не можем сказать, зависают они или нет. И по теореме останова такие функции всегда будут, независимо от нашего уровня развития мы не сможем для каждой функции зависает она или нет, сможем только для определенного класса функций.
                                                  Ответить
                                                  • Утверждается, что среди множества возможных программ X есть те которые зависают и есть те которые не зависают. Мы можем доказать для некоторого подмножества X их зависаемость или независаемость. А те, для которых мы не можем доказать зависаемость или не зависаемость, мы для них не можем даже доказать, что мы для них не можем доказать зависаемость или независаемость... По-моему ситуация какая-то парадоксальная. Может быть та самая функция, относительно которой мы нихрена не можем доказать, может ее попросту НЕ СУЩЕСТВУЕТ?

                                                    Может тут проблема в другом. Может быть та самая функция, для которой нельзя доказать ее зависание, занимает собой всю бесконечную ленту на Машине Тьюринга? Предположим что у нас машина Тьюринга и там есть инструкция NOP которая ничего не делает, и инструкция return 0; Лента бесконечно заполнена только одними NOP-ами, но мы этого не знаем, мы вынуждены искать в этих NOP-ах инструкцию return которая там естественно никогда не встречается, но поскольку мы этого не знаем, мы вынуждены искать return 0 до бесконечности. Поскольку return 0 там нигде нет, программа зависает, но за конечное число инструкций мы не можем доказать отсутствие return 0 на этой ленте

                                                    https://ru.wikipedia.org/wiki/Машина_Зенона нужна
                                                    Ответить
                                                  • А что если у нас есть гипотетическая функция, в которой хранится таблица поиска на завершаемость каждой возможной функции, каждый битик в ней принимает 0 если функция зависает и 1 если функция не зависает? Эта функция 100% решает проблему останова для любой функции конечной длины, но если попробовать скормить эту функцю самой себе в каком-либо виде, она зависнет т.к. сама она является бесконечной длины и не сможет за конечное время высчитать смещение чтобы извлечь нужный битик
                                                    Ответить
                                                    • Бесконечных функций не бывает (в том разделе где МТ рассматривают), это не конструктивно. Вот бесконечная лента (а значит и оперативная память) - да, но машина тьюринга это таблица состояний которая конечна, а лента - просто входные данные.

                                                      > Может быть та самая функция, относительно которой мы нихрена не можем доказать, может ее попросту НЕ СУЩЕСТВУЕТ?
                                                      Есть бесконечное множество функций. Теорема утверждает, что мы не можем решить останов для всех. Можем решить для конечного числа функций, можем для каждой второй функции, но все равно останутся те для которых мы проблему не решили.
                                                      Ответить
                                                      • >Бесконечных функций не бывает (в том разделе где МТ рассматривают), это не конструктивно.

                                                        А есть ли доказательства что среди некоего конечного множества функций(например функций, длины которых не превышают 1000 байт), существует хотя бы одна, для которой проблема останова неразрешима? (вместо 1000 можно подставить какое угодно число, но не бесконечность)


                                                        >Вот бесконечная лента (а значит и оперативная память) - да, но машина тьюринга это таблица состояний которая конечна, а лента - просто входные данные.

                                                        Бесконечная лента это такая же невозможная в реальном мире штука, как и бесконечная функция. Т.е. это тоже неконструктивно.


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

                                                        Почему нельзя назвать конкретное конечное множество функций, среди которых гарантированно есть хотя бы 1 функция, для которой доказать что она зависает - невозможно? Существует ли вообще такое множество, если мы не можем его предоставить? Это типа как Бог - он существует, потому что никто не доказал что его нет, но продемонстировать его никто не может?
                                                        Ответить
                                                        • Есть же занятый бобер, который уже лет сорок не могут определить закончится или нет, а он все не заканчивается.
                                                          Ответить
                                                      • А вот если, например, создать некоторую функцию P, которая будет принимать другую функцию конечной длины f в удобоваримом формате (чтобы была возможность анализа, не только исполнения, что очевидно); далее функция P разбивает f на массив S из n линейных блоков, сохраняя условие перехода в каждый блок, т.е. "откуда; при каком условии" (для простоты эксперимента - у нас бесконечная память). После сего действия P компонует S, по сути, представляя его в виде направленного графа D. Рёбра этого графа - переходы, вершины - блоки. Каждому ребру ставим в соответствие условие перехода Sj, где j - номер линейного блока, к которому ведёт данное ребро. Далее нам придётся перебором графа D обнаружить цепочки условий, при которых линейные блоки будут зацикливаться (Sj1->Sj2->Sj3->...->Sj1, при этом используя метаданные, записанные в начале процедуры). Для этого нам необходимо хранение состояний условия перехода j, что можно сделать посредством использования, например, обыкновенного hashmap. После определения условия j, можно легко вычислить, является ли данное условие "зацикливающим", или же нет - достаточно произвести выборку ещё не выбранных условий из S, после чего очень легко обнаружить соответствия/несоответствия искомому шаблону. Как только эти соответствия/несоответствия найдены - записываем наши условия (и их номера) в hashmap. Как нетрудно видеть, искомые сочетания "условие-блок-цикл", ответственные за, собственно, зацикливание, будут находиться на первых позициях составленного выше графа, а их номера - в hashmap. Из чего следует, что зацикливаемость функции f определяется только чётностью/нечётностью количества сочетаний j, что проверяется элементарно. В результате, мы свели задачу определения наличия непрерываемых циклов (или, что тоже самое, задачу остановки) к поиску количества сочетаний условий j, что выполняется за O(N^2), и, таким образом, для небесконечной f, за небесконечное время.

                                                        Я нуб, можете указать на ошибки?#вореции
                                                        Ответить
                                                        • j123123:
                                                          бесконечная лента - конструктивно. Особенность конструктивной математики в том что она не рассматривает бесконечность актуальную, а только потенциальную. Или как-то так. В общем, она рассматривает конкретно описанные процессы, завершающиеся (или не завершающиеся) за конечное время. Поэтому машина тьюринга которая будет бесконечно печатать единички - вполне конструктивный процесс, да, он не завершается, но все его шаги вполне конкретно описаны. А вот машину с бесконечным число состояний (ака функцию бесконечной длины) описать невозможно, поэтому она не конструктивная. Там еще забавные теоремы есть, например про то что невозможно отличить два вещественных числа (которые тоже могут быть вполне конструктивными объектами).
                                                          Насчет конкретной функции - ну ты же сам все сказал. Если мы приведем такую функцию, очевидно будет что она не завершается. Поэтому такую функцию привести невозможно. Важно что всегда будут функции типа поиска совершенных чисел или теоремы ферма, останов которых на данном этапе развития мы решить не можем. А сможем ли когда-нибудь - неизвестно.

                                                          gost: функция может не зацикливаться но при этом никогда не останавливаться. Ну или что считать зацикливанием. Например она ищет решение теоремы ферма, если нашла - выходит. Да, в ней будет крутится один и тот же кусок, но содержимое памяти то меняется, рано или поздно она может из него выйти (а по факту не выйдет). Ну или если не нравится теорема ферма и нужно формальное доказательство то можно рассказать опять с начала про функцию которой подают на вход ее саму, и т.д. Просто теорема ферма\другие задачи теории чисел удобный пример чтоб показать что это за функции такие.
                                                          Ответить
                                                          • > машину с бесконечным число состояний (ака функцию бесконечной длины) описать невозможно
                                                            Пронумеруем бесконечное счётное множество состояний машины натуральным числом N. Пусть при считывании нолика машина переходит в предыдущее состояние (если она не находится в состоянии 0), а при считывании единички - в следующее.

                                                            Описал же :)
                                                            Ответить
                                                          • Ну хорошо, предположим, подаём на вход P f. Эту f можно декомпозировать на N линейно-переходных блоков, с N - 1 условиями перехода. Пусть теперь дан массив S линейно-переходных блоков и массив L условий перехода, причём len(L) = len(S) - 1 и ∀i ∈ {0, 1, ..., len(L) - 1} Li есть условие перехода из блока S i в блок S i + 1. Таким образом, составив ориентированный граф D по правилам, указанным в предыдущем комментарии, мы получаем направленный граф линейно-условных переходов в f. Дальше, по теореме Веблена, мы можем определить последовательность условно-логических переходов K такую, что условие остановки или же не-остановки функции f будет являться, по сути, определением количества необходимых шагов m для каждого j такого, что Sj - элементарный невыразимый блок, а Lj - не-простой. Далее, нетрудно, согласно теореме Менгера, найти сумму V способов кобенаций этих шагов m. Остался вполне очевидный шаг - денормировать эту сумму по N и определить, чётная эта денормировка или нет. В случае, если она нечётная - функция f никогда не завершится. #вореции
                                                            Ответить
                                                          • >А вот машину с бесконечным число состояний (ака функцию бесконечной длины) описать невозможно.
                                                            Машина с бесконечным числом состояний и функция бесконечной длины это совсем не одно и то же. Состояние ж в памяти хранится. Ну да ладно. Вот например вполне можно на брейнфаке с бесконечной лентой написать эмулятор брейнфака с бесконечной лентой который бы параллельно (на брейнфаке можно реализовать многозадачность) запускал и исполнял бы все возможные программы на брейнфаке, и при времени t стремящемуся к бесконечности, число состояний тоже будет стремиться к бесконечности.

                                                            И функцию бесконечной длины описать тоже возможно, например можно сделать функцию, которая бы в stdout выводила бы функцию бесконечной длины.

                                                            >Насчет конкретной функции - ну ты же сам все сказал. Если мы приведем такую функцию, очевидно будет что она не завершается. Поэтому такую функцию привести невозможно.

                                                            Тут даже все немного сложнее. Можно доказать, что для любого конечного множества программ, выполняемых на машине Тьюринга с бесконечной памятью, существует программа X, не входящая в это множество, которая может точно сказать относительно любой из этих программ, какая из них завершиться, а какая нет.
                                                            Ответить
                                                            • Доказательство: поскольку множество наших программ счетно и конечно, сделаем таблицу поиска размером в битах равной количеству программ, в которой чтобы битиками 1 отмечать если программа не зависает и 0 если зависает. Откуда мы возьмем эти самые битики - нас совершенно не волнует. Может быть мы из /dev/random благодаря божественному вмешательству получили их, или например физики открыли явление которое можно измерять с высокой точностью до скольки угодно большого количества знаков после запятой, и они доказали, что если это будет представлено в двоичной системе счисления, то битики будут отвечать на вопрос завершимости или незавершимости такой-то программы на брейнфаке, это НЕВАЖНО. Важно что среди конечного множества таблиц поиска, длиной в битах равной количеству программ, существует такая таблица поиска, в которой битики будут расставлены правильным образом. И если такая таблица поиска есть, то есть и программа, которая пользуясь ей, может дать 100% достоверный ответ на вопрос о том, что вот такая-то программа из этого счетного и конечного множества программ завершается, а вот эта - не завершается.

                                                              Ч.Т.Д.
                                                              Ответить
                                                              • gost: шагов m может быть бесконечное число, так что мы не сможем денормализировать сумму по N.
                                                                bormand: уговорил. я не помню почему именно конечное. придется сослаться на определение машины тьюринга - там по определению конечное число состояний. Для описанной тобой машины с бесконечным числом можно построить эквивалентную с конечным числом состояний.
                                                                j123123: Угу. А для произвольной машины тьюринга мы это доказательство провести не сможем.
                                                                Ответить
                                                                • Неразрешимость проблемы останова логически эквивалентно парадоксу рассела
                                                                  https://ru.wikipedia.org/wiki/Парадокс_Рассела
                                                                  > Единственному деревенскому брадобрею приказали: «Брить всякого, кто сам не бреется, и не брить того, кто сам бреется». Должен ли брадобрей брить самого себя?
                                                                  Переведя эту формулировку в терминах функций:
                                                                  > Функции приказали «Зависать при получении в stdin функции, которая сама не зависает, и не зависать, если функция зависает». Должна ли функция зависать на самой себе, пытающейся решить, зависать ли ей если ей передать саму себя, пытающуюся решить (ну и так далее рекурсивно)?

                                                                  Получается, что Тьюринг своим доказательством нихуя нового не открыл, это было и до него(парадокс рассела открыт раньше неразрешимости проблемы останова), просто он выразил это в других терминах

                                                                  Парадокс лжеца тоже логически эквивалентен этому

                                                                  см. также http://avva.livejournal.com/2122436.html
                                                                  Ответить
                                                                • > Угу. А для произвольной машины тьюринга мы это доказательство провести не сможем.
                                                                  Вообще-то я только что доказал, что для любой реально существующей программы конечной длины существует программа, которая бы давала правильный ответ на вопрос "зависнет ли эта программа"

                                                                  Что же касается доказательства неразрешимости. Давай рассмотрим гипотетический брейнфак-контроллер в котором под ленту с инструкциями брейнфака отведено 100 байт и под ленту с памятью отведено тоже 100 байт. Берем мегамногоядерный кластер и перебираем все возможные кобенации всех брейнфак программ, влезающих в контроллер, получаем в итоге таблицу поиска: массив из 2^(100*8) бит, в которой 0 отмечена зависающая и 1 отмечена независающая программа на брейнфаке. Все что описано до этого момента вполне возможно сделать. Для простоты будем считать что сам брейнфак-контроллер не имеет никаких портов ввода-вывода, может только сделать return 0; в самом конце работы(если не зависнет);

                                                                  теперь напишем (переведем в брейнфак) следующий код
                                                                  if(X) for{;;};
                                                                  return 0;

                                                                  где X это битик, который соответствует ответу в той таблице поиска на вопрос, зависает ли та же самая программа if(X) for{;;} return 0;

                                                                  Вот в этом-то и наёбка! Есть две программы
                                                                  if(1) for{;;};
                                                                  return 0;

                                                                  if(0) for{;;};
                                                                  return 0;

                                                                  Первая зависает, вторая нет, и доказывается это элементарно. А подставить туда именно такой битик, чтобы он правильно предсказывал зависаемость этой же самой программы - это невозможно чисто математически.
                                                                  Ответить
                                                                  • Нет, Тьюринг использовал парадокс брадобрея чтобы доказать теорему об останове. А ранее этот парадокс использовали чтоб порушить наивную теорию множеств и запилить вместо нее современную где он не работает. В общем, это такой математический прием, ценность которого в том что он доказывает противоречивость чего-то, а не в том факте что его изобрели (изобрели то древние греки).

                                                                    > Вообще-то я только что доказал, что для любой реально существующей программы конечной длины существует программа, которая бы давала правильный ответ на вопрос "зависнет ли эта программа"
                                                                    ну да. для любой МТ мы можем взять две машины, одну возвращающую 0 и вторую возвращающую 1 и сказать, что одна из них точно дает правильный ответ насчет того останавливается наша МТ или нет. Но вот определить какая именно мы не можем.

                                                                    > Что же касается доказательства неразрешимости. Давай рассмотрим гипотетический брейнфак-контроллер в котором под ленту с инструкциями брейнфака отведено 100 байт и под ленту с памятью отведено тоже 100 байт.
                                                                    Если у него память ограничена, то легко можно составить таблицу, но программа проверяющая таблицу не влезет в эту память и поэтому для нее в таблице битика не будет. Поэтому он принципиально отличается от случая рассмотренного в теореме останова, соответственно непонятно что ты хочешь для него доказать.
                                                                    Ответить
                                                                    • >для любой МТ мы можем взять две машины, одну возвращающую 0 и вторую возвращающую 1 и сказать, что одна из них точно дает правильный ответ насчет того останавливается наша МТ или нет. Но вот определить какая именно мы не можем.
                                                                      Но мы не можем и доказать, что мы не можем определить, какая именно.

                                                                      >Если у него память ограничена, то легко можно составить таблицу, но программа проверяющая таблицу не влезет в эту память и поэтому для нее в таблице битика не будет. Поэтому он принципиально отличается от случая рассмотренного в теореме останова, соответственно непонятно что ты хочешь для него доказать.
                                                                      Нам не важно что оно в эту память не влезло. Нас интересует всего один битик из той таблицы, который точно в память влезет, не имеет значения, какими средствами мы его вычислили.

                                                                      Важно то, что НЕТ такого битика X который правильно отвечал бы на вопрос о зависаемости "if(X) for{;;} else return 0;", который если подставить его в "if(X) for{;;} else return 0;" являлся бы битиком 1 если эта же программа не зависала, и являлся бы битиком 0 если бы эта программа зависала, это самопротиворечиво.

                                                                      Это говорит о том, что нет такой конечной компьютерной программы, которая будучи подставлена вместо X и заинлайнена (специализирована как у турчина) правильно бы отвечала на это.

                                                                      Это говорит также о том, что нам нужно нечто большее по возможностям по отношению к самой программе (или некоему множеству программ) если мы хотим доказывать что-то в отношении них. Оно не должно быть "засовываемым" в эту самую функцию "if(X) for{;;} else return 0;". Например, для машины тьюринга с памятью бесконечной длины это может быть что-то сверхтьюринговое, скажем машина зенона. Для машины тьюринга с конечной длиной памяти это будет машина тьюринга с большим количеством памяти, или с бесконечной памятью. Это кстати уже теорема Гёделя о неполноте...
                                                                      Ответить
                                                                      • > Но мы не можем и доказать, что мы не можем определить, какая именно.

                                                                        То что в общем случае не можем - доказали. Про конкретный случай - да, ничего не можем доказать.
                                                                        Это говорит также о том, что нам нужно нечто большее по возможностям по отношению к самой программе (или некоему множеству программ) если мы хотим доказывать что-то в отношении них.

                                                                        Не что-то, а именно проблему останова. Разны другие вещи можно и без этого доказывать - например что существует машина тьюринга которая зависает или что любая машина или зависает или не зависает.
                                                                        Ну и т.к. мы считает что множество машин тьюринга эквивалентно любой другой созданной человеком формы представления алгоритмов, то мы доказывем эти утверждения для всех алгоритмов вообще. Да, можно придумать "машину зенона" которая бы доказывала останов, но построить ее не удастся. И при этом можно придумать алгоритм (тот же поиск четных совершенных чисел), который машина тьюринга со всей ее бесконечной памятью не поможет нам разрешить.
                                                                        Ответить
                                                                        • >То что в общем случае не можем - доказали. Про конкретный случай - да, ничего не можем доказать.
                                                                          Этого общего случая не существует, т.к. речь идет о несуществующей машине тьюринга с бесконечной лентой

                                                                          >Да, можно придумать "машину зенона" которая бы доказывала останов, но построить ее не удастся.
                                                                          Машину тьюринга с бесконечной лентой построить тоже не удастся. Так что это все сугубо теоретические рассуждения. Нет ничего удивительного в том, что чтобы доказать завершаемость программы на несуществующей машине тьюринга с бесконечной лентой, надо сделать несуществующую машину зенона

                                                                          Для любой конечной программы на МТ существует правильный ответ на вопрос "зависает ли она", а как его получить - это неважно. В рамках тьюринг-машины за конечное время эта задача нерешаема
                                                                          Ответить
                                                                        • Еще такой прикол. Давайте возьмем две машины тьюринга с бесконечной памятью, и пусть они в камень-ножницы-бумагу играют. Условия просты - каждая программа знает свой собственный исходный код и исходный код другой программы, с которой она играет. Программа не должна зависать. Программа должна за конечное число шагов дать ответ "камень" "ножницы" или "бумага", думать она может сколь угодно долго (зависать только не должна). Программа может эмулировать работу другой программы сколь угодно долгое время, и та другая программа может делать то же самое в отношении нее. Программа не может получать случайные числа, она работает строго детерминировано. Существует ли программа, которая бы выигрывала в камень-ножницы-бумагу у любой другой программы?
                                                                          Ответить
                                                                          • Этого общего случая не существует, т.к. речь идет о несуществующей машине тьюринга с бесконечной лентой
                                                                            Этому случаю соответсвуют вполне существующие задачи типа теоремы ферма или поиска совершенных чисел.
                                                                            В этом и интерес машин тьюринга - любой алгоритм можно представить машиной тьюринга и любой машине соответствует алгоритм. Поэтому доказывая что-то мы доказываем свойства любого алгоритма. А если рассматривать машины с конечной памятью то там уже не так интересно, т.к. они описывают только узкий класс собственно вычислительных машин.

                                                                            Программав КНБ очевидно не может выиграть (для доказательства поставим ее против самой себя). Вот может ли она сыграть хотя бы вничью - более интересный вопрос.
                                                                            Ответить
                                                                • kipar:
                                                                  > шагов m может быть бесконечное число, так что мы не сможем денормализировать сумму по N.
                                                                  ОК. Тогда мы можем использовать теорему Исаева о полупроизводных факториалах графических чисел, представляя N в виде суммы отдельных элементов лямбда-графа H (производного от D), что в конечном итоге приведёт нас к двум вореантам - либо S представим в виде фактор-поля, либо нет. В первом случае, для решения проблемы останова нам придётся перебрать рёбра всё того же лямбда-графа H (коих конечное количество, в отличие от D) и просуммировать их полупроизводные. Если эта сумма нечётная - f не остановится, если чётная - остановится. Во втором же случае, нам придётся ворировть S по осям графа D и лямбда-графа H. Полученная вореация S' будем отображать множество независимых графологических отображений S на D-H. Просуммировав в полученной вореации диагональ комплекса поля, мы опять-таки придём к простому решению: сумма нечётная - функция не остановится, сумма чётная - функция остановится. #вореции
                                                                  Ответить
                                                                  • > отображать множество независимых графологических отображений S на D-H
                                                                    на бесконечное множество. И как там суммировать диагональ?
                                                                    Ответить
                                                                    • > И как там суммировать диагональ?
                                                                      Методом В. Кобена для независимых полупроизводных лямбда-графов.

                                                                      > на бесконечное множество
                                                                      Оно не бесконечно, а ограничено сверху количеством уникальных неориентированных пространственных графов для локализованных поверхностей биективного разделения необратимых изменений кривизны рёбер. #вореции
                                                                      Ответить
                                                                      • Ну как так. Выше же было указано, что H конечно, а D (в общем случае)бесконечно. Значит и D-H бесконечно.
                                                                        Так что метод Кобена неконструктивен. Фактически это будет та же машина Зенона, выполняющая бесконечное число операций за конечное время.
                                                                        Ответить
                                                                        • > Значит и D-H бесконечно.
                                                                          Как так? Отображение графа на лямбда-граф в любом случае даёт нам конечное скалярное эрц-поле конечных же полупроизводных лямбда-графов. Метод Кобена к ним очень даже применим. #вореции
                                                                          Ответить
                                                                          • Скомпилирован на улице Столлмана, в GCC 4.6.3. Известный химик, по призванию своему — программист. В народе — учитель. В интернете — тролль. В опенсорсе, так сказать, необходим. Это, так сказать, система… эээ… в составе 120 строк кода. Читаете исходники LeechCraft и получаете bu-tt-hu-rt. И реверсер работает по другой линии — по линии программиста. Потому что не воздух будет, а архитектор будет! Ну вот можно читать исходник LeechCraft. Можно стать плюсоебом. Можно стать хаскелистом. И будешь уверен, что эту теорию типов примут по учебнику. Значит, на пользу computer sciense пойдет одна теория типов. Величина, оторванная в область программирования, дает свои колебания на все программирование. А Деннис Риччи дает колебания только на семью на свою. Ассемблер в библиотеке работает. В Java ходят и зжирают в Java много памяти. В библиотеке на ассемблера мало памяти зжирают. Ассемблер… эээ… будет вырабатываться гораздо легче, чем плюсы крепкие. А крепкие плюсы будут весомее, чем GCC на улице Столлмана. А на улице Столлмана будет расщепленные плюсы. Тогда плюсы будут проходить через улицу Столлмана, через GCC 4.6.3, и замещаться там по формуле программистского единства. Вот в Visual Studio Express 2012 оно может расщепиться, программирование! На химиков, на программистов, на админов, на культуру программирования… Так что, в эту сторону двинется вся IT индустрия. Библиотека двинется в сторону 120 строк кода, которые будут… эээ… предмет укладывать на предмет. 120 строк кода — предмет программирование. Электрическая лампочка горит от 120 строк кода на плюсах, потому что структура, так сказать, похожа у нее на плюсы. Деннис Риччи работает на операционной системе «UNIX». Деннис Риччи работает у себя дома. Вот конкретное программирование! «Открытое программирование» — то же самое. Ну, берем код на плюсах, вставляем в LeechCraft, накручиваем там…эээ… все время сладкий хлеб(покушать принес)… Так что же, будет Риччи, что ли, вырастать? Деннис Риччи, что ли, будет вырастать из этого?
                                                                            Ответить
                                                                            • Прекратил постить вореции. Сначала ведь их читаешь на полном серьезе и пытаешься понять.
                                                                              Ответить
                                                                              • > Сначала ведь их читаешь на полном серьезе и пытаешься понять.
                                                                                А kipar таки понял!
                                                                                Ответить
                                                                            • > Скомпилирован на улице Столлмана, в GCC 4.6.3.
                                                                              ИИ-шизофреник?
                                                                              Ответить
                                                                            • > Скомпилирован на улице Столлмана, в GCC 4.6.3.
                                                                              https://bnw.im/p/J7FGGG
                                                                              Обратите внимание на автора, кстати.
                                                                              Ответить
                                                                              • https://bnw.im/u/j123123

                                                                                Господа гусары, не обращайте внимания на теги к публикациям.
                                                                                Ответить
                                                                              • У него и про сладкий хлеб есть:
                                                                                https://bnw.im/p/FQJJHQ
                                                                                Ответить
                                                                        • > бесконечное число операций за конечное время

                                                                          А каким методом математики вычисляют несобственные интегралы и бесконечные ряды? Ведь в наивном представлении для их вычисления нужно бесконечное количество операций.
                                                                          Ответить
                                                                          • Они строят процесс (по сути машину тьюринга), который вычисляет интеграл\сумму ряда с любой заданной точностью. Собственно этот процесс и называется "вещественным числом" в конструктивной математике.
                                                                            Ответить
                                                                  • > теорему Исаева о полупроизводных факториалах графических чисел
                                                                    > лямбда-графа
                                                                    Гениально!!! Отличнейший ворециарный экземпляр, прекрасно читается, освежает.
                                                                    Ответить
                                                                    • У программы нет понятия асимптот, сходимости и предела
                                                                      Ответить
                                                                  • https://inf.1september.ru/2000/5/art/turing.htm тут кстати есть про канторовский диагональный процесс применительно к проблеме останова и всей этой мути с брадобреями
                                                                    Ответить
                                                                    • Не к несчастью тьюрингори канторопии лямбдаомыевавшиеся Исаевобно тьюрингвшие видеохающиеся. Нутого асимптоттой лямбдааха. Асимптотртом ее. Канторонноеется бесконечньшие следовательно ворецьи бесконечнортыстим. Ч бежьей Исаеврда.
                                                                      Ответить
                                                  • >И по теореме останова такие функции всегда будут, независимо от нашего уровня развития мы не сможем для каждой функции зависает она или нет, сможем только для определенного класса функций.

                                                    На самом деле "теорема останова" не дает никаких гарантий, что существует хотя бы одна функция, для которой бы невозможно было доказать, зависает она или нет. (точнее не просто функция, а просто некая программа, которая не принимает никаких аргументов извне)
                                                    Ответить
                                                    • > существует хотя бы одна функция, для которой бы невозможно было доказать, зависает она или нет.

                                                      Ну да. Но функций то бесконечное множество, все не передокажешь.
                                                      Ответить
    • судя по автору, это какие-то очередные гомоиконы?
      Ответить
      • кобенации
        Ответить
      • Вот гомоикона, специально для тебя
        (((L I S P )( L I S P ) ( L I S P ) ( L I S P )))
        * (     \             \            )    \       *
        B(       )             \          )      )      B
        e(       `.             )         )       :     e
        a`        )             )        \)       )     a
        t \       ) )       )  \\\   --__ \\       :    t
        i  \      \)   _--~~          ~--__) \     )    i  
        n   \      \_-~                    ~-_\    )    n
        g    \_     \        _.--------.______\)   )    g
              \     \______(( _ ___ _ (_(__H  \   )      
        t      \   .  S ___)  ______ (_(____t  )  )     t
        h       (\ )   I ____)) APPLY\ (_____D  )_)     h
        e      ( (\)   C_____)  EVAL )  (___P   )  \    e
              (   (   _P_____)\______)  )) _) )     \    
        a     (    \  )__   \\_________)) (__)       )  a
        v    ( \    \____)   `----   --'             )  v
        e    (  \_          ___\       )_          _) ) e
        r   (              )    (     )  \            ) r
        a   (             )    (   λ   )  \           ) a
        g   (          ) )    (         )  \           )g
        e   (         ) )      (__)(___)    )          )e
        s  (           )        (    )       )         )s
        *  (          )         (    )       )         )*
        (((L I S P )( L I S P ) ( L I S P ) ( L I S P )))
        Ответить
        • вижу лисп - плюсую!
          Ответить
        • Это валидный код на Лиспе?
          Ответить
        • «Надо чтоб гомоиконность!» — раздался пронзительный голос со стороны параши.

          Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье. Пусть кукарекает, что с него взять?

          Лиспер — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора лет каждая ночь была очень трудной, и теперь его анус был разработан настолько, что он без труда мог спрятать в нём metacircular evaluator https://i.imgur.com/iyviGMz.png
          Ответить
          • > https://i.imgur.com/iyviGMz.png
            Блять, посоветуйте нормальный хостинг для картиночек, чтобы прямые ссылки были действительно прямыми, как циклы Царя. imgur вместо прямых ссылок теперь перекидывает на говноедство какое-то.
            Ответить
            • У меня всё работает. Что я делаю не так?
              Ответить
              • Там какая-то хитрая система, твои фотографии нормально открываются, а чужие - редиректит. Попробуй http://i.imgur.com/iBlCopW.png открыть.
                Ответить
                • Если передается реферер (а он передается в прыщелисе когда ПКМ на выделении - открыть в новой вкладке) - открывается страница, иначе - картинка.
                  Ответить
                • Сколько истребителей?
                  Ответить
              • гост имеет в виду, что вместо картинки открывается страница
                Ответить
            • внезапно https://ipfs.io/
              Ответить
              • > https://ipfs.io/
                И как оно, пользователи есть, через год не протухнет?
                Ответить
    • я сюда деградировать захожу, нахуй мне ваш матан
      Ответить
    • Студентик Сипсера курнул, чтоле?
      Ответить

    Добавить комментарий