我已将实数的数据类型定义为..
record ℝ : Set where
field
L : Stream pair
R : Stream pair
inhabited : ∀ (x : pair) → ( (x mem L) or (x mem R))
disjoint : ∀ (x : pair) → ( (not (x mem L)) or (not (x mem R)))
located : ∀ (x y : pair) → (x ≤pair y) → ((x mem L) or (y mem R))
现在我要定义一个 R 类型的元素。我试着......
mkReal : Stream pair -> Stream pair -> R
mkReal x y = record { L = x; R = y}.
但这不起作用请帮助。
答案 0 :(得分:2)
您的记录ℝ
有五个字段,L
,R
,inhabited
,disjoint
和located
。要定义ℝ
的实例,您必须为所有五个字段提供值:
mkReal x y = record { L = x; R = y; inhabited = ?; disjoint = ?; located = ? }
您可能还必须将inhabited
,disjoint
和located
的值作为参数传递给mkReal
。
顺便说一下,有一种方法可以自动为记录定义构造函数:
record ℝ : Set where
constructor mkReal
field
L : Stream pair
R : Stream pair
inhabited : ∀ (x : pair) → ((x mem L) or (x mem R))
disjoint : ∀ (x : pair) → ((not (x mem L)) or (not (x mem R)))
located : ∀ (x y : pair) → (x ≤pair y) → ((x mem L) or (y mem R))
作为奖励,您现在可以在模式匹配时使用mkReal
:
foo : ℝ → ?
foo (mkReal L R inhabited disjoint located) = ?