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

В следующем коде оператор 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).
*)

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


person Bob    schedule 10.03.2019    source источник


Ответы (1)


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

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

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

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

person András Kovács    schedule 11.03.2019
comment
Разве полиморфизм вселенной не может справиться с этим? - person Bob; 11.03.2019
comment
Нет, без непредсказуемости уровни юниверса повышаются при выполнении основных операций, таких как сложение, предотвращая такие простые вещи, как итеративное добавление. Полиморфизм вселенной не может определить ограничения уровня, которые невозможны в отношении предикативного Coq. - person András Kovács; 11.03.2019