Здравейте,
Последният път когато обсъждахме хомотопичната теория на типовете,
Бойко пита какъв е смисъла на теорията в контекста на програмирането а
не в абстрактната математика. Намерих слайдове от Dan Licata:
http://www.cs.cmu.edu/~drl/pubs/lh122tttalks/lh12wg2.8.pdf
Заслужава си човек да се зачете за да усети така наречения "аха"
момент. Накратко само ще кажа че прословутата аксиома за унивалентност
на Воеводски се свежда до следното:
univalence : (A,B : Type) -> Iso A B -> A = B
където Iso А B е типа на всички изоморфизми между A и B, т.е. трипъл
съдържащ две функции f и g и доказателство за това че f е обратната на
g и обратното.
Преди два дена бях на презентация на Thorsten Altenkirch който даде
още два програмистки примера. Ще се опитам да ги възпроизведа по
памет:
- Multiset е списък в който реда на елементите е без значение. Това
може да се представи с функцията:
(n : Nat) -> (A : Type) -> Fin n = Fin n -> Multiset n A =
Multiset n A
тук Fin е тип с n на брой елементи. Множеството от изоморфизми
(еквивалентностни) за Fin е точно множеството от пермутации на n
елемента. Прилагайки пермутацията върху даден мултисет получаваме
същия мултисет.
- Cycle е цикличен списък, т.е. списък без определено начало. Това
пък изразяваме така:
(n : Nat) -> (A : Type) -> Fin n -> Cycle n A = Cycle n A
Смисъла е следния, за всеки елемент от Fin n можем да съставим един
изоморфизъм в Cycle n A който измества началото в списъка съдържащ
елементите на цикличния списък.
Двата нови типа имат интересни zippers. Нормалният линеен списък е
zipper за цикличния списък. Мултисета е zipper сам за себе си. Тъй
като за да получим zipper за даден тип трябва да диференцираме
оригиналния тип, то се оказва че Мултисета е като експонентата в
нормалното диференциално смятане т.е.:
d(Multiset) = Multiset
Поздрави,
Красимир