Церковные цифры и несоответствие вселенной

#types #coq #type-inference #lambda-calculus #church-encoding

#типы #coq #тип-вывод #лямбда-исчисление #церковь-кодировка

Вопрос:

В следующем коде оператор add'_commut принимается Coq, но add_commut отклоняется из-за несоответствия юниверса.

 Set Universe Polymorphism.

Definition nat : Type := forall (X : Type), X -> (X -> X) -> X.

Definition succ (n : nat) : nat := fun X z s => s (n X z s).

Definition add' (m n : nat) : nat := fun X z s => m X (n X z s) s.

Definition nat_rec (z : nat) (s : nat -> nat) (n : nat) : nat := n nat z s.
Definition add (m n : nat) : nat := nat_rec n succ m.

Definition equal (A : Type) (a : A) : A -> Type := fun a' => forall (P : A -> Type), P a -> P a'.

Lemma add'_commut (m n : nat) : equal nat (add' m n) (add' n m).
Admitted.

Lemma add_commut (m n : nat) : equal nat (add m n) (add n m).
(*
In environment
m : nat
n : nat
The term "add n (fun X : Type => m X)" has type
 "nat@{Top.1078 Top.1079}"
while it is expected to have type
 "nat@{Top.1080 Top.1078}" (universe inconsistency).
*)
  

Как заставить это пройти?

Ответ №1:

Церковные цифры работают, только если вы включаете функцию непредикативности Set , вводя -arg -impredicative-set в свой _CoqProject файл или используя -impredicative-set опцию командной строки. Затем определите nat как:

 Definition nat : Set := forall (X : Set), X -> (X -> X) -> X.
  

Impredicative Set позволяет nat иметь точно такой же тип, Set по которому он определяет количество. Без непредсказуемости nat должен иметь более высокий уровень вселенной, чем тот, который он определяет количественно, хотя уровни скрыты от вас, пока вы не получите ошибку, подобную в вопросе.

Обратите внимание, что непредикативность Set несовместима с классической логикой.

Комментарии:

1. Разве полиморфизм вселенной не должен быть в состоянии справиться с этим?

2. Нет, без непредсказуемости уровни вселенной повышаются при базовых операциях, таких как сложение, предотвращая простые вещи, такие как итеративное сложение. Полиморфизм юниверса не может определить ограничения уровня, которые невозможны в отношении предикативного Coq.