CD
у нас есть концепт и мы хотим записать требование коммутативности сложения
делаем операцию metalift которая переходит от типа к символьным аргументам и что-то вроде
metalift(a)::symbol<0>() + metalift(b)::symbol<1>() == metalift(b)::symbol<1>() + metalift(a)::symbol<0>()