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
我想使用 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