一个从集合 A 到集合 B 的函数 f(记作 “f: A -> B”)是一个有序对的集合,满足:
- 每个有序对的第一项来自 A。
- 每个有序对的第二项来自 B。
- 对于 A 中的每个元素,它恰好是其中一个有序对的第一项。
换句话说,对于各位程序员来说,一个函数由它所有输入-输出对构成的集合来定义,并且必须是确定性的。
如果一个函数没有任何两个不同的输入映射到相同的输出,它就是单射(injective)的。 例如,f: int -> int 定义为 f(x) = x^2 就不是单射,因为 f(1) = f(-1)。
函数 f: A -> B 拥有左逆(left inverse),是指存在一个函数 g: B -> A,使得对 A 中所有 a,都有 g(f(a)) = a。 换句话说,f 的左逆能够"撤销" f。
书中的第一道证明练习题是:证明一个函数是单射的当且仅当它有左逆。
这个命题是错误的。设 A = {},B = {1}。 令 f: A -> B = {}。 函数 f 确实是一个函数,因为它满足上面定义中列出的三个条件。 函数 f 是单射的,因为"没有两个不同的输入映射到相同的输出"平凡地(vacuously)成立。 然而,f 并没有左逆,因为根本不存在从 B 到 A 的函数。