&gt; For instance, in higher-order set theory a (very strong) form of the axiom of choice asserts that there is a function &quot;epsilon : set -&gt; set&quot;, such that &quot;epsilon x \in x&quot; for x not empty<p>Such higher-order statements are easily expressible in TLA+ as long as you specify the domain of the sets on which you operate, which you should always be able to do when specifying real programs, even higher-order programs. Here it is in TLA+:<p><pre><code>     ∃ epsilon ∈ [SUBSET S → S] : ∀x ∈ SUBSET S : epsilon[x] ∈ x
</code></pre>
You just need to specify S (or parameterize it).<p>&gt; Saying &quot;I&#x27;ll just use ZFC&quot; is exactly the same as a programmer exclaiming &quot;I&#x27;ll just use COBOL&quot;.<p>I don&#x27;t think it&#x27;s the same at all, considering that 99.9% of math is done with &quot;just ZFC&quot;. I don&#x27;t doubt that type theory may let us explore other logics, but as a practical way for specifying real programs <i>today</i> I fail to see a case in favor of dependent types. Sure, I believe dependent types may let you define all sorts of modal logic, but in practice, temporal logic has proven a good way to specify algorithms. So I think that a more suitable analogy would be, &quot;Why confine your thinking to von-Neumann machines when you can use a meta-logic to specify programs for Quantum computers and other computational models&quot;. In that case, &quot;I&#x27;ll just use a von-Neumann machine&quot; seems like a very reasonable choice for any work that isn&#x27;t theoretical.