比较coq的功能

比较coq的功能,coq,Coq,我想做一个coq中自然数比较的函数 我声明了一组包含sup,inf,egal的不变量 Inductive invr:Type:=inf | sup | egal. 我定义了一个函数 Definition comparaison (inv:invr)(a b:nat):bool:= match invr with |inf => if (a < b) then true else false |sup => if (a > b) then true els

我想做一个coq中自然数比较的函数 我声明了一组包含sup,inf,egal的不变量

Inductive invr:Type:=inf | sup | egal.
我定义了一个函数

Definition comparaison (inv:invr)(a b:nat):bool:=
  match invr with
  |inf => if (a < b) then true else false  
  |sup => if (a > b) then true else false 
  |egal=> if (a = b) then true else false 
  end. 
定义比较(inv:invr)(a b:nat):bool:=
匹配invr
|inf=>如果(a如果(a>b),则为真,否则为假
|egal=>如果(a=b),则为true,否则为false
结束。

但它不起作用!谢谢你的回复

您试图将type(set)invr与其构造函数的值(而不是变量inv)匹配,因此会出现错误

术语“invr”的类型为“Set”,而预期的类型为“Set” “invr”

您需要对
inv
进行匹配,而不是
invr

Definition comparaison (inv:invr)(a b:nat):bool:=
  match inv with
  |inf => if (a < b) then true else false  
  |sup => if (a > b) then true else false 
  |egal=> if (a = b) then true else false 
  end. 

您试图将type(set)invr与其构造函数值(而不是变量inv)匹配,因此会出现错误

术语“invr”的类型为“Set”,而预期的类型为“Set” “invr”

您需要对
inv
进行匹配,而不是
invr

Definition comparaison (inv:invr)(a b:nat):bool:=
  match inv with
  |inf => if (a < b) then true else false  
  |sup => if (a > b) then true else false 
  |egal=> if (a = b) then true else false 
  end. 

这是一个典型的初学者错误


这是一个典型的初学者错误

“它不起作用”不是解释问题的正确方法。“它不起作用”不是解释问题的正确方法。
lt : nat -> nat -> Prop
beq_nat: nat -> nat -> bool
leb: nat -> nat -> bool

(* or the more informative versions which return proofs of what they decide *)
eq_nat_dec: forall n m : nat, {n = m} + {n <> m}
lt_dec: forall n m : nat, {n < m} + {~ n < m}
if beq_nat a b then true else false
beq_nat a b