According to the manual the `public`

predicate directive (SWI-Prolog -- Manual) “has no semantics.” I’m not sure that’s really the case because whenever I reload a module containing user defined arithmetic functions I get a slew of warnings like:

```
Warning: /Users/ ... /functionalarithmetic/dot_arithmetic.pl:145:
Warning: Local definition of user:fill/3 overrides weak import from dot_arithmetic
```

one for each user defined arithmetic function. Each function predicate, e.g., `fill/3`

is exported by the module.

In any of my testing, these warnings don’t seem to have any material impact. They seem to be caused when the `arithmetic_function`

directive is expanded causing a `:- public(Pred).`

to be executed. As a test, I’ve removed this directive from the expansion and the warnings disappear and no ill effects have yet to be noticed.

So what does this directive actually do and will removing it from the expansion of `arithmetic_function`

have any ill effects.