Idea 1) We’ve already seen that we can change the definition by relaxing one requirement (taking every element in the domain somewhere in the codomain), so now the natural thing to do would be to relax the other requirement: taking each element in the domain to only one element in the codomain. We could, for example, take each element in the domain to a pair of elements in the codomain, as follows: f(a)=(b, c), where “a” is an element in A and “b” and “c” are both elements in B (and the function is of course from A to B). We could obviously do this for pairs, triples, and quadruples (and so on) as well. We could even do this without specifying “how many” elements in the codomain are assigned to each element in the domain, so that some elements might be sent to pairs, others to triples, and others to 10-tuples. In other words, we could just send an element in A to some subset of B. This is actually a relatively important definition, and it might make an appearance in later lessons.
Let us suppose that we’ve only relaxed this second requirement (i.e., an element in A goes to a whole subset in B, but it’s still the case that every element in A goes somewhere), and let’s call something that does this a relation (as opposed to a function). Then we could define “special cases” of these relations as follows. Let’s call a relation that sends each element in A to a 2-element subset in B a 2-relation. Let’s then similarly define 3-relations, 4-relations, and so on. Let’s now call a relation that sends no elements in A to a 2-element subset a not-2-relation. Then it is clear that a 3-relation is also a not-2-relation. In fact, a 3-relation will also be a not-N-relation for any N as long as N doesn’t equal 3. It is also clear that our original definition of a function can be viewed in these terms as a 1-relation, because it sends every element in A to exactly one element in B. Within all 1-relations, then, we can define injectivity, surjectivity, and bijectivity just as we did before!
We could, in fact, define surjectivity for relations in a similar way as we did for functions, by saying that a relation is surjective if every element in the codomain is “hit” by the relation. We then have a couple of choices for defining a sort of “injectivity”. We could, for example, require that an injective relation has no two elements in the domain sharing any of their associated elements in the codomain, but we could also require that an injective relation has no two elements in the domain sharing all of their associated elements in the codomain. These two definitions give different results for what we call an injective relation, and both reduce to the usual definition for functions when we restrict ourselves to looking only at “1-relations”. Since both of these definitions share a kind of “injective” quality, the choice of which definition to make is (as always) ours.
We could also, of course, relax both requirements at once, and allow for relations that don’t take every element in their domains somewhere. Then, our original definition of a function will be an even more special case of this definition.
Idea 2) Well, there are a few ideas in “Idea 1)”, so I’ll end here.
This should hopefully help give you the sense of just how many definitions are possible to make, and how all of them can be studied and developed. It is then (part of) a mathematicians job to find precisely which definitions are the best to make. This should also hopefully give you a sense of how we go about building our mathematical structures. Mathematicians are architects of logic, constantly searching for the most useful, most interesting, and/or most beautiful constructs to build. Having done this exercise, you’ve now created your very own structures!