(P.S. Кажется, я научился быстро писать. Весь нижеследующий пост написался за 15 минут за едой.)
Гомотопическая теория типов HoTT это такой фреймворк для деланья математики и одновременно язык программирования. Среди довольно обширного семейства таких систем* HoTT примечательна тем, что gets equality right. (
Read more... )
типы a = b теперь интерпретируются не как тип доказательств равенства a и b, а как тип сохраняющих структуру обратимых переходов от a к b
1. Что такое а и b? Может быть такое, что, например, а это число 3, а b - это число 6? Или, скажем, это больше похоже на "пусть a это множетство целых чисел, а b - множество чётных чисел"? Или даже на "пусть a это кольцо целых чисел, а b - кольцо чётных чисел"?
2. Что такое "обратимый переход"? Биекция/изоморфизм?
3. Что такое "3=6"? "Множество/класс" преобразований, переводящих 3 в 6? "Множество/класс" таких обратимых преобразований?
4. Что такое "Z = (Z/2Z)"? Умножение на двойку? Умножение на двойку в композиции со всеми перестановками?
Reply
Рассматривая их тип как пространство, а их самих как точки, значение "a=b" это путь в таком пространстве, а тип "a=b" это просто тип. В случае 3 и 6 такой тип будет ненаселен - не будет значений такого типа, нет пути из 3 в 6. Ибо натуральный числа - это дискретное пространство, там все пути идут из точки в саму себя, разные точки не соединяются.
В случае когда a и b это типы (вроде того же Z), уже интереснее. Там могут быть нетривиальные пути, и пространство этих путей эквивалентно пространству изоморфизмов между ними, что унивалентность и постулирует.
Reply
Почему? Что такое вообще "путь". akuklev перевёл path как "обратимый переход, сохраняющий структуру". Не знаю, насколько это верно, но хотя бы приблизительно понятно. Вы же используете понятие "пути" в каком-то нестандартном смысле и не вводите это понятие.
Reply
Reply
Reply
Reply
Reply
Но при этом типы это же тоже люди! Так что для типов A: Typen и B: Typen тоже существует тип A =Typen B: Typen - 1. И он содержит изоморфизмы между типами A и B. То есть, конструктивные взаимно-однозначные отображения между этими типами.
(Тут я в явном виде пишу, что типа "Type" на самом деле нет, а есть кумуллятивная иерархия вселенных Type n для всевозможных ординалов. А написание T: Type это просто abuse of notation, который убирает компилятор во время компиляции сам, подставляя нужный ординал в качестве индекса, либо ругаясь, если где-то случается неразрешимый замкнутый круг ( ... )
Reply
Да, фигню написал. Хотел написать "ℤ =Ring 2ℤ" (где pℤ - тот самый идеал, про который Вы написали, только он для любого p идеал, не только простого; а вот правильно ли использован индекс - не уверен).
Reply
Reply
Reply
Reply
Reply
Но отсюда не очевидно, что y+(0+x)=y+x. Строим новый путь, который оказывается равен y+x==y+x.
Способов доказать этот факт может быть несколько: y+(0+x) == (y+0)+x & y+0==y => y + (0+x) == y+x - раз; более очевидное (0+x) == x & y+a==y+a => y + (0+x) == y+x - два; это разные пути. Их, стало быть, можно различать, говорить о равенстве путей, и т.д. вглубь.
Думаю, я полагаю правильно, что в то время, как в Агде эти преобразования нужно делать руками, в HoTT эти преобразования "автоматом" - как если бы здесь выбросить все эти path-*, оставить только суть, и оно будет компилироваться (а чтобы понять, что за проблема - вот возьмите, уберите их, и посмотрите, какие вещи Агде не очевидны). (За правильное использование терминологии там не ручаюсь)
Reply
Reply
Напримеро witness существования какого-то такого x: T что выполняется P(x) это элемент w типа (x: T, P(x)), т.е. пара состоящая из этого самого x = fst w (он в явном виде предьявляется) и доказательства snd w, которое мы не можем вполне отделить от самого x, потому что у него тип P(x). Собственно элементы a = b это witnesses эквивалентности a и b. В конструктивном мире HoTT задать соответствие (естественно доказывая, что это соответствие), это и есть доказать равенство.
Вам надо привыкнуть к тому, что объекты несут в себе всякие свойства. Если мы пишем, что _+_: AssociativeOperation[T], то на практике мы конечно можем писать 2 + 3, но в недрах _+_ это пара из отображения Nat -> Nat -> Nat и доказательства, что это отображение ассоциативно.
Reply
Leave a comment