Можно ли построить функцию более высокого порядка isAssociative
, которая принимает другую функцию с двумя аргументами и определяет, является ли эта функция ассоциативной?
Аналогичный вопрос, но и для других свойств, таких как коммутативность.
Если это невозможно, есть ли способ автоматизировать это на любом языке? Если есть решение Agda, Coq или Prolog, меня это интересует.
Я могу представить решение грубой силы, которое проверяет все возможные комбинации аргументов и никогда не завершается. Но «никогда не прекращается» — нежелательное свойство в этом контексте.