I'm using Isabelle 2019 and got some troubles regarding locals:
I'm constructing a locale with an abbrevation, e.g.:
interpretation myInstance : myLocale "abbreviation"
I'm using this with a function from the locale, e.g.:
myInstance.getter myinput
But apply simp
now "simplifies" the goal to something like this
myLocale.getter "abbreviation" myinput
How can I avoid simp to do this? (I'm pretty sure, this is the reason, why my code takes ages to process)...
Best
This is a known issue and there is no perfect solution. Some partial solutions:
live with it/avoid using something that can be simplified. Use a definition instead of an abbreviation (and eventually mark the definition as simp to automatically unfold it).
add a congruence rule (as mentioned): ⋀a b. myLocale.getter a b == myLocale.getter "abbreviation" myinput a b
. It does not always work.
Define a new constant and lift all theorems to that constant. This is annoying (and can make sledgehammer less powerful).