English 中文(简体)
关系参数化是什么?
原标题:
  • 时间:2008-11-11 08:03:36
  •  标签:

一个听起来复杂,但在简单的谷歌搜索中没有好的解释的术语...还有没有更多学术方向的人能够解释这个?

最佳回答

关系参数性似乎是一个函数抽象化类型的属性(比如Java中的泛型)。如果它拥有这个属性,意味着它永远不会检查其类型参数或以某种特殊方式解构它/使用它。例如,这里的函数“id or inc”不是关系参数:

public class Hey<T>
{
    public T idOrInc(T var)
    {
        if (var instanceof Integer)
            return (T)(new Integer(((Integer)var).intValue()+1));
        return var;
    }
    public static void main(String[] args) {
        Hey<Integer> h = new Hey<Integer>();
        System.out.println(h.idOrInc(new Integer(10)));
        Hey<Double> h2 = new Hey<Double>();
        System.out.println(h2.idOrInc(new Double(10)));
    }
}

输出是:

$ java Hey
11
10.0
问题回答

两个答案大部分都是正确的。我会说参数性是多态性的可能属性。如果多态术语在所有实例化下表现相同,则多态性是参数化的。 “表现相同”是一个模糊的,直观的术语。约翰·雷诺兹引入了关系参数化作为这个数学形式化的一个。它声明多态术语保留所有关系,直观地迫使它表现相同。

Consider f: a list -> a list. If we have the relation a~1, b~2, c~3, ..., then we can lift it to lists and hav e.g. [a, d, b, c] ~ [1, 4, 2, 3]

Now, if f([a, d, b, c]) = [c, b, d, a] and f preserves relations, then f([1, 4, 2, 3]) = [3, 2, 4, 1]. In other words, if f reverses list of strings, it also reverses lists of numbers.

因此,在关系参数化的多态函数中,无法“检查类型参数”,即它们无法根据类型改变其行为。

关系参数化是一种技术,用于证明任何完全参数化的代码都将满足某些法律。

“全参数”代码是具有类型参数的函数,其参数仅使用这些类型参数进行了类型化,并且其代码是纯函数式的,不尝试在运行时检查分配给类型参数的类型。代码必须将所有类型视为完全未知。

在这些限制下,代码将满足某种法律,大多数情况下这将是“自然性”法律,但在某些情况下,法律将更加复杂。“免费的定理”一文展示了许多这样的法律示例。

为了证明这些定律总是成立,人们使用关系参数化技术。这是一种复杂而强大的技术,在其中将函数(视为一对多二元关系)替换为任意(多对多)二元关系,然后使用关系重新制定自然性律。结果是一个“关系自然性律”。最后,人们再次将关系替换为函数并尝试推导出一个方程。

我最近录制了一篇关于关系参数性的教程,其中包含Scala的代码示例。 https://www.youtube.com/watch?v=Jf2VFB90Q0s&list=PLcoadSpY7rHUO0I1zdcbu9EeByYbwPSQ6

好的,我在这里只是要猜一个完全的猜测,基于这个。

将此翻译成中文:http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4276578 http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4276578

我会说这是参数多态性(泛型)的数学表示。





相关问题
热门标签