EDIT: this problem might require more circumstances to trigger.

I'd like to override an existing notation for an existing scope, but I'm not sure that's possible ~~and this might have gotten worse in 8.11.~~

AFAICT, it's not enough to do

```
(* Overrider module *)
Require Import notation_source.
(* Override notation *)
```

because clients of `Overrider`

might still get the original notation, unless they import `Overrider`

last.

Are the side effects of the original module re-executed at every transitive import? That might make sense if somebody imports `notation_source`

directly, but I see `notation_source`

winning even in source files that never mention it.

I'm not sure I see relevant docs here:

https://coq.inria.fr/refman/proof-engine/vernacular-commands.html#coq:cmd.Require-Import

https://coq.inria.fr/refman/language/core/modules.html#coq:cmd.Import

https://coq.inria.fr/refman/user-extensions/syntax-extensions.html#coq:cmd.Notation

are you using Export somewhere?

probably yes — there are ~307 occurrences of `Export`

in this codebase

uuuh, there is a chain of `Export`

s leading to `notation_source`

, which could explain this on its own :-|.

I guess that's what you meant @Gaëtan Gilbert ? Thanks a lot!

I'll look into it

yup, there is no transitive import without export

and crucially, no superglobal effects are involved

Last updated: Jan 28 2023 at 06:30 UTC