Можно ли использовать статические или зависимые типы, чтобы доказать, что функция идемпотентна?
Я безуспешно искал в Google и других местах в StackOverflow / StackExchange ответ. Самым близким, что я нашел, был этот разговор о Идрисе: https://groups.google.com/forum/#!topic/idris-lang/yp7vrspChRg
К сожалению, это обсуждение немного над моей головой.
Ответы:
Для определенных функций это так. Особенно, когда вы знаете функцию ;-)
Если вы подразумеваете под своим вопросом «существует ли алгоритм для автоматического решения, является ли произвольная функция идемпотентной или нет», ответ будет отрицательным из-за теорем, уже упомянутых в комментариях. Однако для определенных классов функций теоретически можно очень легко решить, является ли функция идемпотентной или нет. Например, если функция чистая (имеется в виду: без каких-либо побочных эффектов), и каждый знает, что она всегда возвращает значение за конечное время для любого заданного входа, тогда идемпотентность может быть определена простым испытанием, если
f(f(x))=f(x)
для любого возможного вводаx
к функции. Не то чтобы это было очень эффективно, это могло бы продолжаться до конца вселенной.Так что, если это не тот ответ, который вы искали, напишите лучший вопрос, в настоящее время неясно, что именно вы действительно ищете.
источник