An investigation of some theoretical aspects of reversible computing