案例分析与Coq简介

案例分析与Coq简介,coq,Coq,我想理解下面证明中的语法intros[|n]。 Lemma zero_or_succ : forall n : nat, n = 0 \/ n = S (pred n). Proof. intros [|n]. - left. reflexivity. - right. reflexivity. Qed. 我的理解是,它修复了n,然后对其进行了案例分析。然而,我习惯于使用destruct进行案例分析。这是做那件事的捷径吗?我应该如何理解第一个分支为空的案例分析。 您在这里使用的

我想理解下面证明中的语法
intros[|n]。

Lemma zero_or_succ :
  forall n : nat, n = 0 \/ n = S (pred n).
Proof.
  intros [|n].
  - left. reflexivity.
  - right. reflexivity.
Qed.
我的理解是,它修复了n,然后对其进行了案例分析。然而,我习惯于使用destruct进行案例分析。这是做那件事的捷径吗?我应该如何理解第一个分支为空的案例分析。 您在这里使用的称为介绍模式

相当于

intro n. destruct n as [|n].
您基本上是为构造函数的不同参数命名,使用
|
来分隔所述构造函数。 对于自然数,有构造函数
O
S
。第一个没有参数,而第二个有参数,我们称之为
n

如果有布尔值,则可以使用
[|]
,因为
true
false
都不接受参数。 请注意,
intros[]
也是可能的,它对应于
intro h。在不命名变量的情况下销毁h.
。 更一般地说,您不必详尽地命名变量。
intros[|].
intros[]
intros[|?]
同样适用于自然数(
允许您声明存在一个您不会命名的变量,因为Q会自动为其命名)。

您是正确的。 您在这里使用的称为介绍模式

相当于

intro n. destruct n as [|n].
您基本上是为构造函数的不同参数命名,使用
|
来分隔所述构造函数。 对于自然数,有构造函数
O
S
。第一个没有参数,而第二个有参数,我们称之为
n

如果有布尔值,则可以使用
[|]
,因为
true
false
都不接受参数。 请注意,
intros[]
也是可能的,它对应于
intro h。在不命名变量的情况下销毁h.
。 更一般地说,您不必详尽地命名变量。
intros[|].
intros[]
intros[|?]
同样适用于自然数(
允许您声明存在一个您不会命名的变量,coq将自动为其命名)