С чего начать программирование зависимого типа?

Существует учебник Idris, учебник Agda и многие другие документы в стиле учебника и вводные материалы с бесконечными ссылками на вещи, которые еще предстоит изучить. Я как бы ползаю посреди всего этого и большую часть времени застреваю в математических обозначениях и новой терминологии, появляющейся внезапно без объяснения причин. Может у меня математика хромает :-)

Есть ли какой-нибудь дисциплинированный подход к программированию зависимых типов? Например, когда вы хотите изучить Haskell, вы начинаете с «Научите себя Haskell», когда вы хотите изучить Scala, вы начинаете с книги Одерски, для Ruby вы читаете этот странный учебник с мутировавшими ошибками в нем. Но я не могу начать Агду или Идрис с их книгами. Они намного выше моей головы. Я попробовал Coq и застрял в его универсальном стиле проверки работоспособности. Агда требует огромной математической подготовки, а Идрис, ну, давайте пока оставим это!

Я очень хорошо разбираюсь в системах статического типа, неплохо разбираюсь в Scala и при необходимости могу использовать Haskell. Я понимаю функциональную парадигму и использую ее изо дня в день, я понимаю алгебраические типы данных и GADT (на самом деле довольно гладко), и недавно мне удалось понять лямбда-куб. Но мне не хватает математики и логики.


person Ashkan Kh. Nazary    schedule 21.11.2012    source источник
comment
Если вам нравятся лекционные видео, я нашел Программирование с зависимыми типами: введение в Agda Конора Макбрайда. очень полезно.   -  person hammar    schedule 21.11.2012
comment
Связанный вопрос: stackoverflow.com/q/9455786/1337941.   -  person JJJ    schedule 23.11.2012
comment
Кстати, почему scala является одним из тегов?   -  person Phil    schedule 23.09.2013
comment
@ Фил нехватка знаний: D   -  person Ashkan Kh. Nazary    schedule 23.09.2013


Ответы (2)


Я настоятельно рекомендую Software Foundations. Эта книга очень хорошо знакомит вас с Coq шаг за шагом. Да, нужно много доказывать теоремы, но это часть прелести зависимых типов. Это прекрасное чувство, когда грань между «программированием» и «доказыванием» начинает стираться.

Но мне не хватает математики и логики.

Я думаю, что Software Foundations довольно хорошо помогает вам быстро освоить логику, которую вам нужно знать. Однако понимание концепции импликации уже помогает.

person Dan Burton    schedule 21.11.2012

(Примечание: это самореклама)

Я пишу руководство по Агде, и моя основная цель — дать людям возможность поиграть с Агдой без теоретических задний план.

Этот учебник может решить большинство ваших проблем:

  • пытается объяснить программирование Agda без внешних ссылок
  • требуется только школьная математика
  • также пытается обучать практикам программирования

Он находится в разработке, но первая половина уже готова.

person Péter Diviánszky    schedule 12.01.2013
comment
Было бы неплохо иметь RSS-канал, чтобы можно было получать уведомления об обновлениях. Может быть, использовать блог? - person Kim Stebel; 15.01.2013
comment
@KimStebel, я хотел бы иметь полный контроль над презентацией, поэтому я предпочитаю не писать ее в виде блога. Я планирую выложить исходники в darcs, что может помочь следить за изменениями. - person Péter Diviánszky; 15.01.2013
comment
Пока вы используете свой собственный шаблон, у вас есть полный контроль над презентацией, которую вы хотите. Пожалуйста, опубликуйте URL репозитория здесь. - person Kim Stebel; 15.01.2013
comment
@KimStebel, URL-адрес hub.darcs.net/divip/AgdaTutorial - person Péter Diviánszky; 23.01.2013
comment
@KimStebel, извините, что нет фидов. Если вы не можете посмотреть репозиторий, значит, я что-то сделал не так. Не можешь? - person Péter Diviánszky; 23.01.2013
comment
Я не вижу возможности смотреть это. Я вошел в систему. Как мне это сделать? - person Kim Stebel; 23.01.2013
comment
Слева есть файлы и изменения, так что вы можете просматривать либо по файлам, либо по патчам. Что ты видишь? - person Péter Diviánszky; 23.01.2013
comment
Я имел в виду смотреть, как это используется на github. Это означает, что вы получаете уведомления об изменениях. Я могу просматривать файлы и коммиты просто отлично. - person Kim Stebel; 23.01.2013
comment
@PéterDiviánszky Я работал над этим, и это лучший ресурс, который я нашел до сих пор! - person user833970; 08.08.2013
comment
проголосовал! это объясняет каждую часть каждой строки. например data Bool : Set where true : Bool false : Bool Интерпретация: Bool — это множество; true — это Bool; false — это Bool; нет ничего другого, что было бы Буль; правда и ложь разные. - person sam boosalis; 27.04.2014