Имейте в виду, что экзистенциальные и универсальные типы довольно различны. Это конструктивная логика, а не классическая логика и в конструктивной логике и ∃ не так связаны, как в классической логике.∀∃
- это тип программ, которые получают объект типа A и возвращают объект типа B ( x ) . Здесь важно то, что тип B ( x ) зависитот x и не одинаков для всех x . Это может варьироваться в зависимости от того, что х . Для одного ввода x мы можем вывести целое число. Для другого мы могли бы вывести реальное число. Для еще одного мы могли бы вывести функцию над действительными числами. Если B ( х )∀ х : . Б ( х )AБ ( х )Б ( х ) ИксИксИксИксБ ( х )не изменяется с , то вы можете использовать A → B в месте , которое является типом функций от А до B .ИксA → BAВ
являетсязависимойверсией (конструктивной) дизъюнкции. Вы можете думать о конструктивной дизъюнкции A ∨ B двух типов A и B , как несвязное объединение A и B .
∃ х : . В ( х ) является объединением непересекающихся коллекции типов B ( х ) ,
индексированного х : . Дело в том, что типа Б (∃ х : . Б ( х )A ∨ BAВAВ∃ х : . Б ( х )Б ( х )х : А van изменяется в зависимости от значения x : A
делает его зависимым типом. Сравнение со случаемкогда Б не зависит от х : А : ∃ х : А . B . Мы принимаем одну копию того же B для каждого х : А . Это изоморфно × B .Б ( х )х : АВх : А∃ х : .ВВх : АA × B
Теперь вы можете спросить, зачем нам нужны зависимые продукты и типы сумм? Потому что они дают нам больше выразительной силы. Теперь мы можем полностью игнорировать типы и иметь нетипизированную теорию типов / функциональное программирование. Но это устраняет преимущества наличия типов во-первых, например, вы не будете знать, будут ли все программы завершаться всегда (строгая нормализация). См. Лямбда-куб и
Зависимый тип . Я думаю, что хороший способ хорошо понять зависимые типы - это посмотреть на правила для введения и устранения зависимых типов в теории типов Мартина-Лофа .
Суть зависимых типов заключается в следующем: мы хотим оставаться в хорошей типизированной теории по разным причинам (например, избегать ошибок, автоматического доказательства завершения и т. Д.). Мы не хотим переходить к чему-то вроде нетипизированного лямбда-исчисления, где мы можем сделать выражения, подобные тем, которые вы заявили, и гораздо более мощные вещи. Можно сказать, что зависимые типы были изобретены, чтобы позволить выражать больше вещей, оставаясь при этом в хорошей теории типов.