The logical name is the name used to register tables/columns for lookup.
The implicit name is the name determined when one is not explicitly specified.
The physical name is the name we ultimately use with the database.
Implicit and physical naming should be controllable via pluggable "naming strategies". Logical name probably should not be pluggable as it is an internal implementation detail (more or less a Map key) and things will break down if this is not done properly and consistently on both sides.