Pull to refresh

Comments 22

UFO just landed and posted this here

inProp просто говорит, что любые два элемента утверждения (то есть типа, лежащего в \Prop) равны. Аксиома K эквивалентна UIP, которая говорит, что любые два элемента типа равенства равны. Другими словами, что тип равенства является утверждением.


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

UFO just landed and posted this here
Да, мне только потом пришло в голову, что inProp универсальнее. Будет ли корректной ментальной моделью сказать, что inProp эквивалентна семейству K-подобных аксиом для каждого возможного предиката?

Я бы не сказал, что он универсальнее. Тут просто причина в том, что в Arend есть специальная вселенная утверждений. Разумеется, должен быть способ доказать, что она эквивалентна обычной вселенной типов, являющихся утверждениями. Для этого есть несколько механизмов. Один из них — это inProp, который в точности говорит, что все типы в \Prop являются утверждениями.


Лично для меня профит от Prop/Agda-style irrelevance/Idris-style erasure в том, что, ну, доказательства стираются и не утекают в рантайм, и вы их случайно в рантайме не начнёте вычислять (что может быть медленно).

Я бы сказал, что в Arend нет понятия рантайма. Если говорить более формально, то в нем есть выражения, которые вообще не вычисляются. Элиминация из \Prop в не \Prop — это действительно проблема, но если запретить таким функциям вычисляться, то всё будет хорошо. Именно таким образом эта проблема решается в Arend.


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

Я не совсем понял о каких термах идет речь. В общем, эквивалентность не обязательно должна работать через редукции. Например, эта-эквивалентность часто без редукций проверяется. Аналогично, чтобы проверить эквивалентность термов, имеющих тип в \Prop, достаточно проверить в какой вселенной лежит их тип.

UFO just landed and posted this here
Ну вот вы написали, скажем, функцию сортировки и что-то про неё доказали. А что вы дальше с этой функцией делаете?

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


Мой поинт в том, что бывают случаи, когда вычисляться таки надо.

Мне кажется, что есть какое-то недопонимание. Если все функции не будут вычисляться, то проблемы с termination вообще не будет. В Arend 1.1 появилось новое ключевое слово \sfunc для определения функций, которые вычисляться не будут. Любая функция, которая элиминирует из \Prop в не \Prop, обязана быть \sfunc. С termination checker'ом это никак не связано, так как просто проблемные функции не вычисляются.


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

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

UFO just landed and posted this here
Так как язык ориентирован именно на доказательство теорем, то большой необходимости запускать функции нет

А ну т.е. это еще одна система для доказательств. С Idris тогда нечего сравнивать, он как general purpose язык вне конкуренции :D
Хотя Куклев и смышлёный, но воеводская наука вся фигня. А уже кое-кто это называл «основаниями математики 21-го века». И тут Воеводский, со свойственной ему оригинальностью, взял да помер. И что теперь делать основателям математики 21-го века?
Правильно ли я понимаю, что этот HoTT нужен для того чтобы формализовать математические теоремы, то есть перевести их на этот язык типов, чтобы программно можно было проверить что доказательство теоремы верно? А если так, то можно ли тогда программно найти доказательство какой-нибудь открытой гипотезы, например, путём перебора всех возможных доказательств?

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

UFO just landed and posted this here

Статья на хабре: новый язык программирования, jetbrains, inteliJ, обычное хипстерство, вдруг, HoTT, взрыв мозга, читать пословно.


Спасибо за описание.


Вопрос. Написано:


Сумма типов A + B. В Haskell этот тип называется Either A B. Так как этот тип населен тогда и только тогда, когда один из типов A или B населен, то эта конструкция соответствует логическому «или».


А если A и B населены, то A+B населено или нет?

Статья на хабре: новый язык программирования, jetbrains, inteliJ, обычное хипстерство, вдруг, HoTT, взрыв мозга, читать пословно.

Прошу обратить внимание, что нигде не написано, что Arend — это язык программирования.


А если A и B населены, то A+B населено или нет?

Конечно, даже двумя способами.

Если A+B населено если А населено и B населено, то формулировка неверна:


Сумма типов A + B. В Haskell этот тип называется Either A B. Так как этот тип населен тогда и только тогда, когда один из типов A или B населен, то эта конструкция соответствует логическому «или».


Правильно: хотя бы один.

Воеводский обнаружил, что на языке теории типов (Мартин-Лёфа) можно говорить о так называемых гомотопиях (а это большой и авторитетный раздел математики). До этого специалисты по теории типов воспринимали программистов как главную цель. На форуме types-list много лет стоял печальный стон «почему программисты нас не ценят?» И тут пришёл Воеводский, известный математик, лауреат премии Филдса. Возник энтузиазм «нафиг программистов, давайте охмурять гомотопных математиков!» Вся орда специалистов по Coq бросилась изучать гомотопии (во главе с Тьерри Коканом). Стали скромно называть себя «основания математики 21-го века». И тут Воеводский взял да помер. А кого из них, кроме Воеводского, знает гомотопный математик? Приходится опять охмурять программистов.

Правильно ведь понимаю, что язык назван в честь Гейтинга? Добавьте в статью!

Наивная попытка сказать, что типом вселенной \Type, по определению, является сама \Type приводит к парадоксу Жирара

Я не очень понял суть этого парадокса, но если он эквивалентен парадоксу Рассела, то причина его не в том, что теория противоречива, а в том, что бинарная логика принципиально не полна, ибо не позволяет оперировать произвольными выражениями. В частности, она не позволяет отличать "ненаселённый тип" от "противоречивого типа", для которого понятие "населённости" вообще не применимо. Отсюда и возникает парадокс, ведь "тип всех ненаселённых типов" — это как раз "противоречивый тип", а не "ненаселённый".


Подробнее я рассказывал об этом тут: https://habr.com/ru/post/522578/

Это не парадокс Рассела, а приспособленный к теории типов парадокс Бурали-Форти (не существует множества всех ординалов), он технически существенно сложней.

Не сказал бы, что существенно сложней. Он вытекает из понятия актуальной бесконечности, которое противоречиво само по себе, отсюда и множество парадоксов. Все они имеют похожую фабулу:


  1. Актуализируем бесконечность — это позволяет работать с ней, как с конечным объектом.
  2. Для любого конечного объекта можно построить строго больший объект не равный данному.
  3. Формулируем исходный объект из (1) так, чтобы он заведомо включал и любые производные от него типа (2).
  4. Получаем противоречие.

Самая простая формулировка, без запутывающей мишуры в виде множеств, типов, отображений и тд, выглядит так:


  1. Берём самое большое натуральное число и обозначим его как ∞ (актуализация бесконечности).
  2. Прибавляем единичку — получаем ещё более большое число.
  3. Но увеличение натурального числа на 1 даёт натуральное число.
  4. Следовательно наше новое более большое число должно быть меньше либо равно самого большого натурального числа из (1).

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


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

Sign up to leave a comment.