Hi Lars,

You are mis-reading the schematic goal below:

lemma
"ALL (x::nat). x = y ==> False"
apply (erule allE)

After this step, the subgoal "?x = y ==> False" remains, which cannot be proven. Else, we could prove:

schematic_lemma foo: "?x = y ==> False"
  sorry

lemma "False" by (auto intro: foo[of 1 1, simplified])

Schematic vars in a goal state are "morally existentially quantified": they can be instantiated during the proof, that is, it is sufficient to prove any instance. Thus, the subgoal is provable, e.g. by substituting "Suc y" for x.

When you sorry the schematic lemma, then your sorry doesn't instantiate the ?x. In the result, the ?x is morally universally quantified. This shows that in schematic lemma statements, unlike normal ones, the proof matters.

To the original question: My experience is that auto is unsafe in a few corner cases, but that this does not happen too often. It seems eliminating equations where one variable does not occur in the rest of the goal is "often safe", but not always, and in the presence of locales, these situations tend to occur more often. Probably this should be rethought at some point (which involves fixing many proofs, if auto should be changed).

Alex

_______________________________________________
Isabelle-dev mailing list
[email protected]
https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev

Reply via email to