Это зависит от того, что именно вы подразумеваете под «равенством выражения функции».
Эти функции будут заканчиваться как байт-код, поэтому я мог бы, например, вывести байт-код, соответствующий каждой функции, в байт [], а затем сравнить два массива байт-кода.
Однако есть много разных способов написания семантически эквивалентных методов, которые не будут иметь одинакового представления в байт-коде.
В общем, невозможно сказать, что делает кусок кода без его запуска. Таким образом, невозможно сказать, эквивалентны ли два бита кода, не запустив их оба на всех возможных входах.
Это, по крайней мере, так плохо, вычислительно говоря, как проблема остановки, и, возможно, хуже.
Проблема остановки неразрешима, так что общий ответ здесь определенно - нет (и не только для Clojure, но и для каждого языка программирования).