案例分析与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将自动为其命名)