I'm studying three paradigms of computability theory: Godel's, Turing's, and von Neumann's. In the first two, it is given as a theorem that $f$ is a computable function iff its domain $S$ is decidable (i.e. its characteristic function is computable). My textbook, which was written by professors at my local university, states that this property does not hold in von Neumman's paradigm.
Regardless of the paradigms involved, the statement does not make sense to me. Take for example a Turing machine $M$ which computes a function $f : S \to L$. If some input $x \in S$ is given we can decide that $x \in S$ because the machine would halt. However, if $x \not\in S$ we would "wait forever"; this is, we could never truly decide that $x \not\in S$. Why would $S$ be computable iff it is the domain of a computable function then?
The discussion is a about a model of computation in which the program takes an input which is either a string of characters in some finite alphabet, or a natural number or a tuple of natural numbers. A run of the program leads to one of the following results
The function that the program computes is called partial recursive if all of the results above are permitted. Its domain is the set of all inputs on which it accepts.
If the program provably halts on all inputs, the function it computes is called a total recursive function. Its domain is the set of all inputs on which it accepts.
A subset $S$ of the input space (i.e. strings, etc.) is called recursive if there's a program that accepts for all inputs in $S$ (any optional output is ignored), rejects for all inputs not in $S$. Such a program always halts.
A subset $S$ of the input space is called recursively enumerable if there's a program that accepts for all inputs in $S$. For other inputs it either rejects or not halts.
Given a program that computes a partial recursive function, its domain is a recursively enumberable set. This is by definition, because the given program itself accepts for all inputs in its domain. The fact it may produce additional output (as a function) is ignored. If the input is not in its domain, it either rejects or not-halts.
Given a program that computes a total recursive function, its domain is a recursive set. Again, this is by definition. The given program satisfies the requirements for showing its domain is recursive. Any output when it accepts is ignored.
Now, say you have a program computing a partial recursive function and you know its domain $S$ is actually recursive, because you have a another program that always halts and accepts on $S$, rejects outside of $S$. Then you can make a third program that starts by running the second program to verify that the input is in $S$, and only after verifying the input is in $S$, runs the first program on the input. This third program always halts and produces the same output as the first program on an input in $S$.
Say you have a program computing a partial recursive function. You can modify it so that if the input is in its domain $S$ then it computes the same output and accepts, and if the input is not in its domain, it always not-halts. How? Just perform the same computation and if the program was going to reject, enter an infinite loop instead.
There are recursively enumerable sets that are not recursive. This is proved with the halting problem.