Similar Items: The Size-Change Termination Principle for Constructor Based Languages