My opinion is yes.
If you infer contracts from the implementation any change to your implementation may change the contract. That would be like releasing an interface in version 1.0.0 and making a breaking change to it in 1.0.1 due to a simple bug fix. When you ensure to me that X = x
and I am a user of your code I hope you keep your promise. Keep in mind that contract assemblies can also be distributed alongside libraries within NuGet packages for example.