使用=的异类相等

时间:2014-10-07 00:45:42

标签: idris

到目前为止我所拥有的是:

module Foo

postulate P : 'P
postulate NP : 'NP

complexityProof : P = NP
complexityProof = ?complexityProof_rhs

但是在尝试加载文件时,我得到:

When elaborating type of Foo.complexityProof:
When elaborating argument y to type constructor =:
    Can't unify
            'NP
    with
            'P

    Specifically:
            Can't unify
                    "NP"
            with
                    "P"

有点对这个错误感到惊讶,因为我认为伊德里斯拥有不同的“约翰少校”平等,在=的左侧和右侧有不同的类型。现在有一个不同的符号吗?

1 个答案:

答案 0 :(得分:4)

来自文档:

  

注意:Idris的相等类型可能是异构的,这意味着它是   可以说明可能不同类型的值之间的平等。   但是,伊德里斯将尝试同质案件,除非它没有进行类型检查。

     

您可能需要使用(〜=〜)显式请求异构相等。

所以我不确定为什么=不起作用,因为我认为文档试图说异构平等是一种后备,但你可以改为使用~=~

module Foo

postulate P : 'P
postulate NP : 'NP

complexityProof : P ~=~ NP
complexityProof = ?complexityProof_rhs