Oh,  I see what you're doing.  You copied the code from the "CrispImplicator", not the default implicator.

The Crisp one assumes that truth values actually matter. The other callbacks actually look at truth values, and do an accept/reject based on those -- this is implemented in CrispLogicPMCB.   Here' "Crisp" means it assumes all TV's are zero or 1, and uses crisp boolean logic.  Thus, at the end, when its done, it explicitly sets a crisp TV for the final generated atom.

You almost surely don't want this -- its gonna clobber the TV on whatever it is you are doing.