[isabelle-dev] typedef (open) legacy

Makarius makarius at sketis.net
Thu Oct 4 14:17:48 CEST 2012

On Thu, 4 Oct 2012, Christian Urban wrote:

> "Closed" type definitions with
>  typedef new_type = "some set"
> are considered legacy. The warning message suggests
> to use
>  typedef (open) new_type = "some set"
> but as far as I can see, this does not introduce a definition for the 
> set underlying the type. For example the theorem
>  new_type_def
> is not generated with open.
> I have a number of lemmas that are of the form
>   f \<in> new_type ==> something
> which require new_type_def. What is the received
> wisdom to update those proofs?
> I see that FinFun.thy goes around the problem
> above by giving an explicit definition for the
> set as in
>  definition new_type_set = something
>  typedef (open) new_type = new_type_set
> Is this how it should be done nowadays? Looks to me more verbose than an 
> improvement.

The latter "verbose" version is the canonical way to upgrade old theories, 
without changing their structure.  If a bit more work is invested, in most 
cases the very need for the new_type_set definition can be eliminated in 
the concrete application, and then everything becomes simpler than before.

Historically, Larry introduced a certain "Gordon HOL typedef imitation 
scheme" for Isabelle/HOL, which I imitated faithfully in the first version 
of the typedef package, to generate exactly the same axiomatization with 
the auxiliary new_type_set.  Several years later, Brian Huffman pointed 
out first that this is redundant in many situations.  Some more years 
later, I joined Brian in this observation --- after looking critically 
through the existing library of theories and packages.

So today, the form with the extra definition is mostly irrelevant, but we 
were a bit slow to remove the last remains of it from the typedef packages 
(and some add-ons of it in HOLCF).  It might be time now to do the purge 
before the next release ...


More information about the isabelle-dev mailing list