makarius at sketis.net
Wed Nov 21 11:55:09 CET 2012
On Wed, 21 Nov 2012, Tobias Nipkow wrote:
> Most of the theories in there are loaded via Library.thy. But a few are
> loaded via ROOT. What is the rational for this subdivision?
There is a longer history behind this, where I started some parts, and
others continued. So I don't know all the answers.
Historically, the idea of the universal Library.thy that includes
everything was to ensure that these theories are at least as compatible
with each other that they can be merged into one big theory. It might
also help users to import Library, like they would do for Main, but I am
unsure if this happens in practice. It is also useful for testing, to
have just one import to care about (with old-stype use_thy on the tty).
The latter aspect is gradually being superseded by the ROOT setup: it
tells which collection of theories (without merging) contribute to a
session. In the next round of the reforms the Prover IDE should be able
to import all of them in interactive mode, like build does in batch mode.
The theories that are not included in Library.thy are somehow in conflict
with other theories, or augment the context in ways that are better not
done by default (certain global syntax or type-class instantiations).
> It looks like code generation is the difference, but why?
I can't say anything specific, only point to the 2-3 FIXMEs in
Isabelle/bc82d25af543 in this respect (in src/HOL/ROOT and
When there is a oddity, and a reason not to import things, just don't do
it and make a clear statement about it in the changelog. The history is
the place to explain why things are done in a certain way at that point,
not the source. Otherwise the source would become overcrowded by history
rather quickly, and nobody could read it anymore.
Think of it like an wikipedia article: the actual text and the discussion
leading to the text are clearly separated.
More information about the isabelle-dev