coq - 在没有完全相同假设的情况下证明两个函数是等价的
问题描述
第一个问题帖!对于任何不适当的格式,请提前道歉。
试图证明两个版本的函数是等价的,到达这一步后我无法继续。我该如何解决这个问题?
1 subgoal
a' : nat
Ha' : forall b : nat, version1 a' b 0 = version2 a' b 0
b' : nat
Hb' : version1 a' b' b' = version2 a' b' b'
______________________________________(1/1)
version1 a' (S b') (S b') = version2 a' (S b') (S b')
解决方案
version1
正如目前所说,这个目标是不完整的,因为我们不知道什么version2
是什么。人们可能会认为该陈述对于 和 的任何选择都应该是正确的version1
,version2
但是对于这些函数的某些选择,相反的情况是可以证明的:
Definition v1 (a b c : nat) :=
Nat.leb c 1.
Definition v2 (a b c : nat) :=
Nat.ltb c 1.
Lemma counterexample :
~ (forall (version1 version2 : nat -> nat -> nat -> bool),
forall a' : nat,
forall Ha' : (forall b : nat, version1 a' b 0 = version2 a' b 0),
forall b' : nat,
forall Hb': (version1 a' b' b' = version2 a' b' b'),
version1 a' (S b') (S b') = version2 a' (S b') (S b')).
Proof.
intros abs.
assert (v1 0 1 1 = v2 0 1 1).
apply abs.
auto.
auto.
discriminate.
Qed.
推荐阅读
- python - python print() 在同时调用时如何实际工作?
- python - 在安装 Anaconda 的 Bash 脚本期间激活 Conda
- flask - 如何在 Mac OS M1 上安装 flask-mysqldb?
- python - 如何让我的应用程序在后台运行?
- python - 如何计算熊猫python中的列分数
- rust - 如何在 Rust 中将彩色文本打印到终端?
- python - 如何改进我的代码,以便我可以在包含大多数“z”字符的文本文件中找到单词?
- bash - 如何在bash中对2个数组进行排序
- javascript - 如何正确添加 react-i18next
- bash - Inotifywait 仅第一次执行 bash 脚本