首页 > 解决方案 > 寻找反函数

问题描述

我想知道是否有一种系统/通用的方法可以在 Haskell 中找到反函数。

假设函数是双射的。喜欢:

map (+1) . map (\x -> x-1) == id
transpose . transpose == id

(有趣的是,fun 自己喜欢transpose并且reverse是逆函数。)我们可以手动找到这些函数的逆函数。

虽然函数不是双射的,但不能:

f = (*0)
sum

我还发现具有两个参数的函数可能是也可能不是双射。因为map, likemap (+1)是双射的,而map (*0)不是。

两个双射函数的组合也是双射的(仅考虑一个参数时):

g = transpose . map (map (+1))
h = map (map (\x->x-1)). transpose 
g . h == id

(对于h = f . g,如果我们可以找到f'and g',那么我们可以找到h' = g' . f'

那么如果我们限制在一个双射函数f :: a -> b,有没有一种系统的方法来找到f' :: b -> a一些双射函数的组合的反函数或反函数?

标签: functionhaskell

解决方案


推荐阅读