isabelle


Error message in Isabelle/HOL


When applying the wrong tactic or the wrong deduction rule, the error message is usually too general:
Failed to apply initial proof method⌂
I am using Isabelle to teach natural deduction. When Isabelle complains, some students change the rule/tactic arbitrary without reflecting on the possible causes of the error. A more detailed error message could be part of the learning process of Isabelle, I think.
How to make those error messages student friendly? Does that require editing the source code or can it be managed by defining more expressive tactics of natural deduction?
Tactics in Isabelle can be thought of as chainable non-deterministic transformations of the goal state. That means that the question of what specifically caused a tactic to fail is difficult to answer in general, and there is no mechanism to track such information in Isabelle's tactic system. However, one could relatively easily modify existing tactics such that they can optionally output some tracing information.
However, I have no idea what this information should be. There are simple tactics such as rule where the reason why applying it fails is always that the rule that it is given cannot be unified with the goal (and possibly chained facts), and there are similarly simple tactics like intro, drule, frule, erule, and elim. Such unification-related problems can be debugged quite well sometimes using declare [[unify_trace_failure]], which prints some tracing information every time a unification fails.
With simp and auto, the situation is much less clear because of how many different things these methods can do. Essentially, when the proof method could not be applied at all, it means that ‘none of the things that simp and auto can do worked for this goal’. For simp, this includes simplification, splitting, linear arithmetic, and probably a lot more things that I forgot. For auto, it additionally includes classical reasoning with a certain search depth. One cannot really say easily what specific thing went wrong when these methods fail.
Some specialised tactics do print more specific error messages if something goes wrong, e.g. sat and smt sometimes print a special error message when they have found a counterexample to the goal, but I cannot even imagine what more helpful output for something like simp or auto would look like. If you have an idea, please do tell me.
I think this problem cannot really be solved with error messages; one must simply get to know the system and the tactics one uses better and understand what they do and when they fail. Perhaps it would be good to have a kind of catalogue of commonly-used tactics that mentions these things.

Related Links

type_synonym vs consts in Isabelle definition
Organizing constraints in isabelle in order to model a system
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?

Categories

HOME
activiti
azure-data-factory
office365api
vmware
setup-deployment
packages
jxls
in-app-purchase
upload
autotools
esper
node-pdfkit
u-sql
windows-phone-7
try-catch
footer
serilog
invantive-sql
swingx
custom-wordpress-pages
riot.js
accessor
vlsi
cas
facet
internet-explorer-9
windows-error-reporting
file-rename
gammu
email-templates
dynamic-reports
vao
total-commander
babel-core
user-accounts
osx-mavericks
jlink
elgg
namecoin
memory-alignment
spring-cache
minimization
blacklist
specrun
migradoc
pintos
passport-google-oauth
gridpane
libpng
file-writing
thrust
mathematica-frontend
plottable.js
actionbardrawertoggle
pickadate
two-factor-authentication
energy
uid
qdialog
arcanist
iiviewdeckcontroller
remobjects
sorl-thumbnail
preferences
elliptic-curve
oracle-warehouse-builder
cdc
coverflow
ruby-datamapper
eclipse-memory-analyzer
html4
spring-validator
android-hardware
cisco-jtapi
qt-jambi
zpt
tomcat-valve
android-sdk-2.1
mongomapper
modelstate
bespin
web-architecture
sef
privilege
gacutil
ugc
3gp

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