考虑以下愚蠢的例子
theory meta_all
imports Main
begin
lemma strict_subset: "⟦ A ⊂ B ⟧ ⟹ ∃a ∈ B. a ∉ A"
apply(blast)
done
lemma strict_subset2: "∀A B. A ⊂ B ⟶ (∃a ∈ B. a ∉ A)"
apply(blast)
done
lemma "¬ (∃A. A ⊂ A)"
apply(rule notI)
apply(erule exE)
接下来我想使用strict_subset引理并替换A两者A,B它会这样做,但是它将现有的重命名A为Aa,完全违背了引入引理的目的。
apply(insert strict_subset [where A="A" and B="A"])
如果我使用派生引理strict_subset2,一切都会很好,所以我相信我的推理是合理的。
apply(insert strict_subset2)
apply(erule_tac x="A" in allE, erule_tac x="A" in allE)
apply(drule mp, assumption)
apply(erule bexE, erule notE, assumption)
done
end
关键是大多数标准引理都是形式strict_subset而不是形式strict_subset2,伊莎贝尔的制造者不可能让我strict_subset2先自己制作,所以,我一定做错了什么。
我想明白为什么A要改名?我认为这与打字系统有关,因为我认为我还看到了只要类型完全正确,元通用量化就不是问题的例子。
另一个问题是我是否可以以A某种方式阻止重命名?
当然,很可能这两个问题实际上都与真正正确的答案无关,因为我对伊莎贝尔还是很陌生。
PS。是否也可以从 Isabelle 那里获得漂亮的符号?