Конечно, нет: если лямбда не является инъективной функцией , вы не можете ее инвертировать.Пример: вы не можете инвертировать лямбда-отображение x
в x*x
, поскольку знак оригинала x
потерян.
Если оставить в стороне инъективность, существуют функции, которые в вычислительном отношении очень сложны для инвертирования.Рассмотрим, например, восстановление исходного значения из хеша md5.(Для лямбда-вычисления хеша md5, инвертированная функция должна сломать md5 в криптологическом смысле!)
Редактировать:
действительно, мы можем теоретически сделать лямбда-преобразование обратимым, если мы ограничим выражения, которые можно использовать там,Например, если лямбда является линейной функцией от 1 аргумента, мы можем легко ее инвертировать.Если это полином степени> 4, у нас есть проблема с алгебраически точным решением.
Конечно, мы могли бы воздержаться от точного решения и просто инвертировать функцию численно .Это возможно при использовании любого метода численного решения уравнения lambda(x) = value
(простейшим будет бинарный поиск).