使用 'if and only if' 规则证明 'if' 陈述(在 Isabelle 中)

Using an 'if and only if' rule to prove an 'if' statement (in Isabelle)

我正在尝试使用一组有限的规则来使用 apply 方法证明 Isabelle 中的引理。这套规则包含 disj_not1(P --> Q) = (\<not> P \/ Q).

我有子目标 (P --> Q) ==> (\<not> P \/ Q),所以我想 'Aha! Here is a place for me to use my rule disj_not1'。但不幸的是,disj_not1 是 'if and only if' 规则而不是 'if' 规则,Isabelle 反对。然而 'if and only if' 规则应该足以证明这一点(实际上绰绰有余)。这可能吗?如果可以,如何实现?

subst方法。 apply (subst foo) 将通过用右侧的相应实例重写目标中规则左侧的第一个实例来应用等式规则。您可以使用 subst (2 3) 指定其他事件,例如重写第二次和第三次出现。为了重写当前目标的假设,你需要做subst (asm)。要重写假设中的第二次出现,请编写 subst (asm) (2).

在这种情况下,我有时会以如下方式创建所需的规则:

apply (rule disj_not1 [THEN iffD1])

其中 iffD1 是事实

?Q = ?P ⟹ ?Q ⟹ ?P

如果需要从右到左的方向,可以使用iffD2代替。