少则功能

时间:2018-12-31 14:11:43

标签: coq logical-foundations

我正在通过普通课程"Logical Foundations"。解决问题:

具有更少或相等的功能:

Fixpoint leb (n m : nat) : bool :=
  match n with
  | O => true
  | S n' =>
      match m with
      | O => false
      | S m' => leb n' m'
      end
  end.

创建“少了”功能:

Definition blt_nat (n m : nat) : bool
  (* REPLACE THIS LINE WITH ":= _your_definition_ ." *). Admitted.

据我了解,它应该像这样工作:

if (n == m)
   return false
else
    return (leb n m)

我创建了这个:

Definition blt_nat (n m : nat) : bool
  match n with
  | m => false
  | _ => leb n m
  end.

但是它不起作用-输出:“错误:此子句是多余的。该行:

| _ => leb n m

请帮助。

1 个答案:

答案 0 :(得分:2)

通过使用match ... with...end,我们可以仅检查特定数据类型的构造函数,并了解如何根据其构造函数进行构建。因此,您无法将nat的数据类型与nat的另一个数据类型进行匹配。您可以在here中找到其他示例。

Definition blt_nat (n m : nat) : bool :=
  match m with
  | 0 => false
  | S m' => leb n m'
  end.