Reversible
logic imposes many design constraints that need to be either ensured for
optimized for implementing any particular Boolean functions.
Firstly,
in reversible logic circuits the number of inputs must be equal to the outputs.
Secondly,
for each input pattern there must be a unique output pattern.
Thirdly,
each output will be used only once, that is no fan out is allowed.
Finally,
the resulting circuits must be acyclic.