等于在 Coq 中表示小于或等于
Equal implies Less-Than-Or-Equal in Coq
我正在尝试证明 Coq 中最简单的事情:
Require Import Coq.Structures.OrdersFacts.
Require Import Coq.Structures.Orders.
Lemma easy: forall a b : nat, (a = b) -> (a <= b).
Proof.
intros.
apply le_lteq. (* doesn't work *)
apply LeIsLtEq.le_lteq. (* doesn't work *)
但是我收到以下错误:
The reference le_lteq
was not found in the current
environment.
这有点奇怪,因为我 在 Coq.Structures.Orders
中看到了它
正如您在提供的 link 中看到的那样, le_lteq
的定义不在顶层,而是隐藏在其他模块之后。遇到这个问题的一般解决方案是使用 Locate
.
Locate le_lteq.
将告诉您哪些定义(在范围内,在 Require
之后可用)具有该名称以及如何调用它们。
请注意,它也适用于符号。
Locate "=".
在这种特殊情况下,它确实不起作用,因为 le_lteq
不仅隐藏在模块后面,而且隐藏在函子后面。
例如它出现在
Module OT_to_Full (O:OrderedType') <: OrderedTypeFull.
Include O.
Definition le x y := x<y \/ x==y.
Lemma le_lteq : forall x y, le x y <-> x<y \/ x==y.
End OT_to_Full.
意味着您必须使用 OrderedType'
.
类型的模块实例化 OT_to_Full
如果没有特别的理由使用Coq.Structures.Orders
那么我宁愿直接在自然数上寻找引理。
Search "=" "<=".
没有得到你想要的结果。相反,我们将在目标中使用 subst b
将 b
替换为 a
。
这很好,因为我们使用
找到了 a <= a
的证明
Search (?x <= ?x).
打印
le_n: forall n : nat, n <= n
那么证明就是:
Lemma easy :
forall (a b : nat),
a = b ->
a <= b.
Proof.
intros a b e.
subst b.
apply le_n.
Qed.
我正在尝试证明 Coq 中最简单的事情:
Require Import Coq.Structures.OrdersFacts.
Require Import Coq.Structures.Orders.
Lemma easy: forall a b : nat, (a = b) -> (a <= b).
Proof.
intros.
apply le_lteq. (* doesn't work *)
apply LeIsLtEq.le_lteq. (* doesn't work *)
但是我收到以下错误:
The reference le_lteq
was not found in the current
environment.
这有点奇怪,因为我 在 Coq.Structures.Orders
中看到了它正如您在提供的 link 中看到的那样, le_lteq
的定义不在顶层,而是隐藏在其他模块之后。遇到这个问题的一般解决方案是使用 Locate
.
Locate le_lteq.
将告诉您哪些定义(在范围内,在 Require
之后可用)具有该名称以及如何调用它们。
请注意,它也适用于符号。
Locate "=".
在这种特殊情况下,它确实不起作用,因为 le_lteq
不仅隐藏在模块后面,而且隐藏在函子后面。
例如它出现在
Module OT_to_Full (O:OrderedType') <: OrderedTypeFull.
Include O.
Definition le x y := x<y \/ x==y.
Lemma le_lteq : forall x y, le x y <-> x<y \/ x==y.
End OT_to_Full.
意味着您必须使用 OrderedType'
.
OT_to_Full
如果没有特别的理由使用Coq.Structures.Orders
那么我宁愿直接在自然数上寻找引理。
Search "=" "<=".
没有得到你想要的结果。相反,我们将在目标中使用 subst b
将 b
替换为 a
。
这很好,因为我们使用
a <= a
的证明
Search (?x <= ?x).
打印
le_n: forall n : nat, n <= n
那么证明就是:
Lemma easy :
forall (a b : nat),
a = b ->
a <= b.
Proof.
intros a b e.
subst b.
apply le_n.
Qed.