Hi Andreas,

The failure happens while reading the locale expression, which is a sequence of locale instances:

  A s + B t + C u + ...

When reading the locale expression, we aim at achieving two conflicting goals:
- Type inference over the entire expression
- Syntax declarations of an instance are available when parsing the next instance. That is, syntax from A s is available in t, and so on.

This is achieved by incrementally interleaved phases of parsing, type inference and declaration activation. I suspect that when processing the example, there is a point where the equality of the definitions has not yet been established, and this is why the example fails.

I tend to always use qualifiers, which helps avoid the problem.

Clemens


Quoting Andreas Lochbihler <andreas.lochbih...@inf.ethz.ch>:

Hi Amine,

let's look at what happens:

A defines the constant local.fpower as "A.fpower f"
AB inherits it from A, i.e., we have "local.fpower == A.fpower f" (1)
B < A "d g" produces "local.fpower == A.fpower (d g)"
AB < B "d f" inherits this as "local.fpower == A.fpower (d (d f))" (2)

As the locale infrastructure does not know about "d (d f) = f", it considers two different declarations of local.fpower from (1) and (2) as not being the same and therefore tries to declare both of them - which the local context infrastructure rejects.

You can either use prefixes to disambiguate local.fpower like in sublocale AB < b!: B "d f"
This gives you (1) and "local.b.fpower == A.fpower (d (d f))".
Or, tell the locale infrastructure to rewrite "d (d f) = f":

sublocale AB < B "d f" where "d (d f) == f"

The second approach only works if you order the sublocale declarations like in your second case. I do not know why, but I believe it has technical reasons; Clemens might be able to tell you more.

Andreas

On 01/31/2013 02:56 PM, Amine Chaieb wrote:
Thanks Andreas. Does this mean that this sublocale scenario is
prohibited? And if so, is it due to technical reasons or is there a
fundamental problem here?

Amine.

On 01/31/2013 02:04 PM, Andreas Lochbihler wrote:
Hi Amine,

the error message in the second case is only delayed: You get it, once
you open the AB context again (context AB begin). In the first case,
it shows up immediately, because the sublocale command already
constructs the context AB enriched with B.

Best,
Andreas

_______________________________________________
isabelle-dev mailing list
isabelle-...@in.tum.de
https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev



_______________________________________________
isabelle-dev mailing list
isabelle-...@in.tum.de
https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev

Reply via email to