Сегодня целый что называется рисерчил. Но перед репортом за сегодя — предистория. На прошлом заседании подольского коммитета HoTT было принято решение занятся в топовом варианте как ближайшие глобальные задачи формализацией CW-комплексов и тегории Гомологий (и для того и для другого есть формализация в HoTT-Agda и мы на нее активно смотрим).
Естественным образом метатеория HIT является тегория цепных комплексов, так как Iso(CW-complex,HIT). Поэтому любая либа CW-комплексов неплохо, чтобы была одновременно и метаторией для HIT и удобным инструментов в руках математика, в том смысле, чтобы хорошо ложилась хотя бы на аглоязычных авторов по кусочно-линейной топологии (Рурк, Сандерсон). В идеале, конечно, построение категории CW-комплексов (их интернализированых моделей) вместе с морфизмами.
Как известно из последнего пейпера
https://arxiv.org/pdf/1802.01170.pdf, самый современный HIT вычислитель построенный в 2018 — это hcomptrans ветка кубика, где поддерживаются рекурсивные HIT, Hopf, Trunc и другое. Структура гомогенной композиции, прямо прописывается в начальную алгебру индуктивного типа HIT внутри кубического тайпчекера. Вот пример доказательства, что гомогенная структура единичного квадрата равна 2-сфере заданной с помощью одной точки.
data sph = pt | surf <i j> [ (i=0) -> pt, (i=1) -> pt, (j=0) -> pt, (j=1) -> pt ]
Square (A : U) (a0 a1 b0 b1 : A) (u : Path A a0 a1) (v : Path A b0 b1)
(r0 : Path A a0 b0) (r1 : Path A a1 b1) : U
= PathP (<i> (PathP (<j> A) (u @ i) (v @ i))) r0 r1
sqSurf (x: sph): Square sph x x x x (<i> x) (<i> x) (<i> x) (<i> x)
= <i j> hcomp sph x [(i=0) -> <i> x, (i=1) -> <i> x, (j=0) -> <i> x, (j=1) -> <i> x ]
loop2 : Path (Path sph pt pt) (<i>pt) (<i>pt) = sqSurf pt
loopSph : Path (Path sph pt pt) (<i>pt) (<i>pt) = <i j> surf {sph} @ i @ j
loopEq : Path (Path (Path sph pt pt) (<i>pt) (<i>pt)) loop2 loopSph = ? — упражнение для моих учеников
Таким образом стал вопрос, а что, если мы для построении базовой библиотки CW комплексов встроим ее модель в кубический тайпчекер (интернализируем, как мы проделали с Теорией Типов в mltt.ctt). Что мы хотим от модели CW-комплекс, или скорее, что хочу я от нее. Я хочу, чтобы можно было делать кейс-анализ по отдельным n-ячейкам CW-комплекса, а не трактовать экземпляр индуктивного типа как шейп, хочу иметь возможность выбирать точки и открытые отрезки, открытые плоскости, открытые окресности и с помощью кейс-анализа производить декомпозицию комплекса. В то же время хочу иметь возможность трактовать CW-комплекс как коиндуктивный тип, который полностью заполнен экземплярами своих конструкторов (сигма тип или рекорд).
Кстати вы не можете написать функцию S^1 -> bool, так как нарушается связность шейпов и кубик не разрешает скажем сплитнуть base в false, а loop в true, и ни один кубический тайпчекер, что создает немалые преграды для библиотеки CW-комплексов и ее интернализированной версии.