The common way is to make a declaration, such as:
function "=" (L, R : Amb) return Boolean;
and place that directly beneath the type declaration for Amb. You’ll need to do that for all of the functions with Amb as a paramter. The problem is the first time you show a full body of a potentially primitive operation, you can no longer add primitive operations to the type. This is why Ada generally likes to have type declarations and subprogram declarations in spec files and implementations in body files.
In order to use a type in a function, it has to be locked down with no more changes, this includes no longer adding more primitive operations (which would change the function table of the object in the functions).