Michael Shulman
Heyting 2-category



A 2-category is Heyting if it is coherent and each pullback functor f *:Sub(Y)Sub(X)f^*:Sub(Y)\to Sub(X) has a right adjoint f\forall_f.

As in the 1-categorical case, this also ensures that each Sub(X)Sub(X) is a Heyting algebra and that each f *f^* is a homomorphism of Heyting algebras. Moreover, the right adjoints f\forall_f satisfy the Beck-Chevalley condition for pullback squares, because the left adjoints f\exists_f do. This is just what is necessary for the internal interpretation of (finitary) first-order logic.


  • CatCat is Heyting.

  • A 1-category is Heyting as a 2-category iff it is Heyting as a 1-category.

  • A (0,1)-category is Heyting iff it is a Heyting algebra.

  • Any well-powered infinitary-coherent 2-category is Heyting, by the adjoint functor theorem for posets. In particular, any Grothendieck 2-topos is Heyting.

  • Unlike in the 1-categorical case, there seems no reason why a coherent 2-category with exponentials must be Heyting. It does, however have adjoints to pullback along fibrations and opfibrations, and in particular along product projections, which is enough for some uses of universal quantification in the internal logic.


Clearly if KK is Heyting, so are K coK^{co}, gpd(K)gpd(K), pos(K)pos(K), disc(K)disc(K), and Sub(1)Sub(1) (the Heyting algebra of subterminals).

Moreover, Heytingness is also preserved by fibrational slicing. First we show:


If KK is Heyting, then for any XX and any AOpf(X)A\in Opf(X), Sub Opf(X)(A)Sub_{Opf(X)}(A) is a coreflective sub-poset of Sub K(A)Sub_K(A).


As proven here, Sub Opf(X)(A)Sub_{Opf(X)}(A) is a full sub-poset of Sub K(A)Sub_K(A). Moreover, it is easy to see that a ff BAB\to A is in Sub Opf(X)(A)Sub_{Opf(X)}(A) precisely when

  1. BXB\to X is an opfibration and
  2. BAB\to A is a morphism of opfibrations.

In general, the first condition does not imply the second. It is also easy to check that these two conditions together are equivalent to saying that the composite

B× XX 2A× XX 2aAB\times_X X ^{\mathbf{2}} \to A\times_X X ^{\mathbf{2}} \overset{a}{\to} A

factors through BAB\to A, where aa is the action making AA into a fibration. Note that B× XX 2B\times_X X ^{\mathbf{2}} is alternately written as p *Bp^*B, where p:A× XX 2Ap:A\times_X X ^{\mathbf{2}} \to A is the projection onto the first factor. Therefore, BB is in Sub Opf(X)(A)Sub_{Opf(X)}(A) just when pa *BB\exists_p a^*B\le B, or equivalently when B ap *BB\le \forall_a p^*B.

We claim that B ap *BB\mapsto \forall_a p^* B coreflects Sub(A)Sub(A) into Sub Opf(X)(A)Sub_{Opf(X)}(A), and given the above, it suffices to verify that it is a comonad. First, let i:AA× XX 2i:A\to A\times_X X ^{\mathbf{2}} be the inclusion of identities; then ai1a i\cong 1 and pi1p i \cong 1, so we have

i *a *B= B a *B iB pa *B p iB=B. \begin{aligned} i^*a^*B =& B\\ a^*B \le& \forall_i B\\ \forall_p a^* B \le& \forall_p \forall_i B = B. \end{aligned}

This gives the counit of the comonad. The comultiplication is a little more involved. First note that we have a pullback square

A× XX 2× XX 2 q A× XX 2 a×1 a A× XX 2 p A\array{ A\times_X X ^{\mathbf{2}} \times_X X ^{\mathbf{2}} & \overset{q}{\to} & A\times_X X ^{\mathbf{2}} \\ ^{a\times 1}\downarrow && \downarrow^a\\ A\times_X X ^{\mathbf{2}} & \underset{p}{\to} & A}

where qq denotes projection onto the first two factors. Thus, by the Beck-Chevalley condition, a * p= q(a×1) *a^*\forall_p = \forall_q (a\times 1)^* and therefore

pa * pa *B= p q(a×1) *a *B= p q(1×m) *a *B\forall_p a^*\forall_p a^* B = \forall_p \forall_q (a\times 1)^* a^* B = \forall_p \forall_q (1\times m)^* a^* B

where m:X 2× XX 2X 2m:X ^{\mathbf{2}} \times_X X ^{\mathbf{2}} \to X^{\mathbf{2}} is the “composition” morphism.

Let us write X X^{\to\to} for X 2× XX 2X ^{\mathbf{2}} \times_X X ^{\mathbf{2}}, the object of composable arrows in XX, and write X X^{\overset{\nearrow}{\to}\to} for the power of XX with the category

\array{&& \bullet\\ & \nearrow\\ \bullet &\to & \bullet & \to &\bullet}

Let r:X X r:X^{\overset{\nearrow}{\to}\to} \to X^{\to\to} forget the “lonely” arrow, and let c:X X c:X^{\to\to} \to X^{\overset{\nearrow}{\to}\to} make the lonely arrow into the composite of the other two. Then rc1r c \cong 1, and moreover pqc1×mp' q' c\cong 1\times m, where pp' and qq' are pp and qq applied to the non-lonely arrows. Thus, we have

c *(q) *(p) *a *B= (1×m) *a *B (q) *(p) *a *B c(1×m) *a *B r(q) *(p) *a *B r c(1×m) *a *B r(q) *(p) *a *B (1×m) *a *B q *p * pa *B (1×m) *a *B pa *B p q(1×m) *a *B pa *B pa * pa *B.\begin{aligned} c^* (q')^* (p')^* a^* B =& (1\times m)^* a^* B\\ (q')^* (p')^* a^* B \le& \forall_c (1\times m)^* a^* B\\ \forall_r (q')^* (p')^* a^* B \le& \forall_r \forall_c (1\times m)^* a^* B\\ \forall_r (q')^* (p')^* a^* B \le& (1\times m)^* a^* B\\ q^* p^* \forall_p a^* B \le& (1\times m)^* a^* B\\ \forall_p a^* B \le& \forall_p \forall_q (1\times m)^* a^* B\\ \forall_p a^* B \le& \forall_p a^*\forall_p a^* B. \end{aligned}

as desired. (Here we have used another Beck-Chevalley condition to move rr past qq' and pp', turning them into pp and qq and it into pp.)


If KK is Heyting, so is each fibrational slice Opf(X)Opf(X) and Fib(X)Fib(X).


This follows from the adjoint lifting theorem for posets: for any f:ABf:A\to B in Opf(X)Opf(X) we have a commutative square

Sub Opf(X)(B) f * Sub Opf(X)(A) Sub K(B) f * Sub K(A)\array{Sub_{Opf(X)}(B) & \overset{f^*}{\to} & Sub_{Opf(X)}(A)\\ \downarrow && \downarrow\\ Sub_K(B)& \underset{f^*}{\to} & Sub_K(A)}

where the vertical arrows are comonadic (inclusions of coreflective sub-posets) and the bottom horizontal arrow has a right adjoint; hence so does the top horizontal arrow.


We may naturally say that a coherent 2-category KK is Boolean if each Sub(X)Sub(X) is a Boolean algebra. As usual, this implies that KK is Heyting; we have f=¬ f¬\forall_f = \neg \exists_f \neg.

Note that a subobject and its complement in Sub(X)Sub(X) need not be “disjoint” in the sense introduced here; only their pullback, not their comma object, need be initial. Note also that unlike in the 1-categorical case, Booleanness is not stable under slicing; this fails already in the (1,2)-category PosPos (though it holds in any (2,1)-category).

Last revised on December 20, 2009 at 06:52:14. See the history of this page for a list of all contributions to it.