我怎样才能在Idris中创建不同的变量?

时间:2017-11-15 19:08:07

标签: idris

我正在尝试重建伊德里斯希尔伯特几何学的公理。我想出了以下代码来表示他的公理:

dynamic

interface (Eq point) => Plane line point where colinear : point -> point -> point -> Bool contains : line -> point -> point -> Bool axiom1a : (a,b : point) -> (a /= b) = True -> (l : line ** (contains l a b = True)) axiom1b : contains l a b = True -> contains m a b = True -> l = m axiom2 : (a : point ** (colinear a b c = False) && (a /= b) = True && (b /= c) = True && (a /= c) = True) axiom3 : (l : line) -> (a ** (contains l a b = True)) 应为“存在3个不同的非共线点”。我收到以下错误:

axiom2

如果我删除了When checking type of Main.axiom2: When checking argument P to type constructor Builtins.DPair: Type mismatch between Bool (Type of _ && _) and Type (Expected type) 代码,那么公理中“distinct”的限定就会丢失。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

colinear a b c = FalseType,而不是Bool。同样适用于(a /= b) = True(b /= c) = True(a /= c) = True

您必须使用"类型级&&",而不是&&,而不是使用axiom2 : (a : point ** (colinear a b c = False, (a /= b) = True, (b /= c) = True, (a /= c) = True))

axiom2 : (a : point ** (b : point ** (c : point ** (colinear a b c = False, (a /= b) = True, (b /= c) = True, (a /= c) = True))))

但是,那将会读到"存在一个与任何其他两个不同的点并不共线的点#34;但情况并非总是如此。你可以这样写:

(a, b, c : point ** ...

那将会读到"有三个不同的点,不是共线"。我不确定是否可以更好地查看,例如{{1}}。