使用 destruct 而不是 inversion
Using destruct instead of inversion
我明白inversion
防爆原理:
Theorem ex_falso_quodlibet : forall (P:Prop),
False -> P.
Proof.
intros P contra.
inversion contra. Qed.
但是,我不明白 Coq 为了做同样的证明所采取的步骤,但使用 destruct
而不是 inversion
:
Theorem ex_falso_quodlibet' : forall (P:Prop),
False -> P.
Proof.
intros P contra.
destruct contra. Qed.
False
inductive 是如何被销毁的?对目标和完成证明有什么影响?
False
是一个空的归纳数据类型,即它没有可能的值,参见 here。 True
是具有单个值的归纳数据类型 I
当我们 destruct
归纳数据类型的值 X
时,我们用多个子目标替换当前目标,每个 X
的可能值一个。当我们破坏 False
时,我们最终要证明的子目标为零(因为它具有零值),因此证明已完成。
基本上,destruct
和 inversion
在这里做或多或少相同的事情。
我明白inversion
防爆原理:
Theorem ex_falso_quodlibet : forall (P:Prop),
False -> P.
Proof.
intros P contra.
inversion contra. Qed.
但是,我不明白 Coq 为了做同样的证明所采取的步骤,但使用 destruct
而不是 inversion
:
Theorem ex_falso_quodlibet' : forall (P:Prop),
False -> P.
Proof.
intros P contra.
destruct contra. Qed.
False
inductive 是如何被销毁的?对目标和完成证明有什么影响?
False
是一个空的归纳数据类型,即它没有可能的值,参见 here。 True
是具有单个值的归纳数据类型 I
当我们 destruct
归纳数据类型的值 X
时,我们用多个子目标替换当前目标,每个 X
的可能值一个。当我们破坏 False
时,我们最终要证明的子目标为零(因为它具有零值),因此证明已完成。
基本上,destruct
和 inversion
在这里做或多或少相同的事情。