如何保证Coq中类型的约束值?

时间:2019-05-29 14:56:11

标签: coq

如果我有类似的东西:

Record Version :=
  mkVersion { major:nat; minor:nat; branch:nat; hotfix:nat }.

如何为这种类型的值添加硬保证,例如:

hotfix v > 0 && hotfix v < 8

没有人可以创建具有错误值的版本。​​

1 个答案:

答案 0 :(得分:1)

您只需要添加一个证明字段。要整理它,您可以将hotfix包裹成自己的类型:

Record hotfix_t := Hotfix { 
  hf_val : nat; 
  hf_pf : hf_val > 0 /\ hf_val < 8
}.
Record Version := mkVersion {
  major : nat;
  minor : nat;
  branch : nat;
  hotfix : hotfix_t
}.