我正在尝试重建伊德里斯希尔伯特几何学的公理。我想出了以下代码来表示他的公理:
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”的限定就会丢失。任何帮助将不胜感激。
答案 0 :(得分:1)
colinear a b c = False
是Type
,而不是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}}。