You can find it in many places, as it is defined for several types.
In numeric_std, it is defined for unsigned and signed types.
In std.standard it is defined for integers.
In VHDL 2008, it is defined in the fixed_pkg for ufixed and sfixed types, and in numeric_std_signed/unsigned it is defined for std_logic_vector type.
But that wont really tell you how it is implemented. Arithmatic is usually treated as an abstracted function, so it wont map directly to the hardware that is implemented. The best example is multiply where the user has several options on how it is implemented (logic, dsp etc).