[isabelle-dev] auto raises a TYPE exception
Makarius
makarius at sketis.net
Wed May 29 23:30:19 CEST 2013
On Wed, 29 May 2013, Makarius wrote:
> Without the latter, src/HOL/Metis_Examples/Clausification.thy crashes at
> the very end, due to divergence of types of certain Vars, types that
> cannot be unified. This is very odd, but should not be a problem at the
> moment: Metis should work as before.
Just for completeness, here is the original crash of Metis proof
reconstruction at Isabelle/0fa3b456a267:
lemma ex_tl: "EX ys. tl ys = xs"
using tl.simps(2) by fast
lemma "(∃ys∷nat list. tl ys = xs) ∧ (∃bs∷int list. tl bs = as)"
by (metis ex_tl)
Metis: Failed to replay Metis proof
inst_inference: ("COMP", 1,
["Meson.skolem (Meson.COMBK (tl ((?MesonSK_0_0_0_ys1∷nat
list ⇒ nat list) (xs∷nat \
list)) = xs) (0∷nat)) ⟹
tl ((?MesonSK_0_0_0_ys1∷int list ⇒ int list)
(?MesonV_0_1_0_xs1∷int list)) = (as\
∷int list) ⟹ False"
[.],
"PROP ?psi2 ⟹ PROP ?psi2"])
The failure of COMP is via cterm_instantiate/instantiate_normalize: after
the instantiation, there are ?ys1 of different types, so the extra type
unification of Vars in COMP will fail.
(Note that the pretty-printed exception content is produced via regular
and documented @{make_string} sneaked into the proper spot in the ML code,
without committing that. Many people only know the "secret"
PolyML.makestring, with its unformatted text-only output.)
In 6ba76ad4e679 this crash is avoided: already incremented composition
problems omit the extra type unification, just like plain resolution. This
merely pushed the inherent problem elsewhere, so in 568b2cd65d50
resolve_inc_tyvars is back where types of equal Vars are *not* unified,
despite its lengthy workaround for exactly that.
Makarius
More information about the isabelle-dev
mailing list