A function name and pointer are generally duplicated references to the same information. You essentially have 2 primary keys. Now maybe it is done for speed, but otherwise is a sloppy or compromized theoretical arrangment.
except that, in both cases, you seem to want the language to guess in the absence of information
There is no need for "guessing" if the duplication is removed.