LINUX.ORG.RU

лямбда-исчисление и проблема останова

 


0

2

Подумалось, что эти, казалось бы никак не связанные вещи, имеют нечто общее. В проблеме останова, есть некоторое ограничение концептуального плана. Мы можем немного перефразировать ее и выдать нечто вроде: «Если бы был всеведующий проблема бы не существовала».

В LC существует некая подковерная возня. Все мы знаем, что в реализации лексического скопа есть волшебный лукап, который знает, что где искать и куда подставлять. В реализации оптимизатора тоже есть всеведующий, который сначала делает подстановки. Во всех случаях происходят подковерные волшебные штучки, которые «просто работают». Юзеру его не показывают. Это и есть всеведающий.

Если бы мы спросили, а как происходит подстановка, нам бы могли ответить: это вопрос реализации, не забивай голову. В разрешении проблемы останова, мы тоже могли бы реализовать анализатор, который тупо, по синтаксису, может определить, завершиться ли алгоритм. Разумеется, это невозможно определить для рантайма, когда неизвестно что поступит, в общем случае, но в ограниченных семантиках можно это сделать. А можно на этапе компиляции тупо запускать прогу, и ждать. Если она не завершиться в течении, скажем, получаса, падать с ошибкой. У нас появляется всеведающий. Только к реальной проблеме останова это не имеет отношения. Точно также, LC не имеет отношения к реальным вычислениям, это сахар, по большому счету, а не концепция. Человеку в здравом рассудке, понять ее невозможно. Мы могли бы абстрагироваться не только от подстановок, но и от самих вычислений. Нажми на кнопку — получи результат. Это тоже «исчисление» в этом смысле. Такими исчислениями активно пользуются секретарши и бухгалтера, давя клопов на своей клаве. 1С-UI-calculus. Звучит неплохо.



Последнее исправление: anonimous (всего исправлений: 1)
Ответ на: комментарий от anonymous

В комбинаторном исчислении нету ф-й, и переменных нету.

Есть. Там каждый комбинатор — это функция. Комбинатор по-сути — лишь символ, указывающий на функцию. это функции с 1 аргументом.

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

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

Нет, не предполагает. Наоборот, оно построено так, чтобы памяти не было.

Если взять например динамический биндинг

Вот динамический биндинг как раз предполагает наличие памяти. Но проблема даже не в этом - суть в том, что динамический биндинг очень сложен, как концептуально, так и на уровне реализации. По-этому в «минимальной» системе (а нужна ведь именно она) он неприменим. Возник вопрос - как сделать систему биндинга исходя из прицнипов простоты и минимальности? Какой будет такая система? Получился лексический биндинг, системы проще которого построить нельзя.

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

Есть.

Нет, нету.

ам каждый комбинатор — это функция.

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

омбинатор по-сути — лишь символ

Именно так. Это просто символ. И все.

указывающий на функцию.

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

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

Как ты вообще функционируешь с таким поносом вместо мозга, опарыш?!?

anonymous
()

Частично решено:

<<Total functional programming

Как было сказано, Idris — чистый функциональный язык. Но также поддерживается опциональное требование свойства totality функций, под которым подразумевается два свойства:

Определённость всюду: функция должна быть определена для любых входных данных. В чистых языках отсутствие этого свойства — едва ли не единственная возможность для программы «упасть» (другие — IO, в частности убийство процесса системой вследствие каких-то его действий, и возможные баги компилятора). Строгая нормализация: при рекурсивных вызовах функции, хотя бы один из её аргументов должен строго уменьшаться (структурно), либо функция должна быть продуктивна на каждой итерации — т.е. возвращать какую-то часть результата, и обещание просчитать следующую итерацию. В первом случае это гарантирует завершаемость функции, обходя проблему остановки, а во втором — возможность считать конечный префикс любой длины за конечное время.>>

Из: http://habrahabr.ru/post/228957/

Пока ты хаешь функциональное программирование оно решают все больше проблем.

Вот еще кстати: https://ru.wikipedia.org/wiki/Соответствие_Карри_—_Ховарда

Соответствие Карри — Ховарда (изоморфизм Карри — Ховарда, англ. formulae-as-types interpretation) — наблюдаемая структурная эквивалентность между математическими доказательствами и программами. Эта эквивалентность может быть формализована в виде изоморфизма между логическими системами и типизированными исчислениями.

Использование изоморфизма Карри — Ховарда позволило создать целый класс функциональных языков программирования, среда выполнения которых одновременно является системой автоматического доказательства, таких как Coq, Agda и Epigram (англ.).

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

Точно также, LC не имеет отношения к реальным вычислениям, это сахар, по большому счету, а не концепция. Человеку в здравом рассудке, понять ее невозможно.

Про это еще говорят - «гуманитарный склад ума».

В общем ты действительно либо троллишь, либо тронулся.

UPD. Посмотрел историю создания твоих тем. У тебя же опыт программирования меньше года, а ты лепишь сюда свои «откровения». Никакой скромности.

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

постигнет та же участь

Я в этом почти не сомневаюсь.

Про это еще говорят - «гуманитарный склад ума».

Я не считаю, что это плохо. Хотя что под этим понимается в общем случае — мутная тема.

Я смотрю, ты все таки, в отличии от вышеотписавшихся, что-то пытаешься понять в этом мире. Посмотри http://www.slideshare.net/carlehewitt/incompleteness-theorems-logical-necessi... вот эти непопсовые слайды, возможно это изменит твое отношение к фп и математике. Хотя непосредственно текущей темы это не касается. И спасибо за ответ, но я остался при своем мнении.

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

опыт программирования

Кстати, опыт не всегда позитивен. Есть такие вещи, как свежий взгляд vs инерция мышления. Звучит как оправдание своей некомпетентности, я знаю, но все же...

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

Кстати, опыт не всегда позитивен. Есть такие вещи, как свежий взгляд vs инерция мышления.

_опыт_ никак не связан со свежестью взгляда. У тебя может быть 20 лет опыта и абсолютно свежий взгляд. Более того - это вполне обычное явление, а никакая не редкость.

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

Ты до конца досмотрел?

Да.

я не смогу объяснить

А что тут объяснять? Просто: «вот утверждение Х, Y и Z - они не соответствуют общепринятому представлению и потому непопсовы». Можно увидеть эти утверждения X,Y,Z? Если ты их привести не можешь, то на каком основании утверждаешь, что такие утверждения там есть?

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

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

Строгая нормализация: при рекурсивных вызовах функции, хотя бы один из её аргументов должен строго уменьшаться

Чем то напоминает

while true&&couner: dostaff; counter--
:)

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

Я не хочу обсуждать эту тему. Там важно понять суть, а не копаться в деталях.

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

Посмотри внимательней на высказывания Витгенштейна.

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

Строгая нормализация: при рекурсивных вызовах функции, хотя бы один из её аргументов должен строго уменьшаться

В твоих слайдах ничего подобного нет. Ты ссылку не перепутал? Ну и, да, это хуйня какая-то, а не определение тсрогой нормализации.

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

непопсовые утверждения

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

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

В твоих слайдах ничего подобного нет

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

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

Если ты не видишь там непопсовых утверждений, ты просто них*я не понял.

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

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

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

Пробелма в том, что ты не понял о чем вообще эти слайды.

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

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

То есть, по-твоему, эти слайды доказывают, что они сами являются хуйней? Ведь они основаны на классическом матлоге. Хуевость которого и доказывают (исключительно в твоем воспаленном мозгу, конечно)

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

Я понимаю, что ты пытаешься показаться компетентным по всем вопросам, но это не ко мне.

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

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

Да, да, ты умничка, все понимашь, угомонись.

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

Да, я как то писал в одной из твоих тем что мы чем то похожи. И ты даже ссылался на меня в одной из своих тем. Но, слайды я твои тоже не очень понял.

Пожалуй просто напишу свой способ изучения программирования. Я просто беру язык непохожий на все остальные и изучая его свожу концепции к концепциям уже известных мне языков программирования. А на данный момент это будут: lisp, forth, smalltalk, prolog, erlang, haskell, go. Ну, а база у меня была сильно императивная.

Вспомнилась цитата, примерно: «Если ты не понимаешь эрланг, то ты будешь писать на нем как на си. Если ты понимаешь эрланг то ты сможешь писать на си как на нем.»

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

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

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

А если задуматься: ты стоишь у огромной кучи инструментов, вытягиваешь по одному и говоришь какое это говно. Далее тянешь следующий и снова ищешь недостатки. А смысл? Идеального инструмента без задачи которую он должен решить быть не может. Если ты всю жизнь забивал гвозди, то пила покажется тебе странной и ненужной вещью. А если рубил дрова то тоже самое будет с молотками и прочим инструментом. А это идет от опыта.

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

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

Там есть переменные.

Нет, переменных там нет.

Каждый символ там раскрывается в реальную функцию с переменными.

Функций там, кстати, тоже нет.

За подробностями добро пожаловать в «Комбинаторную логику в программировании» или любой другой букварь по теме.

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

anonimous ☆ гомофоб;Свобода имеет вкус крови на губах, и этот вкус сладок;норкоман;phill?(бугурт от граммарнаци;норкоман);как его остановить?

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.