在没有完全相同的假设的情况下证明两个函数是等价的

时间:2021-07-23 11:02:12

标签: coq coq-tactic

第一个问题帖子!提前对任何不适当的格式表示抱歉。

试图证明两个版本的函数是等价的,到达这一步后我无法继续。我该如何解决这个问题?

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')

1 个答案:

答案 0 :(得分:0)

正如目前所说,这个目标是不完整的,因为我们不知道 version1version2 是什么。人们可能会认为该语句对于 version1version2 的任何选择都应该是正确的,但对于这些函数的某些选择,相反的情况是可以证明的:

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.