Я часто хотел попытаться суммировать каждое измерение куба и то, что он представляет, поэтому я попробую это сделать.λ
Но сначала, вероятно, следует попытаться распутать различные проблемы. Интерактивный доказатель теорем Coq основан на основной теории типов, которую иногда с любовью называют исчислением индуктивных конструкций со вселенными . Вы заметите, что это нечто большее, чем просто «Исчисление конструкций», и, действительно, там гораздо больше вещей, чем просто CoC. В частности, я думаю, что вы не уверены, какие именно функции есть в самом CoC. В частности, различие Set / Prop и юниверсы не отображаются в CoC.
Я не буду давать полный обзор систем Pure Type здесь, но важное правило (для функциональных PTS, таких как CoC) заключается в следующем
Γ⊢A:sΓ,x:A⊢B:kΓ⊢Πx:A.B : k (s,k)∈R
где являются элементы фиксированного множества S из рода , и пара ( ы , K ) находится в фиксированном множестве R пара S , называется правилом .s,kS(s,k)RS
Решающее понимание, что тщательный выбор из и R сделать огромные различия в том , что тип продукта Π х : . Б на самом деле представляет!SRΠx:A.B
В частности, в исчислении конструкций, множество сортов есть
{ * , ◻ }
часто называют Prop и типа (хотя эта терминология немного запутанным для пользователя Coq по причинам , я расскажу чуть позже), а полная набор правил:
R = { ( ∗ , ∗ ) , ( ◻ , ◻S
{∗,□}
R={(∗,∗),(□,□),(□,∗),(∗,□)}
Итак, у нас есть 4 правила, которые соответствуют 4 различным целям:
: типы функций(∗,∗)
(□,□)
(□,∗)
(∗,□)
Я объясню каждый из них более подробно.
Прежде всего заметим , что я буду писать вместо П х : А .A→BΠx:A.BxB
∗natboolx=yxy∗дает нам обычные функции высшего порядка, которые вам нравятся на любом функциональном языке программирования, то есть возможность передавать функции в другие функции.
listlist:∗→∗listnat,listbool∗→∗(□,□)
Πt:∗. t→t
λ(t:∗)(x:t).xΠt:∗._(□,∗)t→t(∗,∗)
A∧B:=Πt:∗. (A→B→t)→t
A∨B:=Πt:∗. (A→t)→(B→t)→t
⊥:=Πt:∗. t
⊤:=Πt:∗. t→t
∃x:A. P(x):=Πt:∗. (Πy:A. P(y)→t)→t
(∗,□)
∗∗(□,∗)
(□,□)
Πc:∗→∗. c nat→c nat
0=1
= : nat→nat→∗
= : Πt:∗. t→t→∗
nat→nat→∗(∗,□)
□→□□ □□ii=1,2,3,…□i:□i+1
(□i,□i)
Γ⊢A:□iΓ⊢A:□j i≤j
С этими дополнительными сортировками и правилами вы получаете что-то не PTS, а что-то близкое. Это (почти) Расширенное исчисление конструкций , которое ближе к основанию Coq. Большая недостающая часть здесь - индуктивные типы, которые я не буду обсуждать здесь.
Изменить: есть довольно хороший справочник, который описывает различные функции языков программирования в рамках PTS, описывая PTS, который является хорошим кандидатом для промежуточного представления функционального языка программирования:
Хенк: типизированный промежуточный язык , С.П. Джонс и Э. Мейер.
soft-question
. Я не вижу здесь действительно технического вопроса. Возможно, вы можете быть более конкретным относительно того, что вы спрашиваете?