дальше полез и упёрся в то, что для пользовательских типов нельзя отношение эквивалентности (==) переопределить, и стал переправлять все свои определения со встроенного на своё отношение eq, попутно введя все нужные термины (бинарное отношение, рефлексивность, симметричность, транзитивность)