在Coq中,有没有办法摆脱假设中的“无用”前提条件?

时间:2016-10-06 20:20:45

标签: coq

有时由于rememberinduction策略的组合,我最终得出的假设看起来有点像这样:

Heqa: a = Foo b
IH1: a = Foo b -> bla_bla_bla
IH2: a = Foo b -> ble_ble_ble

是否有快速方法可以将a = Foo bIH1中无用的IH2前置条件排除在外?我能想到的唯一方法是非常冗长和重复:

assert (IH1': a = Foo b). { apply Heqa. }
apply IH1 in IH1'. clear IH1. rename IH1' into IH1.

assert (IH2': a = Foo b). { apply Heqa. }
apply IH2 in IH2'. clear IH2. rename IH2' into IH2.

1 个答案:

答案 0 :(得分:8)

您可以使用specialize策略:

specialize (IH1 Heqa).
specialize (IH2 Heqa).

会帮你的

Heqa: a = Foo b
IH1: bla_bla_bla
IH2: ble_ble_ble

这似乎是你想要的。

specialize将一些参数应用于假设并重写它。

顺便说一句,使用一种类似的策略pose proof,我们可以保持原始假设的完整性。可以找到更多详细信息here