Interfacing a reasoner with heterogeneous self-controlling software