coq变更前提';否定不相等';至';相等';

coq变更前提';否定不相等';至';相等';,coq,Coq,假设我有这样一个前提: H2: ~ a b c <> a b c 在哪里 a是术语->术语->术语 b和c都是术语 我怎么做?谢谢 如果展开~和的定义,则假设具有以下类型: H2: (a b c = a b c -> False) -> False 因此,你希望达到的是逻辑学家通常所说的“双重否定消除”。这不是一个直观可证明的定理,因此在Coq的经典模块中定义(详情请参见): 我假设您的实际问题比abc=abc更复杂,但为了说明这一点,如果您真的关心获得该特定假设,您

假设我有这样一个前提:

H2: ~ a b c <> a b c
在哪里

a是术语->术语->术语

b和c都是术语


我怎么做?谢谢

如果展开
~
的定义,则假设具有以下类型:

H2: (a b c = a b c -> False) -> False
因此,你希望达到的是逻辑学家通常所说的“双重否定消除”。这不是一个直观可证明的定理,因此在Coq的
经典
模块中定义(详情请参见):

我假设您的实际问题比
abc=abc
更复杂,但为了说明这一点,如果您真的关心获得该特定假设,您甚至不用看H2就可以安全地证明它:

assert (abc_refl : a b c = a b c) by reflexivity.

如果你的实际例子不是立即自反的,等式实际上是错误的,也许你想把你的目标变成证明H2是荒谬的。您可以通过删除H2(
elimh2.
,这基本上是在
False
类型上进行剪切)来完成此操作,并且您将在以下上下文中结束:

H2 : ~ a b c <> a b c
EQ : a b c = a b c
=====================
False
H2:~abc
等式:AB c=AB c
=====================
假的


我不确定所有这些是否都有帮助,但你可能把你的问题简化了,因此我无法提供更多关于你真正问题的见解。

如果你展开
~
的定义,你的假设有以下类型:

H2: (a b c = a b c -> False) -> False
因此,你希望达到的是逻辑学家通常所说的“双重否定消除”。这不是一个直观可证明的定理,因此在Coq的
经典
模块中定义(详情请参见):

我假设您的实际问题比
abc=abc
更复杂,但为了说明这一点,如果您真的关心获得该特定假设,您甚至不用看H2就可以安全地证明它:

assert (abc_refl : a b c = a b c) by reflexivity.

如果你的实际例子不是立即自反的,等式实际上是错误的,也许你想把你的目标变成证明H2是荒谬的。您可以通过删除H2(
elimh2.
,这基本上是在
False
类型上进行剪切)来完成此操作,并且您将在以下上下文中结束:

H2 : ~ a b c <> a b c
EQ : a b c = a b c
=====================
False
H2:~abc
等式:AB c=AB c
=====================
假的


我不确定所有这些是否都有帮助,但你可能把你的问题简单化了,因此我无法对你真正的问题提供更多的见解。

只是想补充一下Ptival的答案-如果你想要的目标不是通过
自反性解决的,那么,如果你的
术语
具有可判定的相等性,你仍然可以取得进步,例如通过应用这个小引理:

Section S.
  Parameter T : Type.
  Parameter T_eq_dec : forall (x y : T), {x = y} + {x <> y}.

  Lemma not_ne : forall (x y : T), ~ (x <> y) -> x = y.
  Proof.
    intros.
    destruct (T_eq_dec x y); auto.
    unfold not in *.
    assert False.
    apply (H n).
    contradiction.
  Qed.
End S.
第S节。
参数T:Type。
参数T_eq_dec:forall(xy:T),{x=y}+{xy}。
引理不适用于所有(xy:T),~(xy)->x=y。
证明。
介绍。
自毁(T_eq_dec x y);自动的。
不在*中展开。
断言错误。
应用(hn)。
矛盾
Qed。
结束S。

给Ptival的答案加上一点想法-如果你想要的目标不是通过
自反性来解决的,你仍然可以取得进步,只要你的
术语
具有可判定的平等性,例如通过应用这个小引理:

Section S.
  Parameter T : Type.
  Parameter T_eq_dec : forall (x y : T), {x = y} + {x <> y}.

  Lemma not_ne : forall (x y : T), ~ (x <> y) -> x = y.
  Proof.
    intros.
    destruct (T_eq_dec x y); auto.
    unfold not in *.
    assert False.
    apply (H n).
    contradiction.
  Qed.
End S.
第S节。
参数T:Type。
参数T_eq_dec:forall(xy:T),{x=y}+{xy}。
引理不适用于所有(xy:T),~(xy)->x=y。
证明。
介绍。
自毁(T_eq_dec x y);自动的。
不在*中展开。
断言错误。
应用(hn)。
矛盾
Qed。
结束S。

Hi Ptival,我简化了整个问题,但总的来说,只需解决我上面发布的问题就可以解决。没有意识到它需要NNPP。谢谢很抱歉回复太晚了。嗨,皮蒂瓦尔,我已经简化了整个问题,但总的来说,只要解决我上面发布的问题就可以解决。没有意识到它需要NNPP。谢谢并为迟到的回复道歉。