isabelle


Organization of `thy` files that come with Isabelle


I'm relatively new to Isabelle and I'm puzzled by the organization of the thy files that come with Isabelle.
Why are some files that pertaing to the same body of knowledge in ~~src/HOL, whereas others are in ~~src/HOL/<theoryname>?
E.g. Why is GCD is in ~~src/HOL and not in ~~src/HOL/Number_Theory?
Similar question: What is the difference between the ex folder and the Isar_Examples folder in ~~src/HOL? Wouldn't it have been more natural to merge them?
Also, what is the document folder from ~~src/HOL for?
Isabelle is almost 30 years old and has changed considerably in that time. The GCD.thy file, for instance, was created 12 years ago and only provided the constant gcd :: nat ⇒ nat ⇒ nat. Back then, I don't think the Number_Theory directory even existed. In fact, HOL/Number_Theory is also something of a misnomer nowadays: I reorganised much of it together with Florian Haftmann within the last few years and now things like GCD and primality are defined not only on numbers, but on any factorial ring. A better categorisation would be HOL/Algebra, but that is already taken by another formalisation that has a very different (more abstract) flavour than what we did.
So, you see, much of the organisation of the distribution is mostly a historic accident. Occasionally, people will generalise/clean up/reorganise things, but there are oddly-placed theories due to such things sometimes.
Just to mention a few sub-directories:
Very general stuff is in the main directory of HOL. (new files are rarely added there, I would say)
Things concerning prime numbers and related concepts are in HOL/Number_Theory
Abstract algebra is in HOL/Algebra.
Advanced analysis and measure theory is in HOL/Analysis.
Probability theory is in HOL/Probability
More specialised things of general interest are in HOL/Library
HOL/Decision_Procs contains some decision procedures for specialised classes of properties (e.g. approximating real functions, linear real arithmetic) that are essentially ‘press button to prove theorem’.
HOL/Word contains facts about finite-size integers (i.e. with fixed bit length)
HOL/ex contains all kind of stuff. I think this directory was the place to put all kinds of small, more specialised developments before the AFP existed.
Isar_Examples, I think, is essentially Makarius Wenzel's collection of theories to demonstrate the capabilities of the structured proof language Isar, i.e. typical patterns and case studies in how to write nicely-structured Isar proofs.
The ROOT file of a directory specifies sessions, which are collections of theories to be ‘bundled up’. For instance, the HOL image is the one that Isabelle loads by default on startup so that you don't have to wait for several minutes until all the basic theories are re-processed. If you e.g. use stuff from HOL/Analysis, it is a good idea to build the HOL-Analysis session image and load that with isabelle jedit -l HOL-Analysis so that you don't have to wait for all of the theories to be built every time you start up Isabelle.
The document directory works in combination with the ROOT file. It contains some LaTeX template into which Isabelle's LaTeX output is embedded, and from that, some PDFs (the proof outline and proof document) are generated. Personally, I don't find these terribly useful (in my opinion, it's easier to just look at the code directly in Isabelle/jEdit).
More information about document preparation and sessions can be found in the Isabelle systems manual.

Related Links

Trouble with Int Theory in Isabelle/HOL
How do I do simple multithreading in Isabelle ML?
Isabelle: Proof on difference between 2 lists
Printing out / showing detailed steps of proof methods (like simp) in a proof in isabelle
Defining disjoint union of different types in Isabelle and more
Case names for locale interpretation
“invalid map function” when defining a corecursive tree
Trying to generalize a bit vector that uses typedef, bool list, and nat length
Factoring out a lemma premise as a definition causes failure in proof method (auto) application in isabelle
How do I convert “thm conjI” to an ASCII string I can save to a file?
Express that a function is constant on a set
What's the difference between the empty sort, 'a::{}, and a sort of “type”, 'a::type
How can I pass a ML value as an argument to an outer syntax command?
How to prove the reversion of a doubling function equals the doubling of a reversion function in Isabelle?
Giving a list a partial order in Isabelle/HOLCF
Calculating transitive closures

Categories

HOME
blogger
debugging
vmware
cplex
at-command
paw-app
leon
cakephp-2.5
blueprintjs
in-app-purchase
slick-slider
communication
floating-action-button
numeral.js
php-7.1
visual-studio-2005
ups
libtiff
footer
google-static-maps
crystal-reports-2008
kryo
cloudhub
graphicsmagick
jndi
claims-based-identity
java-7
opennlp
sparse-matrix
wpfdatagrid
virtualdub
nouislider
http-status-code-503
code-contracts
caret
hybridauth
xmlreader
google-api-nodejs-client
mapdb
host
git-merge
web-mining
starteam
vapor
squib
ruby-on-rails-3.1
no-www
flashair
executenonquery
network-flow
theming
jquery-validate
gabor-filter
brightcove
lift-json
libusb-win32
flow-control
linode
database-optimization
nsfilemanager
clang-static-analyzer
moveit
sdf
dlna
xpath-1.0
javax.sound.midi
vhd
rake-task
qpainter
asp.net-dynamic-data
qcodo
dml
didselectrowatindexpath
ember-charts
html5-notifications
easy-install
back-stack
mylyn
jelly
specification-pattern
anonymous-methods
dice
cascalog
semantic-diff
cufon
php-parser
gcj
genshi
appendto
suppress
ti-dsp
adrotator
grid-system

Resources

Database Users
RDBMS discuss
Database Dev&Adm
javascript
java
csharp
php
android
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App