From: Joachim Breitner <mail@joachim-breitner.de>
Dear list,
my understanding of locales is still limited, but this seems fishy to me
(and if it is not I’m looking forward to improve my understanding of
locales).
In this theory, the line "term b.foo" says
Undeclared constant: "b.foo"
which I find surprising:
theory A imports Main begin
locale A =
fixes b :: bool
begin
definition "foo = b"
end
interpretation a: A True.
term a.foo
interpretation b: A True.
term b.foo
end
It must be related to the locale parameter, as it works for
interpretation b: A False.
and does not work if I remove the fixes from the definition of A.
Thanks,
Joachim
signature.asc
From: Andreas Lochbihler <andreas.lochbihler@inf.ethz.ch>
Hi Joachim,
You have stumbled across Clemens' round-up algorithm for locales described in [1].
Interpretations omits to generate declarations from a locale and parameter instantiation P
if the context already contains an interpretation with parameter instantiations Q that
subsume P. Subsumption means that there is a substitution S of free variables such that P
= S(Q). As the round-up algorithm ignores name prefixes, your second interpretation of A
does not register the constant foo under b.foo, because a.foo is already available.
The same happens if you generalise the first interpretation:
interpretation a!: A b for b .
term a.foo
interpretation b!: A True .
term b.foo (* b.foo does not exist *)
It does not happen if you reverse the order, because the first interpretation no longer
subsumes the second.
interpretation a!: A True .
term a.foo
interpretation b!: A b for b .
term b .foo
A related discussion has been on this list already in February 2013:
https://lists.cam.ac.uk/mailman/htdig/cl-isabelle-users/2013-February/msg00076.html
Best,
Andreas
[1] Clemens Ballarin: Locales: A Module System for Mathematical Theories. Journal of
Automated Reasoning, 2013. http://link.springer.com/article/10.1007%2Fs10817-013-9284-7
Last updated: Nov 21 2024 at 12:39 UTC