I've been following the first few chapters of Yuri Manin's "A Course in Mathematical Logic for Mathematicians," and as an undergraduate who has only had basic logic and naïve set theory, the way he explained a few of the topics rubbed me the wrong way - specifically, the definitions of the ordinals, and the definition of an interpretation of a language (in model theory). First of all, in constructing the ordinals, we had to allow for infinite sets, and Manin uses naïve sets in doing so; from what I've read, it seems that in order to allow for infinite sets, we would need an axiomatic set theory such as ZFC or Neumann-Bernays-Goedel to avoid paradoxes; but ordinals are used in the rank of the von Neumann Universe, which is used to interpret either of those two systems. How is it that we can do this without compromising our system? Secondly, the notion of an interpretation involves a mapping from a language L to a set M; but from all accounts I've read, M is again allowed to be infinite. How can we know how to safely (i.e. axiomatically) handle infinite sets without an axiomatic system? I suspect the important possibilities I may be overlooking are that (a) we're ultimately using finite sets at the core to construct these things and (b) this all ties into computability quite elegantly somehow; but I'd like some clarification on this either way. Specifically, I'd REALLY appreciate a short rundown of how logic is justified - an "epistemological timeline," if you will, where logical assumptions are noted down one after another in their order of precedence, like "languages exist and we use finite sets to characterize them; languages lead to axiomatic set theory after assuming sets exist and obey certain axioms," etc., or perhaps "Turing machines exist; define the class of computable functions, then define set theory, and so on." Thanks. This has been bugging me for weeks.