idris中类型计算函数结果的模式匹配

时间:2015-10-14 19:42:30

标签: theorem-proving idris

考虑以下片段:

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

是否可以在type的类型归属期间或之前强制y进行评估,以便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

1 个答案:

答案 0 :(得分:6)

以小写字母开头的类型声明中的名称是隐式绑定的,因此它会处理' type'作为类型参数。您可以输入'输入'一个以资本开头的新名称(按照惯例,这是大多数人在伊德里斯所做的事情),或者您可以使用其中的模块(主要,此处)明确限定名称。

伊德里斯过去常常猜测是否会输入' type'等名称。本文旨在暗示或意图引用全球。虽然有各种各样的伏都教,但它经常失败,所以它现在实现了这个更简单的规则。在这种情况下,这有点令人讨厌,但替代行为更令人讨厌(并且更难解释)。