LINUX.ORG.RU

Есть ли формально корректный, Тьюринг-полный, но не реализуемый ЯП?

 


1

2

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

★★★★★
Ответ на: комментарий от MimisGotAPlan

А нельзя ли без образных аналогий. Откуда берётся формальная корректность когда есть логические ошибки? Про здравый смысл я вообще молчу.

ados ★★★★★
()
Ответ на: комментарий от buddhist

от любого бесконечно большого числа

назови-ка мне парочку бесконечно больших чисел, а то я себе совершенно не представляю, что ты несешь

MyTrooName ★★★★★
()
Ответ на: комментарий от awesomebuntu

Компилятор, пищущий компилятор?

Вроде есть такие ;)

vombat
()
Ответ на: комментарий от MyTrooName

назови-ка мне парочку бесконечно больших чисел, а то я себе совершенно не представляю, что ты несешь

Ээээ, ноль? или я чёта не панимать?

vombat
()

омега-исчисление, лол

Пределы доказуемости:

Число Ω строго определено и имеет вполне конкретное значение, но вычислить его с помощью конечной компьютерной программы невозможно.

вот такой например язык программирования: алгебра, основанная на числе омега, невычислимом самом по себе.

очевидно, если невычислимо омега, то невычислимо и 0.5 омега, 1/3 омега, 3/4 омега и т.п.

занумеруем операции: следование; ветвление; цикл пока; вызов функции; присваивание переменной; вычисление выражения как 1/6 омега, 2/6,3/6,4/6,5/6,6/6 омега.

и на этом вот (тьюринг-полном) языке напишем программу.

в итоге: программа на этом языке(возможно) вычислима, но омега невычислима.

значит, целиком невычислима.

к которому невозможно написать компилятор, но при этом его спецификации были бы корректными.

1. констант Хайтина(Чейтина) несколько.

спецификация: «вычислим константу Хайтина», запрограммируем на них простой тьюринг-полный язык структурного программирования.

корректная, имхо. компилятор тривиален. но константа невычислима.

2. компилятор это суперкомпиляция интерпретатора, специализированного.

с интерпретатором похожая фигня — если его написать невозможно, то и суперкомпиляцию, то есть компилятор — тоже.

anonymous
()
Ответ на: комментарий от nihirash

Кстати, из чисто теоретики - это компилятор работающий с данными записанными по основанию экспаненты.

берёшь систему исчисления с основанием e. и на ней излагаешь. не вижу проблем.

к тому же, A*e^(i*phi*x)=A*sin(phi*x)+i*A*cos(phi*x). то есть, и с синусами/косинусами/преобразованием Фурье тоже можно на ней работать.

почему невозможно конпелятор написать — непонятно же.

anonymous
()
Ответ на: комментарий от Dark_SavanT

В спеке должна быть необходимость уйти в бесконечный цикл при компиляции. Что-то типа разворачивания акронима GNU

вычислять например константы Хайтина на шаблонах С++, лол :-))

Никакая вероятность остановки не является вычислимой. Доказательство данного факта основывается на алгоритме, который для данных первых n чисел решает проблему остановки программ длиной до n бит. Так как проблема остановки неразрешима, то Ω не может быть вычислено.

anonymous
()
Ответ на: комментарий от Dark_SavanT

Если обобщить - у тебя в спеке должна быть логическая ошибка приводящая к невозможности остановки.

парадокс Рассела, например

Это древняя загадка, к которой никто не относился более, чем как к шутке, пока не было обнаружено, что этот вопрос имеет отношение к таким важным и практическим задачам, как существование наибольшего кардинального или ординального числа.

то есть, в ординальные числа нужно конпелировать :-)))

anonymous
()
Ответ на: комментарий от anonymous

а вот ещё интересно:

можно ли придумать такой язык, к которому компилятор написать можно, а интерпретатор — невозможно???

anonymous
()
Ответ на: комментарий от i-rinat

Почему-то мне кажется, что под то определение подходит программа, выплёвывающая интерпретатор языка + текст программы.

которая квайны пишет? quine

anonymous
()

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

взять техномагические заклинания: кибершаман-техномаг является таким компьютером, а атсральные заклинания во славу ктулху — вероятностными программами, исполняемым на этом компе.

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

это корректная спецификация. но реализовать её невозможно: заклинания одного на «другом железе» не работают, ибо пгнуи фхтанг мхгнлав р'льех.

anonymous
()
Ответ на: комментарий от anonymous

то есть, конпелятор описывается вероятностным алгоритмом. с вероятностью, стремящейся к нулю 0:-))

anonymous
()
Ответ на: комментарий от anonymous

квайны

Нет, другое. К примеру, берёшь исходники интерпретатора Python. Собираешь всё в статический бинарник вместе с кодом, который ищет в своём же исполняемом файле ZIP архив и исполняет скрипты из него. Потом пишешь вторую программу, который программу (третью уже) на Python и её зависимости пакует в один ZIP-файл, который приклеивает к первому бинарнику. Вот и получился компилятор.

i-rinat ★★★★★
()

А вообще, забавно, столько споров и рассуждений о формальности, но при этом в треде нет ни одного определения компилятора.

buddhist ★★★★★
()
Ответ на: комментарий от anonymous

парадокс Рассела, вариант с каталогами

тут:

Библиографические каталоги — это книги, которые описывают другие книги. Некоторые каталоги могут описывать другие каталоги. Некоторые каталоги могут описывать даже сами себя. Можно ли составить каталог всех каталогов, которые не описывают сами себя?

разрешается просто: такой каталог составить нельзя.

конпеляторы — это программы, которыя описывают другие программы. некоторые конпеляторы могут описывать другие конпеляторы. некоторые конпеляторы даже могут описывать сами себя.

можно ли составить конпелятор всех конпеляторов, которые не описывают сами себя?

разрешается просто: такой конпелятор составить нельзя.

anonymous
()

Что такое «корректные спецификации»?

Язык, включающий решение проблемы останова, подойдёт.

f1u77y ★★★★
()
Ответ на: комментарий от buddhist

Их сколько угодно в неархимедовом упорядоченном поле. Например, в поле гипердействительных чисел.

а, ну круто

Ну допустим минимальная длина его кода составит 10E+100 машинных команд x86

теперь расскажи, как ты собрался пересчитать машинные команды гипердействительными числами

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

теперь расскажи, как ты собрался пересчитать машинные команды гипердействительными числами

ну в Xanadu предлагалось URL задавать трансфинитными числами, типа purple numbers

то есть, можно было адресовать отдельный уникальный блок: предложение, слово, тег.

может, и гипердействительными тоже можно занумеровать, а не только порядковым.

например определить «стандартная часть числа» = PID процесса, «нестандартная» — адрес в пространстве этого процесса.

прикольно, что это упорядоченное поле. может эта упорядоченность ещё где-то пригодится.

anonymous
()
Ответ на: комментарий от anonymous

Tumblers

положим, в духе Plan 9 «файловых серверов» компилятор выглядит как файловый транслятор, который одни «виртуальные» абстрактные объекты пространства имён клиента переводит (мультиплексирует) в «реальные» (физические, лол) объекты сервера.

то есть, гиперреальные в 1.0.PID.0.text-segment.0. .....

например через kmem или отладчиком.

тут непонятно как эту упорядоченность трактовать, в каком смысле. потому что каждое отдельное пространство имён задаёт собственную иерархию, онтологию.

и если на ней что-то может вычисляться — получаем «исчисление понятий» (в духе 10 основных категорий метафизики Аристотеля).

anonymous
()
Ответ на: комментарий от MyTrooName

вот в смысле tumblers можно понимать «библиотечные каталоги» из парадокса Рассела выше

anonymous
()
Ответ на: комментарий от i-rinat

Тогда если язык Тьюринг-полный, значит можно сопоставить его машине Тьюринга, для которой написать интерпретатор. И вуаля, компилятор готов.

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

По-моему, правильный ответ — сверхтьюринговые япы ( SZT). Например, машина Тьюринга плюс команда, которая решает проблему останова ( f1u77y).

beroal
()
Ответ на: комментарий от beroal

https://esolangs.org/wiki/TwoDucks вот

TwoDucks is an esoteric programming language by User:Zzo38 which allows you to go back in time and change things. It is uncomputable on a Turing machine; it even allows you to solve the halting problem.

И вообще, https://esolangs.org/wiki/Category:Uncomputable

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.