Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/37: Рейтинг темы: голосов - 37, средняя оценка - 4.97
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418

Проблема останова. В чём противоречие?

18.11.2021, 08:29. Показов 8885. Ответов 176
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Расскажите пожалуйста, в чём суть проблемы останова и как Тьюринг определяет и доказывает отсутствие оракула?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.11.2021, 08:29
Ответы с готовыми решениями:

Проблема применимости и проблема останова
Привет! Как бы я не бился - никак не могу понять проблему останова и применимости алгоритмов в целом. Хочу попросить прям полное объяснение...

Проблема с отладкой и точками останова
Здравствуйте С крайне прозаичной и глупой проблемой столкнулся. Переделывал старый проект, в процессе замены кода натолкнулся на то, что...

Выдает ошибку, а я не могу понять в чем проблема. В чем проблема, скажите пожалуйста!
dx=0.0005; epsillon=0.00002; i=0; for x= 0:0.0005:3 i=i+1; if x<1 y (i)=-1; elseif x<2 S=0; ...

176
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
20.05.2022, 14:59  [ТС]
Студворк — интернет-сервис помощи студентам
Shamil1,
И это глобальное состояние я передаю в Оракулу (см. строки 16 и 17 в моих последних примерах). В строгом соответствии со спецификацией.
В первый раз - да, но не во второй раз при вызове оракула. Там, в аргументе переменная text не определена. Это подмена понятий
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,890
20.05.2022, 15:01
Цитата Сообщение от Aycon Посмотреть сообщение
Только вы вызываете не оракула, а какую-то функцию, которая принимает 2 строки
Я вызываю Оракула. Но, так как кода Оракула у меня нет, то я использую заглушку.

А как, по Вашему мнению, должна выглядеть спецификация (заглушка) Оракула на C#?

Добавлено через 1 минуту
Цитата Сообщение от Aycon Посмотреть сообщение
Там, в аргументе переменная text не определена. Это подмена понятий
Ничего не понимаю. Где именно переменная "текст" не определена?
0
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
20.05.2022, 15:05  [ТС]
Shamil1, какой у неё результат в таком случае?

Добавлено через 1 минуту
Shamil1, это не важно, вы вызываете не оракул
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,890
20.05.2022, 15:12
Цитата Сообщение от Aycon Посмотреть сообщение
какой у неё результат в таком случае?
Моя функция не изменяет начальное состояние. Поэтому значение параметра text будет оставаться тем, что задано в функции main.

Цитата Сообщение от Aycon Посмотреть сообщение
это не важно, вы вызываете не оракул
А почему мне нельзя вызывать функцию оракул? Это же прекрасная чистая функция, которая обязательно вернёт мне true или false.
0
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
20.05.2022, 15:21  [ТС]
Shamil1, я предположу как будет работать оракул. Он построит дерево исполнения и пометит ветви, которые ведут на своих родителей вне зависимости от исходных данных. А затем подставит в исходную функцию исходные данные и будет следить за её выполнением пошагово. Если на каком-то шаге алгоритм вызывает ветку, ведущую к рекурсии, оракул вернёт false.

Если при построении дерева алгоритм вызывает Оракула, но эта ветка не ведёт к её родителю (конечность её выполнениния не зависит от результата оракула), то он продолжает строить дерево в этой ветке как обычно, а если зависит, то помечает эту ветку как конечную. Если алгоритм при каких-либо исходных данных достигает этой ветки - он возвращает true.

Добавлено через 2 минуты
Shamil1,
Моя функция не изменяет начальное состояние. Поэтому значение параметра text будет оставаться тем, что задано в функции main.
Оракул внутри вашей функции не знает что творит ваша функция до его вызова и это ваше "поэтому" ей не очевидно. Это неизвестная переменная, которую нужно проинициализировать до вызова оракула

Добавлено через 1 минуту
Shamil1, например, указать это явно во втором аргументе. Но почему-то вы яростно отказываетесь инициализировать переменную text во втором аргументе. Почему же?
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
20.05.2022, 15:55
Цитата Сообщение от Aycon Посмотреть сообщение
предположу как будет работать оракул
https://ru.wikipedia.org/wiki/Гипотеза_Коллатца

Справится?
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,890
20.05.2022, 16:06
Цитата Сообщение от Aycon Посмотреть сообщение
Оракул внутри вашей функции не знает что творит ваша функция до его вызова и это ваше "поэтому" ей не очевидно.
А ему и не нужно знать. Это чистая функция. Она получила что-то на вход и обязана выдать правильный ответ. И этот ответ не должен зависить от предыдущих вызовов Оракула.


Цитата Сообщение от Aycon Посмотреть сообщение
Это неизвестная переменная, которую нужно проинициализировать до вызова оракула
При каждом вызове Оракула туда передаётся строка с неким конкретным значением. Всё, что нужно проинициализировать в соответствии со спецификацией языка C#, я проинициализировал. Компилятор это подтвердил. Я передаю в функцию Оракул данные нужных типов. Это компилятор тоже подтвердил. Остальное - забота тех, кто пишет Оракула.
Prog - это моя функция. И только я решаю, что она делает. Оракул обязан выдать ответ для любой синтаксически корректной функции. Моя функция написана корректно. Компилятор это подтверждает. Остальное - забота тех, кто пишет Оракула.

Цитата Сообщение от Aycon Посмотреть сообщение
например, указать это явно во втором аргументе. Но почему-то вы яростно отказываетесь инициализировать переменную text во втором аргументе. Почему же?
Потому что внутри функции Prog я решаю, что передать вторым аргументом в функцию Оракул. Второй аргумент - это произвольная строка (потому что моя функция принимает произвольную строку). Вы же выдивигаете какие-то странные требования к её значению.
0
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
20.05.2022, 17:02  [ТС]
Shamil1, строка не подходит.

Добавлено через 40 секунд
Shamil1, предоставьте реализацию prog на брейнфаке

Добавлено через 2 минуты
vantfiles, да, как и с факторизацией очень большого полупростого числа. Только анализ может быть сопостовим по времени с вызовом самой функции.

Добавлено через 3 минуты
vantfiles, если в какой-то момент обнаружится новый цикл, кроме 4-2-1, оракул это обнаружит и вернёт false, как и для любого другого числа. Если только, вы не задали условием выхода вход в цикл 4-2-1, тогда оракул вернёт истину для любого числа, кроме гиппотетического числа, которое нашло новый цикл.
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,890
20.05.2022, 21:05
Цитата Сообщение от Aycon Посмотреть сообщение
строка не подходит
Для чего не подходит строка и почему? Только обойдитесь без ограничений на код моей функции (кроме того, что этот код должен компилироваться).

Добавлено через 2 минуты
Напоминаю, что вторым аргументом Оракул должен уметь принимать любое значение, которое можно передать моей функции.
0
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
22.05.2022, 04:48  [ТС]
Shamil1, строка не подходит в качестве описания функции, потому что строку нельзя выполнить или построить по ней граф исполнения. По строке нельзя сказать, скомпилируется ли её содержимое и выполнится ли оно в том пространстве имён, в еотором запущено содержимое строки. Всё это касается и аргумента в общем случае.

Добавлено через 3 минуты
Shamil1, когда вы передаёте вторым аргументом строку оракулу, вы подразумеваете, что любая функция может принимать только строку в качестве аргумента? Или вы подразумеваете, что в этой строке может находиться любой сериализованный объект? В таком случае ваша строка нуждается в интерпретации, верно?
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,890
22.05.2022, 14:00
Цитата Сообщение от Aycon Посмотреть сообщение
когда вы передаёте вторым аргументом строку оракулу, вы подразумеваете, что любая функция может принимать только строку в качестве аргумента?
Нет. Не "только строку", а "в том числе и строку". Раз существует функция, которая принимает строку, то Оракул обязан принимать в том числе и строку.
Если говорить про C#, то тип string приводится к типу object. Это можно сделать для любых значенй типа string.

Цитата Сообщение от Aycon Посмотреть сообщение
Или вы подразумеваете, что в этой строке может находиться любой сериализованный объект?
Нет.

Цитата Сообщение от Aycon Посмотреть сообщение
строка не подходит в качестве описания функции, потому что строку нельзя выполнить
Подходит. Во всех современных языках программирования функции описываются строкой (текстом).
Можно выполнить. Многочисленные компиляторы и интерпретаторы это делают.

Цитата Сообщение от Aycon Посмотреть сообщение
По строке нельзя сказать, скомпилируется ли её содержимое и выполнится ли оно в том пространстве имён, в еотором запущено содержимое строки.
Код моей функции не содержит никаких пространств имён. Моя функция не зависит от окружения. Она зависит только от значения входного параметра.

p.s.
Возможно, так Вам будет легче понять:
C#
1
2
3
4
5
6
7
8
9
int Prog(string text)
{
    bool CopyPasteOfOracle(string code, object start_state)
    {
        return false;
    }
    int Cycle () => Cycle();
    return CopyPasteOfOracle(text, text) ? Cycle() : 0;
}
Эта версия функции, не вызывает Ваш Оракул и не использует переменных. CopyPasteOfOracle (я её написал) всегда возвращает то же, что и Ваш Oracle().
0
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
22.05.2022, 23:00  [ТС]
Shamil1, этот код вы передаёте в text?

C#
1
2
3
4
5
6
bool Prog(text)
{
      bool b=Proveritb_Ostanovky(text, text);//true значит программа остановится, false значит программа зависнет
      if(b==true)Zavisnytb();
      if(b==false)return true;
}
Добавлено через 1 минуту
Shamil1, он компилируется? Зависает? Нет? Оракул вернёт - false

Добавлено через 4 минуты
Shamil1, если в text вы передаёте какой-то другой код - покажите его ещё раз, пожалуйста.
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,890
23.05.2022, 11:57
Цитата Сообщение от Aycon Посмотреть сообщение
этот код вы передаёте в text?
Вот этот:
C#
1
2
3
4
5
6
7
8
9
int Prog(string text)
{
    bool CopyPasteOfOracle(string code, object start_state)
    {
        return false;
    }
    int Cycle () => Cycle();
    return CopyPasteOfOracle(text, text) ? Cycle() : 0;
}
Цитата Сообщение от Aycon Посмотреть сообщение
он компилируется? Зависает? Нет? Оракул вернёт - false
Он компилируется.
Если Ваш Оракул вернёт false, то этот код не зависает. Значит, Ваш Оракул ошибается.

Добавлено через 2 минуты
Строка 5 в коде - это заглушка. Чтобы от неё избавиться, нужен код Вашего Оракула.
0
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
23.05.2022, 17:42  [ТС]
Shamil1,
C#
1
2
3
4
5
6
7
8
9
10
int Prog(string text) 
{     
    bool CopyPasteOfOracle(string code, object start_state)
    {         
        return false;  
    }     
    
    int Cycle () => Cycle();
    return CopyPasteOfOracle(text, text) ? Cycle() : 0; 
}
Я запустил этот код и он выдал ошибку компиляции, ведь Cycle() не определён. Даже когда я заменил вызов оракула на false, а cycle() на while(true); - код скомпилировался и выполнился без зависаний. Ведь это только объявление функции, а не её вызов. Оракул правильно вернул false. Попробуйте сами.

Добавлено через 1 минуту
Shamil1, конкретно этот код, если заменить Cycle() компилируется и не зависает.

Добавлено через 6 минут
Shamil1,
C#
1
2
3
4
5
6
7
8
9
10
11
int Prog(string text)
{         
   bool CopyPasteOfOracle(string code, object start_state)
   {              
      return false;      
   }
 
   if(CopyPasteOfOracle(text, text))
      while(true);
   return 0;
}
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,890
23.05.2022, 17:49
Цитата Сообщение от Aycon Посмотреть сообщение
Я запустил этот код и он выдал ошибку компиляции
Я не знаю, какой компилятор выдал Вам ошибку и какую ошибку он Вам выдал. У меня этот код компилируется.

Вот тут тоже компилируется:
https://www.programiz.com/csha... -compiler/

Цитата Сообщение от Aycon Посмотреть сообщение
ведь Cycle() не определён
Cycle() определена в строке 8.
0
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
23.05.2022, 17:53  [ТС]
Shamil1, Да, прошу прощения. Скомпилировалась. Но не зависла. Оракул верно ответил false. Как это доказывает его невозможность?
Миниатюры
Проблема останова. В чём противоречие?  
0
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
23.05.2022, 18:02  [ТС]
Shamil1, кароче, брехня эта проблема останова и теорема Гёделя о неполноте тоже брехня. Как и вся теория вычислимости.
0
Модератор
Эксперт функциональных языков программирования
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,890
23.05.2022, 19:09
Цитата Сообщение от Aycon Посмотреть сообщение
Оракул верно ответил false.
false означает, что программа не остановится (то есть, зависнет). Оракул ответил неверно.
0
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
23.05.2022, 21:08  [ТС]
Shamil1, ок, я заменил на true и программа не зависла
0
13 / 11 / 2
Регистрация: 07.05.2015
Сообщений: 418
23.05.2022, 21:10  [ТС]
Shamil1,
Миниатюры
Проблема останова. В чём противоречие?  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.05.2022, 21:10
Помогаю со студенческими работами здесь

VsCode и Rust проблема с точками останова
Всем привет. Начал изучать Rust, столкнулся с такой проблемой: в VsCode не срабатывают точки останова. Использую вот такую конфигурацию...

Проблема останова лжеца Гёделя и брадобрея Кантора
Наваял тут трактат о логике и основаниях математики. Расскажите, пожалуйста, в чём я не прав.

Подскажите, в чем ошибка (exe вызвал срабатывание точки останова)
Код #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <Windows.h> #include <locale> using namespace std; ...

В чем заключаются ошибки в работе программы.Ошибка "вызвал срабатывание точки останова."
Matrix.h #ifndef MATRIX_H #define MATRIX_H #include <ostream> class Matrix { private: int **ptr; // указатель на матрицу ...

Проблема с кодом. Выдает ошибку, я не могу понять в чем проблема
Работаю первый раз с Maple. Установлен версии 2015 года. Выдает ошибку я не могу понять в чем проблема Вот код: restart: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
140
Ответ Создать тему
Новые блоги и статьи
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru