Actually, this isn't equivalent to the halting problem. If you can guarentee that there are no other threads executing, it's possible to guarentee that the code you write to discover the available methods doesn't modify $obj in any way, and so you can know what methods are available
. The problem is that that information is only good until you execute some code that might change $obj. It's also impossible to compensate for AUTOLOAD.