在构造微积分中的"反射"事物?

PyR*_*lez 9 haskell functional-programming equality dependent-type morte

在语言,如Agda,IdrisHaskell用类型扩展,有一种=像以下类型排序

data a :~: b where
  Refl :: a :~: a
Run Code Online (Sandbox Code Playgroud)

a :~: b意味着ab是一样的.

可以在构造计算Morte(这是基于构造计算的编程语言)中定义这样的类型吗?

chi*_*chi 12

a :~: bCoC 的标准教会编码是:

(a :~: b) =
   forall (P :: * -> * -> *).
      (forall c :: *. P c c) ->
      P a b
Run Code Online (Sandbox Code Playgroud)

Refl 存在

Refl a :: a :~: a
Refl a =
   \ (P :: * -> * -> *)
     (h :: forall (c::*). P c c) ->
     h a
Run Code Online (Sandbox Code Playgroud)

以上表示类型之间的相等性.对于术语之间的平等,:~:关系必须采取额外的论证t :: *,其中a b :: t.

((:~:) t a b) = 
   forall (P :: t -> t -> *).
      (forall c :: t. P c c) ->
      P a b

Refl t a :: (:~:) t a a
Refl t a =
   \ (P :: t -> t -> *)
     (h :: forall (c :: t). P c c) ->
     h a
Run Code Online (Sandbox Code Playgroud)

  • @PyRulez是的.使用教堂数字,`0 fx = x`和`1 fx = fx`(模数附加类型参数).使用它,你可以得到'0(const True)False = False`和`1(const True)False = True`.假设`0:〜:1`并且取'P xy =(x(const True)False)< - >(y(const True)False)`,我们可以证明`False < - > True`. (2认同)