【问题标题】:Pattern matching on the result of type computing functions in idrisidris中类型计算函数结果的模式匹配
【发布时间】:2015-10-14 19:42:30
【问题描述】:

考虑以下片段:

import Data.List

%default total

x : Elem 1 [1, 2]
x = Here

type : Type
type = Elem 1 [1, 2]

y : type
y = Here

这给出了错误:

检查 y 的右侧时: 类型不匹配 Elem x (x :: xs) (这里的类型) 和 iType(预期类型)

y的类型,查询时为:

type : Type
-----------
y : type

是否可以在y的类型归属期间或之前强制评估type,使y的类型为Elem 1 [1, 2]

我的用例是我希望能够定义通用谓词,以返回正确的命题术语以进行证明,例如:

subset : List a -> List a -> Type
subset xs ys = (e : a) -> Elem e xs -> Elem e ys

thm_filter_subset : subset (filter p xs) xs

【问题讨论】:

    标签: theorem-proving idris


    【解决方案1】:

    类型声明中以小写字母开头的名称是隐式绑定的,因此它将“类型”视为类型参数。您可以给“type”一个以大写字母开头的新名称(按照惯例,这是大多数人在 Idris 中所做的),或者您可以使用它所在的模块明确限定名称(Main,here)。

    Idris 曾经尝试猜测诸如“类型”之类的名称是隐含的还是意指全局的,就像这里一样。但是,要做到这一点,需要各种巫术,所以它经常失败,所以它现在实现了这个更简单的规则。在这种情况下有点烦人,但另一种行为通常更烦人(而且更难解释)。

    【讨论】:

    • 新系统感觉就像 Haskell 的。我一直在想
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2017-03-02
    • 2015-04-07
    相关资源
    最近更新 更多