Logic 使用规则';古典';在伊莎贝尔

Logic 使用规则';古典';在伊莎贝尔,logic,isabelle,Logic,Isabelle,我在《伊莎贝尔》中遇到了一个自然演绎的例子,它使用了经典的规则: ( \<not> A ==> A) ==>A (\A==>A)=>A 我更习惯于使用“排除中间法则”(excluded_middle)和“反证法”(ccontr) 我假设classic与上述两个等价,但我无法从中证明它们,或者引理“A”−→ 问题集中的一个“。我不认为我只是误解了这个规则,因为我成功地用它证明了引理”−→ 习题集中的“”。有人能给我一些使用这个规则的提示/策略/演示吗?这个怎么样: le

我在《伊莎贝尔》中遇到了一个自然演绎的例子,它使用了经典的规则:

( \<not> A ==> A) ==>A
(\A==>A)=>A
我更习惯于使用“排除中间法则”(
excluded_middle
)和“反证法”(
ccontr

我假设
classic
与上述两个等价,但我无法从中证明它们,或者
引理“A”−→ 问题集中的一个“
。我不认为我只是误解了这个规则,因为我成功地用它证明了
引理”−→ 习题集中的“
”。有人能给我一些使用这个规则的提示/策略/演示吗?

这个怎么样:

lemma "A ∨ ¬ A"
proof(rule classical)
  assume "¬ (A ∨ ¬ A)"
  have "A"
  proof(rule classical)
    assume "¬ A"
    hence "(A ∨ ¬ A)" by (rule disjI2)
    with ‹¬ (A ∨ ¬ A)›
    show ?thesis by (rule notE)
  qed
  hence "(A ∨ ¬ A)" by (rule disjI1)
  with ‹¬ (A ∨ ¬ A)›
  show ?thesis by (rule notE)
qed
注意,
A⟶ A
不需要经典推理:

lemma "A ⟶ ¬ ¬ A"
proof(rule impI)
  assume A
  show "¬ ¬ A"
  proof(rule notI)
    assume "¬ A"
    from this ‹A›
    show False by (rule notE)
  qed
qed

Joachim Breitner的回答提供了我所需要的所有信息,但我想将其转换为我更了解的格式,并与我最初引用的问题集相匹配(这意味着只使用
apply
方法)

以下是以这种格式编写的Breitner证明:

lemma 1: "A ∨ ¬ A"
apply (rule classical)
apply (rule disjI1)
apply (rule classical)
apply (erule notE)
apply (rule disjI2)
apply assumption
done
“引理1”我想我已经稍微缩短了,因为我没有使用第二个
注释(它是不必要的,因为
a∨ 已经显示了一个

正如Breitner指出的,“引理2”没有使用经典的,事实上在直觉逻辑中是有效的


至于我在使用规则
classic
时学到的东西,人们可以将其视为一种“矛盾证明”:我们可以假设否定,必须证明我们的原始陈述。

我对此有点困惑,因为我不理解您使用的符号(我只使用了
apply(经典规则))
style方法)。我使用的是Isar样式,即您应该使用的结构化校对文档样式。但是对于apply脚本,它的工作原理类似,您必须使用相同的证明规则。
lemma 2: "A ⟶ ¬ ¬ A"
apply (rule impI)
apply (rule notI)
apply (rule notE)
apply assumption
apply assumption
done