如果A是B的子类型,(A→B)→A是(B→B)→A的子类型吗?

时间:2019-04-23 18:18:18

标签: subtyping

假设A是B的子类型, (A→B)→A是(B→B)→A的子类型吗? A→(B→A)是B→(B→A)的子类型吗?

1 个答案:

答案 0 :(得分:0)

根据Subtypes and Function Types,一种方法如下:

符号和假设:

  1. Map<Object>AB)的子类型
  2. A < B是一个函数(类型),它接收类型为X→Y的实例并返回类型为X的实例
  3. 功能类型YS1→S2子类型 iif T1→T2 {{ 1}}

要使T1 < S1S2 < T2的子类型,就需要:

  1. (A→B)→A <(B→B)→A
  2. (B→B)(身份真实)

要让(A→B)再次保留应用函数子类型,我们需要:

  1. A < A(根据假设为真)和
  2. (B→B) < (A→B)(以身份为准)

所以A < BB < B(A→B)→A的子类型

尝试通过类似的分析来回答第二个问题:

(B→B)→A(A→B)→A < (B→B)→A的子类型吗?