我试图在BES中定义变量的等级。 BES被定义为方程列表,变量是命题变量集的居民,它不是归纳类型:
Variable propVar : Set.
Definition rank (E:BES)(x:propVar) : nat :=
let fix block(E':BES)(curMu:bool) : nat :=
match E' with
| nil => fail
| cons (mu xc _) E2 =>
if xc=x then (if curMu then O else S(O))
else (if curMu then block E2 true else S(block E2 false))
| cons (nu xc _) E2 =>
if eqb xc x then (if curMu then S(O) else O)
else (if curMu then S(block E2 false) else block E2 true)
end
in
block E false.
然而,Coq不接受这个定义,因为xc = x的类型是Prop,而Coq需要某种类型的Bool。
是否可以在propVar
上定义类似于bool_dec
的可判定等式,以便我可以使用此而不是xc=x
?
答案 0 :(得分:1)
你应该添加
Parameter propVardec : forall x y: propVar, {x = y}+{x <> y}.
该陈述增加了propVar
的每个元素相同或不同的假设,使您的类型可判定。
你也可以定义
Parameter propVarbeq : propVar -> propVar -> bool.
哪个或多或少相同。主要的区别在于第一个提供了相等(或差异)的证明,其中第二个只告诉你它们是否相等。
如果你实例化了propVar
类型,你还应该证明/实例化这两个函数。