Human reasoning has two sides, that could be called formal and material. Any reasoning applicable to the real world necessarily involves the “material” side that is concerned with actual meaning “content”. It may also involve the “formal” side, which aims to express reasoning in terms of mechanically repeatable *operations* that are completely agnostic to the actual meanings they are used to operate on. Reasoning in some abstract contexts may rely entirely on the formal side.

Aristotle is usually credited with inventing formal logic, but he paid a lot of attention to the material side as well. In the Latin middle ages both sides were recognized, but the formal side was generally emphasized.

Formal *mathematical* logic underwent an immense development in the 20th century, somewhat like the earlier success story of mathematical physics. The syntactic devices of mathematical logic seemed so powerful that its rise led to a great neglect of the material, *interpretive* side of logic. Husserl was one of the few 20th century authors who questioned this from the start. More recently, Brandom has argued that Kant and Hegel were both fundamentally concerned with the material, interpretive side of logic, and that this is what Kant meant by “transcendental” logic (and what Hegel meant by “dialectic”).

Generally when I mention interpretation here, I have the material side in mind, but there is also such a thing as *formal interpretation*. Formal interpretation or “evaluation” of expressions in terms of other expressions is the most fundamental thing that interpreters and compilers for programming languages do. As with material interpretation, formal interpretation makes meanings explicit by expressing them in terms of more elementary distinctions and entailments, but it uses *purely syntactic substitution and rewriting* to do so.

Material interpretation can always potentially go on indefinitely, explaining real-world meanings by relating them to other meanings, and those in terms of others, and so on. In practice, we always cut it short at some point, once we achieve a relatively stable network of dependencies.

Formal interpretation on the other hand is usually engineered to be *decidable*, so that it actually does reach an end at some point. The fact that it reaches an end is closely related to the fact that precise formal models are always in some sense only *approximations* of a determination of reality that is actually open-ended. Formal models are a sort of syntactic reification of open-ended material interpretation. We may think we have taken them as far as they can go, but in real life it is always possible that some new case will come up that requires new detail in the model.

We also use a kind of formal interpretation alongside material interpretation in our spontaneous understanding of natural language. Natural language *syntax* helps us understand natural language *meaning*. It provides cues for how different clauses are intended to relate to one another. Is what is meant in this clause an exception? A consequence? A presupposition? A fact? A recommendation? Something being criticized? (See also Formal and Informal Language.)