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。谢谢并为迟到的回复道歉。