Agda 中的系统 F 教会数字

System F Church numerals in Agda

我想使用 Agda 作为我的类型检查器和评估器来测试系统 F 中的一些定义。

我第一次尝试介绍教会自然数是通过写作

Num = forall {x} -> (x -> x) -> (x -> x)

这将像常规类型别名一样使用:

zero : Num
zero f x = x

但是 Num 的定义没有类型(种类?)检查。使其工作并尽可能接近系统 F 表示法的最正确方法是什么?

以下将进行类型检查

Num : Set₁
Num = forall {x : Set} -> (x -> x) -> (x -> x)

zero : Num
zero f x = x

但如您所见 Num : Set₁,这可能会成为一个问题,您需要 --type-in-type