Very nice!

I'll wait until the naming issue is settled before replacing my many uses of "hide_const (open) ...".

A further naming suggestion:

 (a) private/hidden
 (b) qualified

the latter is akin to Haskell's "qualified" import.

cheers

chris

PS: I'm still waiting for

  isabelle build -n -a -d '$AFP' -k qualified

to finish (but I guess proper checking, taking semantics into account, is just expensive). Oops, while writing this email I obtained:

*** java.lang.OutOfMemoryError: Java heap space
0:03:32 elapsed time, 0:05:46 cpu time, factor 1.63

(Maybe because in parallel I am still waiting on

  isabelle build -v -n -a -d '$AFP' -k hidden -k private

? Which seems to "hangs" at "Session Pure/RAW" now for several minutes.)

On 04/07/2015 02:07 PM, Makarius wrote:
* Local theory specification commands may have a 'private' or
'restricted' modifier to limit name space accesses to the local scope,
as provided by some "context begin ... end" block. For example:

   context
   begin

   private definition ...
   private definition ...
   private lemma ...

   lemma ...
   lemma ...
   theorem ...

   end


This refers to Isabelle/83071f4c8ae6.

After more than 10 years in the pipeline, and never-ending efforts to
localize almost all tools, there is now the long anticipated limitation
of name space accesses. There are presently two example applications:

(1) Local tool setup with some auxiliary constants: "induct_forall" etc.
in
http://isabelle.in.tum.de/repos/isabelle/file/83071f4c8ae6/src/HOL/HOL.thy#l1377


(2) Plain specifications that are meant to produce theory-qualified
names: AList.update etc. in
http://isabelle.in.tum.de/repos/isabelle/file/e83ecf0a0ee1/src/HOL/Library/AList.thy#l11



I am still not 100% sure about the choice of keywords.  There are two
concepts that are supported: (a) totally inaccessible name space entry,
(b) name space entry that is only accessible by qualified names, not the
base name.

Presently we have:

   (a) 'private'
   (b) 'restricted'

I first started out implementing 'private' for the sake of Eisbach,
which really needs that.  Then I noticed that in practice one mostly
uses 'restricted' to eliminated old "hide (open)", but this keyword is a
bit awkward.

Here are some possible alternatives:

   (a) 'hidden'    (like Long_Name.hidden according to Isabelle/ML
terminology)
   (b) 'private'   (like 'private' in Java/Scala, in non-serious mode)

or:

   (a) 'private'   (like 'private' on Java/Scala in serious mode)
   (b) 'local'     (like an ancient Isabelle command of that name)


By non-serious mode I mean the rather easy way to bypass 'private'
declarations on the JVM via reflection.  Likewise our logical
environment always allows to access inaccessible names, after some
tweaking of the name space, e.g. via aliases.  This could justify the
use of 'private' for what is now 'restricted', or it might be just too
confusing to users.


Note that it is now releatively easy to test feasibility of new keywords
like this:

   $ isabelle build -n -a -d '$AFP' -k hidden -k local


     Makarius
_______________________________________________
isabelle-dev mailing list
isabelle-...@in.tum.de
https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev
_______________________________________________
isabelle-dev mailing list
isabelle-...@in.tum.de
https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev

Reply via email to