Final answer:
The function dropping the first bit is one-to-one but not onto, the function replacing the first bit by 1 is neither, the function reversing bits is both, and the function appending the first bit at the end is one-to-one but not onto.
Step-by-step explanation:
For each of the functions given, we need to determine whether the function is onto, one-to-one, neither, or both:
One-to-one: A function f is called one-to-one, or injective, if every element of the function's codomain is the image of at most one element of its domain.
Onto: A function f is called onto, or surjective, if for every element in the function's codomain there is a preimage in the domain.
For example, consider the function f:{0,1}4→{0,1}3 where f drops the first bit. This function is one-to-one because each element of the domain maps to a unique element in the codomain. However, it is not onto since not all possible 3-bit strings can be the output (e.g. '111').
Now, look at f:{0,1}3→{0,1}3 where f replaces the first bit by 1. This function is not one-to-one as multiple inputs could yield the same output (f(001) = f(101) = 101). It is also not onto as '000' cannot be an output.
The function f:{0,1}3→{0,1}3, which reverses the string, is both one-to-one and onto, since it creates a unique mirror image for each 3-bit string, and every possible 3-bit string can be obtained.
The function f:{0,1}3→{0,1}4, which appends an extra copy of the first bit to the end, is one-to-one as each input maps to a unique 4-bit string, but it is not onto as not all 4-bit strings can be outputs (e.g., '0000' can't be an output).