<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/forest/default.xsl"?>
<fr:tree xmlns:fr="http://www.forester-notes.org" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:xml="http://www.w3.org/XML/1998/namespace" root="true" base-url="/forest/">
  <fr:frontmatter>
    <fr:authors>
      <fr:contributor>
        <fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link>
      </fr:contributor>
    </fr:authors>
    <fr:date>
      <fr:year>2024</fr:year>
      <fr:month>5</fr:month>
      <fr:day>5</fr:day>
    </fr:date>
    <fr:date>
      <fr:year>2025</fr:year>
      <fr:month>9</fr:month>
      <fr:day>27</fr:day>
    </fr:date>
    <fr:uri>https://hejohns.github.io/forest/index/</fr:uri>
    <fr:display-uri>index</fr:display-uri>
    <fr:route>/forest/index/</fr:route>
    <fr:title text="Johnson He">Johnson He</fr:title>
    <fr:meta name="author">false</fr:meta>
  </fr:frontmatter>
  <fr:mainmatter>
    <fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>10</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hejohns-000O/</fr:uri><fr:display-uri>hejohns-000O</fr:display-uri><fr:route>/forest/hejohns-000O/</fr:route><fr:title text="About Me">About Me</fr:title></fr:frontmatter><fr:mainmatter><html:p>
    I am a PhD student in Computer Science at Indiana University.
    My advisor is <fr:link href="/forest/angiuli/" title="Carlo Angiuli" uri="https://hejohns.github.io/forest/angiuli/" display-uri="angiuli" type="local">Carlo Angiuli</fr:link>.
    I'm interested in logic and related areas of computer science, particularly
    programming languages.
</html:p><html:p>
    This is my <fr:link href="https://www.forester-notes.org/" type="external">forest</fr:link>.
</html:p><html:ul><html:li>
        email: 
    
    
        
        <html:figure><fr:resource hash="f83c75a9d6ef70094cc93da937116500"><fr:resource-content><html:img src="/forest/f83c75a9d6ef70094cc93da937116500.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[hejo@iu.edu]]></fr:resource-source></fr:resource></html:figure></html:li>
    <html:li>
        photo:
        <html:p><html:img src="/forest/bafkrmidnsmym7ovopdtdistedzjytkiqhocv3ef2qwy3yle4gj22ugoogu.jpeg" width="150" height="150" /></html:p></html:li></html:ul></fr:mainmatter></fr:tree>
    <html:p>
        For more information about me, see <fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link>.
    </html:p>
<fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>5</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:title text="Notes">Notes</fr:title></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>11</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hejohns-000V/</fr:uri><fr:display-uri>hejohns-000V</fr:display-uri><fr:route>/forest/hejohns-000V/</fr:route><fr:title text="ACL permissions">ACL permissions</fr:title><fr:taxon>Exposition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    I thought I needed (extended) ACL permissions earlier (in the end, it was a
    different problem), and needed to brush up on how they work.
    <fr:link href="/forest/Grunbacher-2003/" title="POSIX Access Control Lists on Linux" uri="https://hejohns.github.io/forest/Grunbacher-2003/" display-uri="Grunbacher-2003" type="local">POSIX Access Control Lists on Linux</fr:link> has a nice description of ACL and how it interacts with
    traditional owner-group-other 3-3-3 permissions.
</html:p><html:p>
    I was surprised that named user ACL entries "are assigned to the <html:em>group
    class</html:em>" (as well as named group entries and the owning group entry).
    Naïvely, I would've assumed they'd be in the user class, but it looks like
    the user class is just the owning user entry.
    I'm not yet convinced of a fundamental design flaw with the naïve
    semantics-- and having a user mask-- although of course it would violate
    the Unix ownership model of having a unique owning user and group.
    Should people expect that <html:code>chmod 700</html:code> means you're the <html:em>only</html:em> user
    than can access the file?
</html:p><html:p>
    Maybe the use-case seems silly, but I wanted two users to share a directory
    and all contained files and subdirectories (hereditarily, like setgid).
    Ie, I wanted truly group ownership.
    This has to have a canonical solution?
    It seems like the obvious closest solution is to create a group for the two
    users and setgid the directory so everything hereditarily is owned by the
    group.
    But the "one-true-owner" (not a quote) semantics means that you
    fundamentally can't get this to work, and allows the owner to <html:code>chmod
    g-</html:code> (reduce the group permissions relative to the "true" owner), leaving
    the non-true-owner with lower permissions.
    No fiddling with default ACLs can prevent this.
</html:p><html:p>
    For truly group ownership, both users should have the <html:em>same</html:em> view. More
    specifically, they should have the same access, or else one user can
    obliviously proceed happily while the other is denied permission.  In my
    case earlier,
    <fr:link href="https://metacpan.org/pod/ExtUtils::MakeMaker" type="external">ExtUtils::MakeMaker</fr:link>
    <html:code>chmod 755</html:code>'d the build directory, so as the "true" owner, I could
    <html:code>rwx</html:code>, but the other user could only <html:code>r-x</html:code>, causing <html:code>make</html:code>
    and <html:code>make clean</html:code> to error part-way, leaving them stuck.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>20</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hejohns-000T/</fr:uri><fr:display-uri>hejohns-000T</fr:display-uri><fr:route>/forest/hejohns-000T/</fr:route><fr:title text="Brushing up on Acronyms, Reprise: GATs, SOGATs, or even just Algebraic Theories">Brushing up on Acronyms, Reprise: GATs, SOGATs, or even just Algebraic Theories</fr:title><fr:taxon>Exposition</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>20</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:title text="intro">intro</fr:title></fr:frontmatter><fr:mainmatter><html:p>
        I don't know where to start with all this.
        Over the last couple months, I keep hearing about Taichi Uemura and SOGATs,
        or CwRs (categories with representable maps) and how they're a modern natural model or something or other.
        And something something <fr:link href="stack-overflow/what-is-artin-gluing-and-how-is-it-useful-in-proving-meta-theoretic-properties.html" type="external">initiality conjecture</fr:link>,
        and I'm left wondering what this all is such that the existence of a free structure is so nontrivial?
    </html:p><html:p>
        If you know me, you know my style is to paste together newspaper clippings of references
        and use this tree as a sort of digital collage.
        So let's begin with what's probably the most up-to-date perspective:
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>20</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:title text="Uemura's Thesis §4 (SOGATs)">Uemura's Thesis §4 (SOGATs)</fr:title></fr:frontmatter><fr:mainmatter><html:p>
        "In this chapter, we introduce <html:em>second-order generalized algebraic
        theories (SOGATs)</html:em> for several reasons. In short, SOGATs are:
        <html:ul><html:li>
                1. syntactic counterparts of CwRs;
            </html:li>
            <html:li>
                2. extension of the general definition of dependent type
                theories given by Bauer, Haselwarter, and Lumsdaine [20] to
                allow user-definable judgment forms;
            </html:li>
            <html:li>
                3. second-order extension of <html:em>generalized algebraic
                theories</html:em> of Cartmell [35];
            </html:li>
            <html:li>
                4. dependently-typed extension of <html:em>second-order algebraic
                theories</html:em> of Fiore and Mahmoud [57].
            </html:li></html:ul>
        The first aspect is the most important in this thesis. In [169] the
        author introduced a logical framework to give syntactic counterparts of
        CwRs, but it is not satisfactory. When defining a type theory as a
        theory over a logical framework, one has to prove the <html:em>adequacy</html:em> of the
        definition, that is, the theory over the logical framework derives the
        same judgments as the original type theory does. Although adequacy can
        systematically be proved for each individual type theory syntactically
        [75] or semantically [79], the adequacy of all logical framework
        presentations cannot be proved nor even stated unless we have a general
        notion of a type theory outside the logical framework. What we really
        want is a general notion of a syntactic presentation of a type theory
        such that a wide range of existing type theories are verified to be
        instances of that notion by just unfolding the definition. Bauer,
        Haselwarter, and Lumsdaine [20] have made a careful analysis on
        inference rules in traditional presentations of type theories and
        proposed a class of syntactic presentations of type theories that fits
        our requirement. A restriction on their type theories is that the forms
        of judgments are fixed, and thus we cannot define some complex type
        theories such as cubical type theory [41]. We thus modify their
        definition of type theories to allow users to declare new judgment
        forms. It turns out that our syntactic presentations of type theories
        are considered as an extension of algebraic theories by dependent types
        and variable binding. We thus choose the name 'second-order generalized
        algebraic theory' combining the dependently-typed extension and the
        second-order extension of algebraic theories found in the literature."
    </html:p><html:p>
        Maybe for the cognoscenti this makes perfect sense, but for me:
        <html:ul><html:li>
                re 1. What does "syntactic counterpart" mean?
                I suppose now's a great time to go back to §3 and actually
                learn what a CwR is in the first place, but if it's anything
                like a natural model, isn't it already very syntactic?
                Maybe this is totally off, but natural models/CwFs look a lot
                like hyperdoctrines in the sense that they directly model the
                syntax.
                What does it mean to have a syntactic counterpart to something
                like a hyperdoctrine, that's already the syntactic model?
                Or is it roughly like (regular) hyperdoctrine : (regular) category :: SOGAT : CwR?

                Uemura's further explanation of 1. seems to suggest I have no idea what "syntactic" means here.
            </html:li>
            <html:li>
                re 2. I'm also going to have to follow this reference, but
                "A restriction on their type theories is that the forms of
                judgments are fixed, and thus we cannot define some complex
                type theories such as cubical type theory" indeed seems like a
                major shortcoming.
            </html:li>
            <html:li>
                re 3. Maybe the original syntactic-thing-for-dependent-type-theories.
                It seems necessary to understand this fundamental notion at some point.
            </html:li>
            <html:li>
                re 4. And this of course suggest brushing up on what an
                algebraic theory even is in the first place-- what's the
                relationship with Lawvere theories?
            </html:li></html:ul></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>20</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:title text="Uemura's Thesis §3 (CwRs)">Uemura's Thesis §3 (CwRs)</fr:title></fr:frontmatter><fr:mainmatter><html:p>
        "In this chapter, we introduce the notion of a category with
        representable maps (CwR) as an abstract notion of a type theory. This
        notion covers a wide range of syntactically presented type theories as
        we will see in Chapter 4 and has nice semantic properties proved in
        Chapter 5.
    </html:p><html:p>
        The idea comes from Lawvere’s functorial semantics of algebraic
        theories [108] and its variants [123, 1]. In functorial semantics,
        theories are identified with struc- tured categories, and models of a
        theory are identified with structure-preserving functors from the
        structured category corresponding to the theory. For example, consider
        the theory of groups whose models are of course groups. A group is a
        set A equipped with three operators satisfying certain equational
        axioms. The operators form the following diagram of sets.
        
        
    
    
        
        <html:figure><fr:resource hash="6ec27a546fbae6ac68d87f18fe876e28"><fr:resource-content><html:img src="/forest/6ec27a546fbae6ac68d87f18fe876e28.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
            \begin {tikzcd}
                1 \ar [r, "e"] & A & A × A \ar [l, "⋅"'] \\
                              & A \ar [u, "(-)⁻¹"] &
            \end {tikzcd}
        ]]></fr:resource-source></fr:resource>

        <html:figcaption>[I've changed the 1 to e because of rendering issues I can't figure out.]</html:figcaption></html:figure></html:p><html:p>
        In category theory, a diagram is nothing but a functor, and thus a
        group would be a functor <fr:tex display="inline"><![CDATA[F : \mathcal {C}_\text {group} → \mathsf {Set}]]></fr:tex>
        from a suitable category <fr:tex display="inline"><![CDATA[\mathcal {C}_\text {group}]]></fr:tex>. What structure
        should <fr:tex display="inline"><![CDATA[\mathcal {C}_\text {group}]]></fr:tex> have? The category
        <fr:tex display="inline"><![CDATA[\mathcal {C}_\text {group}]]></fr:tex> should contain a diagram
        
        
    
    
        
        <html:figure><fr:resource hash="3691ea3e68842ad693cad3c17268240b"><fr:resource-content><html:img src="/forest/3691ea3e68842ad693cad3c17268240b.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
            \begin {tikzcd}
                1 \ar [r, "e"] & x_0 & x_0 × x_0 \ar [l, "⋅"'] \\
                              & x_0 \ar [u, "(-)⁻¹"] &
            \end {tikzcd}
        ]]></fr:resource-source></fr:resource>

        <html:figcaption>[I've changed the 1 to e because of rendering issues I can't figure out.]</html:figcaption></html:figure></html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>31</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hejohns-000C/</fr:uri><fr:display-uri>hejohns-000C</fr:display-uri><fr:route>/forest/hejohns-000C/</fr:route><fr:title text="elementary questions, elementary toposes">elementary questions, elementary toposes</fr:title><fr:taxon>Exposition</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>31</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:title text="elementary questions">elementary questions</fr:title></fr:frontmatter><fr:mainmatter><html:p>
        Some basic questions, whose "elevator pitch" answers ought to roll off
        the tongue:
        <html:ul><html:li>
                What is a(n elementary) topos?
            </html:li>
            <html:li>
                What is this "topos logic" that is sound in any elementary topos?
                As in literally, what is the syntax?
                Is it the same thing as this "higher-order intuitionistic logic"?
                What are the inference rules/axioms?
            </html:li>
            <html:li>
                What is this "Kripke-Joyal semantics"?
                Is this the same thing as the so-called "forcing semantics"?
            </html:li>
            <html:li>
                What is this "Mitchell-Bénabou language"?
                Is it the same thing as "topos logic"?
            </html:li></html:ul>
        Following <fr:link href="/forest/mclarty-1992/" title="Elementary Categories, Elementary Toposes" uri="https://hejohns.github.io/forest/mclarty-1992/" display-uri="mclarty-1992" type="local">Elementary Categories, Elementary Toposes</fr:link>, we sketch <html:em>elementary</html:em> answers to these.
    </html:p><html:p>
        Some more difficult questions we do not attempt to answer at the moment:
        <html:ul><html:li>
                What is a Grothendieck topos, and what's the difference v.
                elementary toposes?
            </html:li>
            <html:li>
                What is a "geometric logic" and a "geometric morphism"?
                And what's the difference v. a "logical morphism"?
            </html:li>
            <html:li>
                In what sense is "Kripke-Joyal semantics" a "forcing semantics"?
                What is forcing??
                Why does the concept of "generic" show up everywhere?
            </html:li>
            <html:li>
                What's all this algebraic geometry stuff?
            </html:li>
            <html:li>
                And everything else…
            </html:li></html:ul></html:p><html:p>
        Although as you might expect, we quickly derail from "elevator pitch"
        answers, to "quick, write that down before I lose motivation and never
        complete the sentence".
        A truly FAQ-style answer compendium will have to come later-- after I've
        actually learned the basics.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>31</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:title text="elementary answers">elementary answers</fr:title></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hejohns-000H/</fr:uri><fr:display-uri>hejohns-000H</fr:display-uri><fr:route>/forest/hejohns-000H/</fr:route><fr:title text="Why is it called an &quot;elementary&quot; topos?">Why is it called an "elementary" topos?</fr:title></fr:frontmatter><fr:mainmatter><html:p><fr:link href="/forest/blass-1988/" title="Topoi and Computation" uri="https://hejohns.github.io/forest/blass-1988/" display-uri="blass-1988" type="local">Topoi and Computation</fr:link> writes that "The word 'elementary' in connection with the Lawvere-Tierney definition refers to the fact that their axioms are expressed in the first-order language of categories; in fact the axioms are essentially algebraic." (p. 2).
    (Recall that categories can be formalized as a two or dependently-sorted
    first order theory.)
</html:p><html:p>
    This is corroborated by <fr:link href="/forest/marquis-reyes-2012/" title="The history of categorical logic: 1963-1977" uri="https://hejohns.github.io/forest/marquis-reyes-2012/" display-uri="marquis-reyes-2012" type="local">The history of categorical logic: 1963-1977</fr:link>, writing that "In the years
    that followed, Lawvere tried to extend his analysis and sketched a
    categorical version of first-order theories under the name of elementary
    theories. Then, in 1969, in collaboration with Myles Tierney, Lawvere
    introduced the notion of an elementary topos, making an explicit connection
    with higher-order logic and type theories. Both Lawvere and Tierney were
    aiming at an elementary, that is first-order, axiomatic presentation of
    what are now called Grothendieck toposes, a special type of categories
    introduced by Alexandre Grothendieck in the context of algebraic geometry
    and sheaf theory. Soon after, connections with intuitionistic analysis,
    recursive functions, completeness theorems for various logical systems,
    differential geometry, constructive mathematics were made." (p. 2).
</html:p><html:p>
    If <fr:link href="/forest/lawvere-1970/" title="Quantifiers and Sheaves" uri="https://hejohns.github.io/forest/lawvere-1970/" display-uri="lawvere-1970" type="local">Quantifiers and Sheaves</fr:link> is indeed the paper that introduces elementary toposes,
    it's curious to note that the word "elementary" never appears.
    It must've been coined sometime later, but I don't know the details.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>4</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hejohns-000G/</fr:uri><fr:display-uri>hejohns-000G</fr:display-uri><fr:route>/forest/hejohns-000G/</fr:route><fr:title text="What is an elementary topos?">What is an elementary topos?</fr:title></fr:frontmatter><fr:mainmatter><html:p>
    The usual 30-second description of an elementary topos, is that "it's like
    <fr:tex display="inline"><![CDATA[Set]]></fr:tex>" (but not quite), or "it's an axiomatization of the basic properties
    of <fr:tex display="inline"><![CDATA[Set]]></fr:tex>".
    Of course, these are always the kind of descriptions that only make sense
    once you've <html:em>already</html:em> learned what a(n elementary) topos is.
    We remark that <fr:link href="/forest/mclarty-1990b/" title="The Uses and Abuses of the History of Topos Theory" uri="https://hejohns.github.io/forest/mclarty-1990b/" display-uri="mclarty-1990b" type="local">The Uses and Abuses of the History of Topos Theory</fr:link> is precisely about this "<fr:tex display="inline"><![CDATA[Set]]></fr:tex>"-based
    perspective.
</html:p><html:p>
    Instead, I've gathered every book I could conveniently get my hands on just
    now, and we'll see how each defines an elementary topos.
</html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>4</fr:day></fr:date><fr:title text="Topos à la Introduction to higher order categorical logic p.140">Topos à la <fr:link href="/forest/lambek-scott-1986/" title="Introduction to higher order categorical logic" uri="https://hejohns.github.io/forest/lambek-scott-1986/" display-uri="lambek-scott-1986" type="local">Introduction to higher order categorical logic</fr:link> p.140</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        "A <html:em>topos</html:em> is a cartesian closed category with a sub-object
        classifier and a natural numbers object."
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>4</fr:day></fr:date><fr:title text="Topos à la Sketches of an Elephant: a topos theory compendium 2.1.1">Topos à la <fr:link href="/forest/johnstone-2002/" title="Sketches of an Elephant: a topos theory compendium" uri="https://hejohns.github.io/forest/johnstone-2002/" display-uri="johnstone-2002" type="local">Sketches of an Elephant: a topos theory compendium</fr:link> 2.1.1</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        "We are now ready to present the definition of an (elementary) topos,
        which is the central notion of this book: it is a category having all
        the good 'set-like' properties discussed in the previous chapter,
        except (possibly) for Booleanness. It is a remarkable fact that all
        these properties are implied by the conjunction of just two of them:"
    </html:p><html:p>
        "A <html:em>topos</html:em> is a properly cartesian closed category with a subobject
        classifier."
    </html:p><html:p>
        "… Before that, however, we must mention that the above definition of a
        topos, though it is appreciably simplified from that originally adopted
        by F. W. Lawvere and M. Tierney when they began the subject in 1969, is
        not the simplest possible; one can combine the exponentials and the
        subobject classifier into a single structure, that of power objects."
    </html:p><html:p>
        ("We say a category <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is <html:em>cartesian closed</html:em> if it has finite
        products and all its objects are exponentiable. … Nevertheless, most of
        the cartesian closed categories we shall meet will have equalizers as
        well as finite products; we shall indicate this (with a note of mild
        reproof in our voice) by calling them <html:em>properly cartesian closed</html:em>.")
        (Recall that finite products <fr:tex display="inline"><![CDATA[+]]></fr:tex> equalizers <fr:tex display="inline"><![CDATA[⟺]]></fr:tex> finite limits.)
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>4</fr:day></fr:date><fr:title text="Topos à la Elementary Categories, Elementary Toposes 13.1">Topos à la <fr:link href="/forest/mclarty-1992/" title="Elementary Categories, Elementary Toposes" uri="https://hejohns.github.io/forest/mclarty-1992/" display-uri="mclarty-1992" type="local">Elementary Categories, Elementary Toposes</fr:link> 13.1</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        "A <html:em>topos</html:em> is a Cartesian closed category with a sub-object
        classifier."
    </html:p><html:p>
        Note though, that McLarty "assumes a base category with finite limits"
        when talking about cartesian closed categories.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>4</fr:day></fr:date><fr:title text="Topos à la First Order Categorical Logic">Topos à la <fr:link href="/forest/makkai-reyes-1977/" title="First Order Categorical Logic" uri="https://hejohns.github.io/forest/makkai-reyes-1977/" display-uri="makkai-reyes-1977" type="local">First Order Categorical Logic</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        Okay so they only define a Grothendieck topos. We'll leave the
        discussion of Grothendieck topoi to another time.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>4</fr:day></fr:date><fr:title text="Topos à la Category Theory 8.17">Topos à la <fr:link href="/forest/awodey-2010/" title="Category Theory" uri="https://hejohns.github.io/forest/awodey-2010/" display-uri="awodey-2010" type="local">Category Theory</fr:link> 8.17</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        "A <html:em>topos</html:em> is a category <fr:tex display="inline"><![CDATA[\mathcal {E}]]></fr:tex> such that
        <html:ul><html:li>
                1. <fr:tex display="inline"><![CDATA[\mathcal {E}]]></fr:tex> has all finite limits,
            </html:li>
            <html:li>
                2. <fr:tex display="inline"><![CDATA[\mathcal {E}]]></fr:tex> has a subobject classifier,
            </html:li>
            <html:li>
                3. <fr:tex display="inline"><![CDATA[\mathcal {E}]]></fr:tex> has all exponentials.
            </html:li></html:ul>
        This compact definition proves to be amazingly rich in consequences:
        it can be shown for instance that topoi also have all finite colimits, and that every slice category of a topos is again a topos."
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>4</fr:day></fr:date><fr:title text="Topos à la Topoi: The Categorial Analysis of Logic 4.3">Topos à la <fr:link href="/forest/goldblatt-2006/" title="Topoi: The Categorial Analysis of Logic" uri="https://hejohns.github.io/forest/goldblatt-2006/" display-uri="goldblatt-2006" type="local">Topoi: The Categorial Analysis of Logic</fr:link> 4.3</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        "An <html:em>elementary topos</html:em> is a category <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> such that
        <html:ul><html:li>
                (1) <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is finitely complete,
            </html:li>
            <html:li>
                (2) <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is finitely co-complete,
            </html:li>
            <html:li>
                (3) <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> has exponentiation,
            </html:li>
            <html:li>
                (4) <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> has a subobject classifier.
            </html:li></html:ul>
        As observed in Chapter 3, (1) and (3) constitute the definition of 'Cartesian closed' while (1) can be replaced by
        <html:ul><html:li>
                (1') <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> has a terminal object and pullbacks,
            </html:li></html:ul>
        and dually (2) replaced by
        <html:ul><html:li>
                (2') <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> has an initial object <fr:tex display="inline"><![CDATA[0]]></fr:tex>, and pushouts.
            </html:li></html:ul>
        The definition just given is the one originally proposed by Lawvere and
        Tierney, in terms of which they started [elementary] topos theory in
        1969. Subsequently C. Juul Mikkelsen discovered that condition (2) is
        implied by the combination of (1), (3) and (4) (cf. Paré [1974]). Thus
        a topos can be defined as a Cartesian closed category with a subobject
        classifier. In 4.7 we shall consider a different definition, based on a
        categorial characterisation of power sets."
    </html:p><html:p>
        (<html:em>complete</html:em>, meaning every diagram has a limit, <html:em>finitely
        complete</html:em>, meaning every finite diagram (finite objects, finite
        morphisms) has a limit, "constitute", meaning that "cartesian closed"
        is defined as (1) and (3), not just (3) as one expects nowadays.  See,
        <fr:link href="https://math.stackexchange.com/q/1845697" type="external">this stack overflow post</fr:link>.)
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>4</fr:day></fr:date><fr:title text="Topos à la Sheaves in Geometry and Logic: A First Introduction to Topos Theory">Topos à la <fr:link href="/forest/maclane-moerdijk-1994/" title="Sheaves in Geometry and Logic: A First Introduction to Topos Theory" uri="https://hejohns.github.io/forest/maclane-moerdijk-1994/" display-uri="maclane-moerdijk-1994" type="local">Sheaves in Geometry and Logic: A First Introduction to Topos Theory</fr:link></fr:title></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>4</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/sub-000G/</fr:uri><fr:display-uri>sub-000G</fr:display-uri><fr:route>/forest/sub-000G/</fr:route><fr:title text="Topos à la Sheaves in Geometry and Logic: A First Introduction to Topos Theory p. 48">Topos à la <fr:link href="/forest/maclane-moerdijk-1994/" title="Sheaves in Geometry and Logic: A First Introduction to Topos Theory" uri="https://hejohns.github.io/forest/maclane-moerdijk-1994/" display-uri="maclane-moerdijk-1994" type="local">Sheaves in Geometry and Logic: A First Introduction to Topos Theory</fr:link> p. 48</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
            "[A <html:em>topos</html:em> <fr:tex display="inline"><![CDATA[\mathcal {E}]]></fr:tex> is a category] with the following properties
            <html:ul><html:li>
                    (i) <fr:tex display="inline"><![CDATA[\mathcal {E}]]></fr:tex> has all finite limits and colimits,
                </html:li>
                <html:li>
                    (ii) <fr:tex display="inline"><![CDATA[\mathcal {E}]]></fr:tex> has exponentials,
                </html:li>
                <html:li>
                    (iii) <fr:tex display="inline"><![CDATA[\mathcal {E}]]></fr:tex> has a subobject classifier <fr:tex display="inline"><![CDATA[1 → Ω]]></fr:tex></html:li></html:ul></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>4</fr:day></fr:date><fr:title text="Topos à la Sheaves in Geometry and Logic: A First Introduction to Topos Theory p. 161">Topos à la <fr:link href="/forest/maclane-moerdijk-1994/" title="Sheaves in Geometry and Logic: A First Introduction to Topos Theory" uri="https://hejohns.github.io/forest/maclane-moerdijk-1994/" display-uri="maclane-moerdijk-1994" type="local">Sheaves in Geometry and Logic: A First Introduction to Topos Theory</fr:link> p. 161</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
            "A <html:em>topos</html:em> <fr:tex display="inline"><![CDATA[\mathcal {E}]]></fr:tex> is a category with all finite limites, equipped with
            an object <fr:tex display="inline"><![CDATA[Ω]]></fr:tex>, with a function <fr:tex display="inline"><![CDATA[P]]></fr:tex> which assigns to each object <fr:tex display="inline"><![CDATA[B]]></fr:tex>
            of <fr:tex display="inline"><![CDATA[\mathcal {E}]]></fr:tex> an object <fr:tex display="inline"><![CDATA[PB]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathcal {E}]]></fr:tex>, and, for each object <fr:tex display="inline"><![CDATA[A]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathcal {E}]]></fr:tex>, with two
            isomorphisms, each natural in <fr:tex display="inline"><![CDATA[A]]></fr:tex>
            <fr:tex display="block"><![CDATA[
                \begin {align*}
                    Sub_{\mathcal {E}} &≅ Hom_{\mathcal {E}}(A, Ω) &(1)\\
                    Hom_{\mathcal {E}}(B × A, Ω) &≅ Hom_{\mathcal {E}}(A, PB) &(2) \\
                \end {align*}
            ]]></fr:tex>
            In other words, the functors <fr:tex display="inline"><![CDATA[Sub_{\mathcal {E}}]]></fr:tex> and <fr:tex display="inline"><![CDATA[Hom_{\mathcal {E}}(B × -, Ω)]]></fr:tex>, the
            latter for each object <fr:tex display="inline"><![CDATA[B]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathcal {E}]]></fr:tex>, are required to be representable.
            In the first case, the representing object <fr:tex display="inline"><![CDATA[Ω]]></fr:tex> is the <html:em>subobject
            classifier</html:em>, as already described in §I.3, while in the second case
            <fr:tex display="inline"><![CDATA[PB]]></fr:tex> may be called the <html:em>power object</html:em> of <fr:tex display="inline"><![CDATA[B]]></fr:tex>; moreover, the
            function <fr:tex display="inline"><![CDATA[P]]></fr:tex> can be extended to a functor <fr:tex display="inline"><![CDATA[P : \mathcal {E}^{op} → \mathcal {E}]]></fr:tex> in
            exactly one way so that (2) becomes natural in <fr:tex display="inline"><![CDATA[B]]></fr:tex> (as well as in
            <fr:tex display="inline"><![CDATA[A]]></fr:tex>), see (7) below. Equivalently, the natural isomorphism (2) states
            that <fr:tex display="inline"><![CDATA[PB]]></fr:tex> is the exponential <fr:tex display="inline"><![CDATA[Ω^B]]></fr:tex>, as described in §I.6; therefore,
            any category which satisfies (1) and has all exponentials will, in
            particular, have all power objects. We emphasize that at first sight the axioms for at topos just giben seem weaker than those of <fr:link href="/forest/sub-000G/" title="Topos à la Sheaves in Geometry and Logic: A First Introduction to Topos Theory p. 48" uri="https://hejohns.github.io/forest/sub-000G/" display-uri="sub-000G" type="local">§I.6</fr:link>. However, it will be shown in the
            course of this chapter that the two sets of axioms are actually
            equivalent.
        </html:p><html:p>
            Notice that the two natural isomorphisms (1) and (2) may be combined
            in a single isomorphism
            <fr:tex display="block"><![CDATA[
                \begin {align*}
                    Sub_{\mathcal {E}}(B × A) &≅ Hom_{\mathcal {E}}(A, PB) &(3) \\
                \end {align*}
            ]]></fr:tex>
            natural in A. With <fr:tex display="inline"><![CDATA[B = 1]]></fr:tex>, this implies (1) with <fr:tex display="inline"><![CDATA[Ω = P1]]></fr:tex>, and hence
            also (2). In other words, we could define a topos as a category with
            finite limits equipped with a single operation <fr:tex display="inline"><![CDATA[P]]></fr:tex> satisfying (3)."
        </html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><html:p>
    We collect the definition of a <html:em>subobject classifier</html:em>, which appears in
    every definition, and give a standard one:
</html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hejohns-000I/</fr:uri><fr:display-uri>hejohns-000I</fr:display-uri><fr:route>/forest/hejohns-000I/</fr:route><fr:title text="subobject classifier">subobject classifier</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    For a category <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, a <html:em>subobject classifier</html:em> is an object <fr:tex display="inline"><![CDATA[Ω]]></fr:tex> together
    with a global element <fr:tex display="inline"><![CDATA[true : 1 → Ω]]></fr:tex> such that <fr:tex display="inline"><![CDATA[∀ A ∈ \mathcal {C}. ∀ s : S ↣ A. ∃!
    χ_s : A → Ω.]]></fr:tex>
    
    
    
        
        <html:figure><fr:resource hash="61eb2b59069108c4709816d4014899aa"><fr:resource-content><html:img src="/forest/61eb2b59069108c4709816d4014899aa.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
        \begin {tikzcd}
            S \ar [d, rightarrowtail, "s"']\ar [r]\ar [dr, phantom, "\lrcorner ", very near start] & 1 \ar [d, rightarrowtail, "true"] \\
            A \ar [r, "χ_s"'] & Ω
        \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>
    


    is a pullback square.
</html:p><html:p>
    Notice that <fr:tex display="inline"><![CDATA[true]]></fr:tex> is trivially monic since every <fr:link href="/forest/hejohns-000K/" title="global element" uri="https://hejohns.github.io/forest/hejohns-000K/" display-uri="hejohns-000K" type="local">global
    element</fr:link> is trivially monic. Recall that "monos are stable
    under pullback".
</html:p><html:p>
    This is from <fr:link href="/forest/mclarty-1992/" title="Elementary Categories, Elementary Toposes" uri="https://hejohns.github.io/forest/mclarty-1992/" display-uri="mclarty-1992" type="local">Elementary Categories, Elementary Toposes</fr:link>.
</html:p></fr:mainmatter></fr:tree><html:p>
    So comparing each definition with another, they're all about par for
    course, if we ignore natural numbers objects for now.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>29</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hejohns-000F/</fr:uri><fr:display-uri>hejohns-000F</fr:display-uri><fr:route>/forest/hejohns-000F/</fr:route><fr:title text="&quot;higher-order intuitionistic logic&quot; v. &quot;topos logic&quot;">"higher-order intuitionistic logic" v. "topos logic"</fr:title></fr:frontmatter><fr:mainmatter><html:p>
    Many authors object to the name "higher-order intuitionistic logic".
</html:p><html:p><fr:link href="/forest/blass-1988/" title="Topoi and Computation" uri="https://hejohns.github.io/forest/blass-1988/" display-uri="blass-1988" type="local">Topoi and Computation</fr:link> writes that "Strictly speaking, the phrase 'higher-order
    intuitionistic' makes little sense, since it is not clear that
    constructions like the power set are intuitionistically acceptable. What is
    meant by the phrase is a type theory built on a formally intuitionistic
    underlying logic." (p. 2).
</html:p><html:p>
    And <fr:link href="/forest/mclarty-1992/" title="Elementary Categories, Elementary Toposes" uri="https://hejohns.github.io/forest/mclarty-1992/" display-uri="mclarty-1992" type="local">Elementary Categories, Elementary Toposes</fr:link> similarly writes "In Part III the first order topos
    axioms are used to define the higher order internal language. The logic is
    called 'topos logic' here, although 'intuitionistic logic' is often
    referred to in the literature. I believe that 'intuitionism' is usually,
    and rightly, taken to mean Brouwer's epistemology of mathematics, which is
    unrelated to the origin or content of topos theory. Topos logic strikingly resembles formal intuitionistic logic and the two have interacted, as in
    van der Hoeven and Moerdijk (1984) or many papers in Fourman <html:em>et al.</html:em>
    (1979). But topos logic coincides with no intuitionistic logic studied
    before toposes, and this is due to real philosophical differences (see
    McLarty 1990a)." (p. vii).
</html:p><html:p>
    Of course this discrepancy is what one should come to expect, since the
    very notion of a formalized logic of intuitionistic reasoning is at odds
    with Brouwer's notion of intuitionism, so when one speaks of
    "intuitionistic logic" it's usually in the purely formal sense.
</html:p><html:p>
    Combining the two names, I think "higher-order intuitionistic topos logic"
    is at least a little more descriptive.
    Although I like calling it "finite-type intuitionistic predicate logic" to
    keep in touch with some older terminology you still see around the block.

</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>8</fr:month><fr:day>26</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hejohns-000J/</fr:uri><fr:display-uri>hejohns-000J</fr:display-uri><fr:route>/forest/hejohns-000J/</fr:route><fr:title text="higher-order intuitionistic topos logic">higher-order intuitionistic topos logic</fr:title></fr:frontmatter><fr:mainmatter>
    <fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hejohns-000M/</fr:uri><fr:display-uri>hejohns-000M</fr:display-uri><fr:route>/forest/hejohns-000M/</fr:route><fr:title text="finite-type intuitionistic predicate logic">finite-type intuitionistic predicate logic</fr:title></fr:frontmatter><fr:mainmatter><html:p>
    There is some (a posteriori insignificant) variation in the presentation of
    the syntax, thus following through with some input from <fr:link href="/forest/ericgio/" title="Eric Giovannini" uri="https://hejohns.github.io/forest/ericgio/" display-uri="ericgio" type="local">Eric Giovannini</fr:link>, we
    juxtapose multiple definitions-- <fr:link href="/forest/hejohns-000G/" title="What is an elementary topos?" uri="https://hejohns.github.io/forest/hejohns-000G/" display-uri="hejohns-000G" type="local">as done for elementary
    topoi</fr:link>--, but this time we slightly modify the source for
    uniformity as needed.
</html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:title text="Syntax à la Introduction to higher order categorical logic p.128">Syntax à la <fr:link href="/forest/lambek-scott-1986/" title="Introduction to higher order categorical logic" uri="https://hejohns.github.io/forest/lambek-scott-1986/" display-uri="lambek-scott-1986" type="local">Introduction to higher order categorical logic</fr:link> p.128</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        "A <html:em>type theory</html:em> is a formal theory given by the following data:
        <html:ul><html:li>
                a class of <html:em>types</html:em>, including a special type <fr:tex display="inline"><![CDATA[Ω]]></fr:tex></html:li>
            <html:li>
                a class of <html:em>terms</html:em> of each type, including countably many
                variables of each type
            </html:li>
            <html:li>
                for each finite set <fr:tex display="inline"><![CDATA[X]]></fr:tex> of variables a binary relation <fr:tex display="inline"><![CDATA[⊢_X]]></fr:tex>
                of <html:em>entailment</html:em> between terms of type <fr:tex display="inline"><![CDATA[Ω]]></fr:tex> all free
                variables of which are elements of <fr:tex display="inline"><![CDATA[X]]></fr:tex>.
            </html:li></html:ul>"
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:title text="types">types</fr:title></fr:frontmatter><fr:mainmatter><html:p>
            "The class of types is closed under the inductive clauses:
            <html:ul><html:li><fr:tex display="inline"><![CDATA[1]]></fr:tex>, <fr:tex display="inline"><![CDATA[N]]></fr:tex> and <fr:tex display="inline"><![CDATA[Ω]]></fr:tex> are types ('basic' types);
                </html:li>
                <html:li>
                    if <fr:tex display="inline"><![CDATA[A]]></fr:tex> and <fr:tex display="inline"><![CDATA[B]]></fr:tex> are types, so are <fr:tex display="inline"><![CDATA[A×B]]></fr:tex> and <fr:tex display="inline"><![CDATA[\mathcal {P}A]]></fr:tex></html:li></html:ul>"
        </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:title text="terms">terms</fr:title></fr:frontmatter><fr:mainmatter><html:p>
            "The class of terms is freely generated from certain basic terms by
            certain operations including the following… and is closed under certain operations.
            <html:ul><html:li>
                    [for each type <fr:tex display="inline"><![CDATA[A]]></fr:tex>, there are countably many variables
                    <fr:tex display="inline"><![CDATA[x_1^A, x_2^A, …]]></fr:tex>;]
                </html:li>
                <html:li><fr:tex display="inline"><![CDATA[*]]></fr:tex> is a term of type <fr:tex display="inline"><![CDATA[1]]></fr:tex>;
                </html:li>
                <html:li>
                    if <fr:tex display="inline"><![CDATA[a]]></fr:tex> is a term of type <fr:tex display="inline"><![CDATA[A]]></fr:tex> and <fr:tex display="inline"><![CDATA[b]]></fr:tex> is a term of type
                    <fr:tex display="inline"><![CDATA[B]]></fr:tex>, then <fr:tex display="inline"><![CDATA[⟨a,b⟩]]></fr:tex> is a term of type <fr:tex display="inline"><![CDATA[A×B]]></fr:tex>;
                </html:li>
                <html:li>
                    if <fr:tex display="inline"><![CDATA[a]]></fr:tex> is a term of type <fr:tex display="inline"><![CDATA[A]]></fr:tex> and <fr:tex display="inline"><![CDATA[α]]></fr:tex> is a term of type
                    <fr:tex display="inline"><![CDATA[\mathcal {P}a]]></fr:tex>, then <fr:tex display="inline"><![CDATA[a ∈ α]]></fr:tex> is a term of type <fr:tex display="inline"><![CDATA[Ω]]></fr:tex>;
                </html:li>
                <html:li>
                    if <fr:tex display="inline"><![CDATA[ϕ(x)]]></fr:tex> is a term of type <fr:tex display="inline"><![CDATA[Ω]]></fr:tex> (possibly containing the
                    free variable <fr:tex display="inline"><![CDATA[x]]></fr:tex> of type <fr:tex display="inline"><![CDATA[A]]></fr:tex>), then <fr:tex display="inline"><![CDATA[\{x ∈ A | ϕ(x)\}]]></fr:tex>
                    is a term of type <fr:tex display="inline"><![CDATA[\mathcal {P}A]]></fr:tex> not containing a free occurrence of
                    <fr:tex display="inline"><![CDATA[x]]></fr:tex>;
                </html:li>
                <html:li><fr:tex display="inline"><![CDATA[0]]></fr:tex> is a term of type <fr:tex display="inline"><![CDATA[N]]></fr:tex>;
                </html:li>
                <html:li>
                    if <fr:tex display="inline"><![CDATA[n]]></fr:tex> is a term of type <fr:tex display="inline"><![CDATA[N]]></fr:tex> so is <fr:tex display="inline"><![CDATA[Sn]]></fr:tex>;
                </html:li>
                <html:li><fr:tex display="inline"><![CDATA[⊤]]></fr:tex> and <fr:tex display="inline"><![CDATA[⊥]]></fr:tex> are terms of type <fr:tex display="inline"><![CDATA[Ω]]></fr:tex>;
                </html:li>
                <html:li>
                    if <fr:tex display="inline"><![CDATA[p]]></fr:tex> and <fr:tex display="inline"><![CDATA[q]]></fr:tex> are terms of type <fr:tex display="inline"><![CDATA[Ω]]></fr:tex>, so are <fr:tex display="inline"><![CDATA[p∧q]]></fr:tex>,
                    <fr:tex display="inline"><![CDATA[p∨q]]></fr:tex>, <fr:tex display="inline"><![CDATA[p⟹q]]></fr:tex>;
                </html:li>
                <html:li>
                    if <fr:tex display="inline"><![CDATA[ϕ(x)]]></fr:tex> is a term of type <fr:tex display="inline"><![CDATA[Ω]]></fr:tex> (possibly containing the
                    free variable <fr:tex display="inline"><![CDATA[x]]></fr:tex> of type <fr:tex display="inline"><![CDATA[A]]></fr:tex>), then <fr:tex display="inline"><![CDATA[∀_{x∈A}ϕ(x)]]></fr:tex> and
                    <fr:tex display="inline"><![CDATA[∃_{x∈A}ϕ(x)]]></fr:tex> are terms of type <fr:tex display="inline"><![CDATA[Ω]]></fr:tex> not containing free
                    occurrences of <fr:tex display="inline"><![CDATA[x]]></fr:tex>.
                </html:li></html:ul>"
        </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:title text="formulas">formulas</fr:title></fr:frontmatter><fr:mainmatter><html:p>
            "Terms of type <fr:tex display="inline"><![CDATA[Ω]]></fr:tex> are also called <html:em>formulas</html:em>."
        </html:p><html:p>
            "One may also define a number of widely used term forming
            operations: …
            <html:ul><html:li><fr:tex display="inline"><![CDATA[p ⟺ q ≡ (p⟹q)∧(q⟹q)]]></fr:tex>,
                </html:li>
                <html:li><fr:tex display="inline"><![CDATA[a = a' ≡ ∀_{u∈\mathcal {P}A}(a∈u ⟺ a'∈u)]]></fr:tex></html:li></html:ul>"
        </html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:title text="Syntax à la Sketches of an Elephant: a topos theory compendium ">Syntax à la <fr:link href="/forest/johnstone-2002/" title="Sketches of an Elephant: a topos theory compendium" uri="https://hejohns.github.io/forest/johnstone-2002/" display-uri="johnstone-2002" type="local">Sketches of an Elephant: a topos theory compendium</fr:link> </fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        (We write "language" whenever Johnstone writes "signature", and use the
        corresponding symbol <fr:tex display="inline"><![CDATA[\mathcal {L}]]></fr:tex> instead of <fr:tex display="inline"><![CDATA[Σ]]></fr:tex>.
        I don't know if Johnstone prefers the term "signature" because
        "language" is overloaded and often refers not just to the, well,
        language, but to the larger logic sans deductive system, but that would
        be a good reason.)
    </html:p><html:p>
        "A <html:em>language</html:em> <fr:tex display="inline"><![CDATA[\mathcal {L}]]></fr:tex> for higher-order logic is defined by specifying a
        set <fr:tex display="inline"><![CDATA[\mathcal {L}_{\mathsf {base}}]]></fr:tex> of <html:em>atomic types</html:em>, a set <fr:tex display="inline"><![CDATA[\mathcal {L}_{\mathsf {fun}}]]></fr:tex> of <html:em>function symbols</html:em> and
        a set <fr:tex display="inline"><![CDATA[\mathcal {L}_{\mathsf {rel}}]]></fr:tex> of <html:em>relation symbols</html:em> as in 1.1.1, together with a number
        of <html:em>type constructors</html:em> chosen from the following list, which
        recursively define the set <fr:tex display="inline"><![CDATA[\mathcal {L}_{\mathsf {type}}]]></fr:tex> of <fr:tex display="inline"><![CDATA[types]]></fr:tex>:
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:title text="types">types</fr:title></fr:frontmatter><fr:mainmatter><html:ul><html:li>
                (i) <html:em>Basic types</html:em>: Each sort is a type
            </html:li>
            <html:li>
                (ii) <html:em>Product types</html:em>: There is a distinguished type <fr:tex display="inline"><![CDATA[1]]></fr:tex> (the
                empty product); and if <fr:tex display="inline"><![CDATA[A]]></fr:tex> and <fr:tex display="inline"><![CDATA[B]]></fr:tex> are types, then <fr:tex display="inline"><![CDATA[A×B]]></fr:tex>is a
                type.
            </html:li>
            <html:li>
                (iii) <html:em>Function types</html:em>: If <fr:tex display="inline"><![CDATA[A]]></fr:tex> and <fr:tex display="inline"><![CDATA[B]]></fr:tex> are types, then <fr:tex display="inline"><![CDATA[A→B]]></fr:tex> is
                a type.
            </html:li>
            <html:li>
                (iv) <html:em>Power types</html:em>: If <fr:tex display="inline"><![CDATA[A]]></fr:tex> is a type, the <fr:tex display="inline"><![CDATA[\mathcal {P}A]]></fr:tex> is a type.
            </html:li>
            <html:li>
                (v) <html:em>List types</html:em>: If <fr:tex display="inline"><![CDATA[A]]></fr:tex> is a type, then <fr:tex display="inline"><![CDATA[LA]]></fr:tex> is a type.
            </html:li></html:ul><html:p>
            To each function symbol <fr:tex display="inline"><![CDATA[f∈\mathcal {L}_{\mathsf {fun}}]]></fr:tex> we assign an ordered pair
            <fr:tex display="inline"><![CDATA[(A,B)]]></fr:tex> of elements of <fr:tex display="inline"><![CDATA[\mathcal {L}_{\mathsf {type}}]]></fr:tex>; as before, we write <fr:tex display="inline"><![CDATA[f : A→B]]></fr:tex> to
            indicate that <fr:tex display="inline"><![CDATA[f]]></fr:tex> has the pair of types <fr:tex display="inline"><![CDATA[(A,B)]]></fr:tex>. Similarly, each
            relation symbol <fr:tex display="inline"><![CDATA[R∈\mathcal {L}_{\mathsf {rel}}]]></fr:tex> has a type in <fr:tex display="inline"><![CDATA[\mathcal {L}_{\mathsf {type}}]]></fr:tex>, and we write <fr:tex display="inline"><![CDATA[R ↣
            A]]></fr:tex> to indicate that <fr:tex display="inline"><![CDATA[R]]></fr:tex> has type <fr:tex display="inline"><![CDATA[A]]></fr:tex>."
        </html:p><html:p>
            "If our language has the type constructors (ii) and (iv), we shall
            often write <fr:tex display="inline"><![CDATA[Ω]]></fr:tex> for the particular type <fr:tex display="inline"><![CDATA[\mathcal {P}1]]></fr:tex>. Similarly if it has
            constructors (ii) and (v), we write <fr:tex display="inline"><![CDATA[N]]></fr:tex> (the type of natural
            numbers) for <fr:tex display="inline"><![CDATA[L1]]></fr:tex>."
        </html:p><html:p>
            "From now on, all our languages will contain the product type
            constructor; thus we have restricted all our primitive function and
            relation symbols to be unary. (If our signature also contaisn
            function types, then we can further restrict our function symbols
            to be constants… And if <fr:tex display="inline"><![CDATA[\mathcal {L}]]></fr:tex> has power types, then we can replace all
            primitive relation symbols by constants as well)"
        </html:p></fr:mainmatter></fr:tree><html:p>
        "The term constructor for power types in fact builds terms form
        formulae, so over a language which contains power types we have to
        define terms and formulae by a simultaneous recursion".
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:title text="terms">terms</fr:title></fr:frontmatter><fr:mainmatter><html:p>
            (We omit the bookkeeping of free variables that Johnstone inlines with
            the following definitions.)
            "<html:ul><html:li>
                    (i) We have a stock of <html:em>variables</html:em> <fr:tex display="inline"><![CDATA[x : A]]></fr:tex> for each type <fr:tex display="inline"><![CDATA[A]]></fr:tex>.
                </html:li>
                <html:li>
                    (ii) if <fr:tex display="inline"><![CDATA[f : A→B]]></fr:tex> is a function symbol of <fr:tex display="inline"><![CDATA[\mathcal {L}]]></fr:tex> and <fr:tex display="inline"><![CDATA[t : A]]></fr:tex>,
                    then <fr:tex display="inline"><![CDATA[f t : B]]></fr:tex>.
                </html:li>
                <html:li>
                    (iii)
                    <html:ul><html:li>
                            (a) we have a distinguished term <fr:tex display="inline"><![CDATA[* : 1]]></fr:tex>.
                        </html:li>
                        <html:li>
                            (b) If <fr:tex display="inline"><![CDATA[s : A]]></fr:tex> and <fr:tex display="inline"><![CDATA[t : B]]></fr:tex>, then <fr:tex display="inline"><![CDATA[⟨s,t⟩:A×B]]></fr:tex>.
                        </html:li></html:ul></html:li>
                <html:li>
                    (iv) If <fr:tex display="inline"><![CDATA[t : A×B]]></fr:tex>, then <fr:tex display="inline"><![CDATA[π₁ t : A]]></fr:tex> and <fr:tex display="inline"><![CDATA[π₂ t : B]]></fr:tex>.
                </html:li>
                <html:li>
                    (v) If <fr:tex display="inline"><![CDATA[t : B]]></fr:tex> and <fr:tex display="inline"><![CDATA[x]]></fr:tex> is a variable of type <fr:tex display="inline"><![CDATA[A]]></fr:tex>, then
                    <fr:tex display="inline"><![CDATA[(λx : A. t) : A→B]]></fr:tex>.
                </html:li>
                <html:li>
                    (vi) If <fr:tex display="inline"><![CDATA[s : A→B]]></fr:tex> and <fr:tex display="inline"><![CDATA[t : A]]></fr:tex>, then <fr:tex display="inline"><![CDATA[s t : B]]></fr:tex>.
                    [This is formally different from (ii).]
                </html:li>
                <html:li>
                    (vii) If <fr:tex display="inline"><![CDATA[ϕ]]></fr:tex> is a formula and <fr:tex display="inline"><![CDATA[x]]></fr:tex> is a variable of type
                    <fr:tex display="inline"><![CDATA[A]]></fr:tex>, then <fr:tex display="inline"><![CDATA[\{x : A | ϕ\} : \mathcal {P}A]]></fr:tex>.
                </html:li>
                <html:li>
                    (viii)
                    <html:ul><html:li>
                            For each type <fr:tex display="inline"><![CDATA[A]]></fr:tex>, there is a distinguished term
                            <fr:tex display="inline"><![CDATA[[]]]></fr:tex> of type <fr:tex display="inline"><![CDATA[LA]]></fr:tex>.
                        </html:li>
                        <html:li>
                            If <fr:tex display="inline"><![CDATA[s : A]]></fr:tex> and <fr:tex display="inline"><![CDATA[t : LA]]></fr:tex>, then <fr:tex display="inline"><![CDATA[s::t : LA]]></fr:tex>.
                        </html:li></html:ul></html:li>
                <html:li>
                    (ix) The remaining term constructor associated with list
                    types, the <html:em>iterator</html:em>, is more complicated [which we
                    omit for irrelevance].
                </html:li></html:ul></html:p><html:p>
            Of course, clauses (v) and (vi) of the definition above apply only
            if we have function types in <fr:tex display="inline"><![CDATA[\mathcal {L}]]></fr:tex>, clause (vii) only if we have power
            types, and clauses (viii) and (ix) only if we have list types.
            Note that, except for power types, the clauses come in pairs [of
            constructors and destructors]. The reason why we have no
            'destructor' for power types is that, just as the constructor for
            power types builds terms out of formulae rather than terms, the
            corresponding destructor builds formulae out of terms of a power
            type-- it thus appears as clause (iii) of the next definition."
        </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:title text="formulas">formulas</fr:title></fr:frontmatter><fr:mainmatter><html:p>
            (We again omit the bookkeeping of free variables.)
            "The <html:em>atomic formulae</html:em> over <fr:tex display="inline"><![CDATA[\mathcal {L}]]></fr:tex> are of three kinds:
            <html:ul><html:li>
                    (i) If <fr:tex display="inline"><![CDATA[R ↣ A]]></fr:tex> is a relation symbol and <fr:tex display="inline"><![CDATA[t : A]]></fr:tex>, then
                    <fr:tex display="inline"><![CDATA[R(t)]]></fr:tex> is an atomic formulae.
                </html:li>
                <html:li>
                    (ii) If <fr:tex display="inline"><![CDATA[s]]></fr:tex> and <fr:tex display="inline"><![CDATA[t]]></fr:tex> are terms of the same type <fr:tex display="inline"><![CDATA[A]]></fr:tex>, then
                    <fr:tex display="inline"><![CDATA[s =_A t]]></fr:tex> is an atomic formula.
                </html:li>
                <html:li>
                    (iii) If <fr:tex display="inline"><![CDATA[s : A]]></fr:tex> and <fr:tex display="inline"><![CDATA[t : \mathcal {P}A]]></fr:tex> for some <fr:tex display="inline"><![CDATA[A]]></fr:tex>, then <fr:tex display="inline"><![CDATA[s
                    ∈_A t]]></fr:tex> is an atomic formula.
                </html:li></html:ul></html:p><html:p>
            The compound formulae over <fr:tex display="inline"><![CDATA[\mathcal {L}]]></fr:tex> are built up from the atomic
            formulae [with <fr:tex display="inline"><![CDATA[⊤,∧,⊥,∨,⟹,¬,∃,∀,]]></fr:tex>]."
        </html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:title text="Syntax à la Elementary Categories, Elementary Toposes 14.1">Syntax à la <fr:link href="/forest/mclarty-1992/" title="Elementary Categories, Elementary Toposes" uri="https://hejohns.github.io/forest/mclarty-1992/" display-uri="mclarty-1992" type="local">Elementary Categories, Elementary Toposes</fr:link> 14.1</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        (McLarty defines the internal language of a topos <fr:tex display="inline"><![CDATA[\bold {\mathsf {E}}]]></fr:tex> directly (and its
        interpretation), instead of describing the logic abstractly and taking
        the internal language to be a diagram (in Tarskian-model theory speak)
        of <fr:tex display="inline"><![CDATA[\bold {\mathsf {E}}]]></fr:tex>. We rephrase McLarty's presentation to not mention a particular
        model <fr:tex display="inline"><![CDATA[\bold {\mathsf {E}}]]></fr:tex>. We also preserve usage of the term "sort" instead of "type".)
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:title text="types">types</fr:title></fr:frontmatter><fr:mainmatter><html:p>
            The types have the structure of the objects of an elementary topos,
            ie a collection of atomic types closed under <fr:tex display="inline"><![CDATA[1,×,→,Ω]]></fr:tex>.
        </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:title text="terms">terms</fr:title></fr:frontmatter><fr:mainmatter><html:p>
            "The [language] is sorted…. We inductively define terms and their sorts:
            <html:ul><html:li>
                    (LT1) Each sort <fr:tex display="inline"><![CDATA[A]]></fr:tex> has a list of <html:em>variables over <fr:tex display="inline"><![CDATA[A]]></fr:tex></html:em>,
                    <fr:tex display="inline"><![CDATA[x₁, x₂, x₃…]]></fr:tex>. Every variable over <fr:tex display="inline"><![CDATA[A]]></fr:tex> is a term of sort
                    <fr:tex display="inline"><![CDATA[A]]></fr:tex>.
                </html:li>
                <html:li>
                    (LT2) For any [function symbol <fr:tex display="inline"><![CDATA[f : A→B]]></fr:tex>] and term <fr:tex display="inline"><![CDATA[s]]></fr:tex> [of] sort
                    <fr:tex display="inline"><![CDATA[A]]></fr:tex>, <fr:tex display="inline"><![CDATA[f s]]></fr:tex> is a term of sort <fr:tex display="inline"><![CDATA[B]]></fr:tex>. [Constant symbols <fr:tex display="inline"><![CDATA[c :
                    1→A]]></fr:tex> are also] a term of sort <fr:tex display="inline"><![CDATA[A]]></fr:tex>…. We write <fr:tex display="inline"><![CDATA[!]]></fr:tex> as a
                    constant [of sort <fr:tex display="inline"><![CDATA[1]]></fr:tex>].
                </html:li>
                <html:li>
                    (LT3) For every term <fr:tex display="inline"><![CDATA[s₁]]></fr:tex> of sort <fr:tex display="inline"><![CDATA[A]]></fr:tex> and <fr:tex display="inline"><![CDATA[s₂]]></fr:tex> of sort <fr:tex display="inline"><![CDATA[B]]></fr:tex>,
                    there is a term <fr:tex display="inline"><![CDATA[⟨s₁,s₂⟩]]></fr:tex> of sort <fr:tex display="inline"><![CDATA[A×B]]></fr:tex>.
                </html:li>
                <html:li>
                    (LT4) For every term <fr:tex display="inline"><![CDATA[s]]></fr:tex> of sort <fr:tex display="inline"><![CDATA[B]]></fr:tex> and variable <fr:tex display="inline"><![CDATA[y]]></fr:tex> of
                    sort <fr:tex display="inline"><![CDATA[A]]></fr:tex>, there is a term <fr:tex display="inline"><![CDATA[λy. s]]></fr:tex> of sort <fr:tex display="inline"><![CDATA[Bᴬ]]></fr:tex>.
                </html:li></html:ul>"
            <html:ul><html:li>
                    "The <html:em>extension</html:em> of <fr:tex display="inline"><![CDATA[ϕ]]></fr:tex> over a list of variables
                    <fr:tex display="inline"><![CDATA[\overline {x}]]></fr:tex> is the sub-object <fr:tex display="inline"><![CDATA[\{\overline {x} | ϕ\}]]></fr:tex>
                    of <fr:tex display="inline"><![CDATA[A₁×A₂×…Aₙ]]></fr:tex> classified by [<fr:tex display="inline"><![CDATA[ϕ]]></fr:tex>]."
                </html:li></html:ul></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:title text="formulas">formulas</fr:title></fr:frontmatter><fr:mainmatter><html:p>
            "A formula is a term of sort <fr:tex display="inline"><![CDATA[Ω]]></fr:tex>. By LT2 [and the existence of
            these terms in any elementary topos, developed in 13.3 and 13.4],
            for any formulas <fr:tex display="inline"><![CDATA[ϕ]]></fr:tex> and <fr:tex display="inline"><![CDATA[ψ]]></fr:tex> there are formulas <fr:tex display="inline"><![CDATA[ϕ∧ψ]]></fr:tex> and
            <fr:tex display="inline"><![CDATA[ϕ⟹ψ]]></fr:tex>.… There are also formulas <fr:tex display="inline"><![CDATA[⊥, ¬ϕ, ϕ∧ψ]]></fr:tex>, read as 'false',
            'not-<fr:tex display="inline"><![CDATA[ϕ]]></fr:tex>', and '<fr:tex display="inline"><![CDATA[ϕ]]></fr:tex> or <fr:tex display="inline"><![CDATA[ψ]]></fr:tex>', which [with <fr:tex display="inline"><![CDATA[∃]]></fr:tex> are defined in
            terms of <fr:tex display="inline"><![CDATA[∧,⟹,∀]]></fr:tex>] using quantification over <fr:tex display="inline"><![CDATA[Ω]]></fr:tex> (15.1)."
        </html:p><html:p>
            "For any formula <fr:tex display="inline"><![CDATA[ϕ]]></fr:tex> and variable <fr:tex display="inline"><![CDATA[y]]></fr:tex> over any object <fr:tex display="inline"><![CDATA[A]]></fr:tex>, we
            define the formula <fr:tex display="inline"><![CDATA[∀y : A. ϕ]]></fr:tex> as an abbreviation for <fr:tex display="inline"><![CDATA[∀_A\{y : A
            | ϕ\}]]></fr:tex> [where <fr:tex display="inline"><![CDATA[\{y : A | ϕ\}]]></fr:tex> is an abbreviation for <fr:tex display="inline"><![CDATA[λy : A. ϕ]]></fr:tex>,
            and <fr:tex display="inline"><![CDATA[∀\_A : Ω^A→Ω]]></fr:tex> is a term]."
        </html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:title text="summary">summary</fr:title></fr:frontmatter><fr:mainmatter><html:p>
        Ignoring the natural numbers type and the idiosyncratic list type of
        <fr:link href="/forest/johnstone-2002/" title="Sketches of an Elephant: a topos theory compendium" uri="https://hejohns.github.io/forest/johnstone-2002/" display-uri="johnstone-2002" type="local">Sketches of an Elephant: a topos theory compendium</fr:link>, there is a core concept (using the notion of
        elementary topops for reference) of <fr:link href="/forest/hejohns-000F/" title="&quot;higher-order intuitionistic logic&quot; v. &quot;topos logic&quot;" uri="https://hejohns.github.io/forest/hejohns-000F/" display-uri="hejohns-000F" type="local">"finite-type intuitionistic
        predicate logic" aka "topos logic" aka "higher-order intuitionistic
        logic"</fr:link>, although certain inter-definable choices can be
        made.
    </html:p><html:p>
        There's no clear notion of "taking everything", but a reasonable
        "logical" choice seems to be that (over a language <fr:tex display="inline"><![CDATA[\mathcal {L}]]></fr:tex>,) the types are
        <fr:tex display="inline"><![CDATA[→,×,1]]></fr:tex>, the terms are <fr:tex display="inline"><![CDATA[x,λ,f t,⟨t,u⟩,πᵢ,\{x|ϕ(x)\},*]]></fr:tex>, and the
        formulas are <fr:tex display="inline"><![CDATA[=,R(\overline {x}),∈,∧,∨,¬,⟹,∀,∃]]></fr:tex>.
    </html:p><html:p>
        One curiosity with taking a type <fr:tex display="inline"><![CDATA[Ω]]></fr:tex> and formulas to <html:em>just</html:em> be
        terms of type <fr:tex display="inline"><![CDATA[Ω]]></fr:tex>, is that we then have formulas like <fr:tex display="inline"><![CDATA[π₁ ⟨⊤,⊥⟩]]></fr:tex>
        (definitionally equal to <fr:tex display="inline"><![CDATA[⊤]]></fr:tex>) which don't seem very formula-like.
    </html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree>
<fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>8</fr:month><fr:day>26</fr:day></fr:date><fr:title text="semantics">semantics</fr:title></fr:frontmatter><fr:mainmatter /></fr:tree></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>8</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hejohns-0008/</fr:uri><fr:display-uri>hejohns-0008</fr:display-uri><fr:route>/forest/hejohns-0008/</fr:route><fr:title text="the core of adjoint functors">the core of adjoint functors</fr:title><fr:taxon>Exposition</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>7</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>11</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hejohns-0006/</fr:uri><fr:display-uri>hejohns-0006</fr:display-uri><fr:route>/forest/hejohns-0006/</fr:route><fr:title text="the core of adjoint monotone functions">the core of adjoint monotone functions</fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    This is mentioned in passing, in the intro to <fr:link href="/forest/street-2012/" title="The Core of Adjoint Functors" uri="https://hejohns.github.io/forest/street-2012/" display-uri="street-2012" type="local">The Core of Adjoint Functors</fr:link>.
</html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>7</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>11</fr:day></fr:date><fr:taxon>proposition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        Suppose <fr:tex display="inline"><![CDATA[P]]></fr:tex> and <fr:tex display="inline"><![CDATA[Q]]></fr:tex> are posets, <fr:tex display="inline"><![CDATA[f : P → Q]]></fr:tex> is a priori just a function, and <fr:tex display="inline"><![CDATA[u : P ← Q]]></fr:tex> monotone,
        such that <fr:tex display="inline"><![CDATA[f(x) ≤ a ⟺ x ≤ u(a)]]></fr:tex>.
        Then <fr:tex display="inline"><![CDATA[f]]></fr:tex> monotone as well.
    </html:p><html:p>
        Or dually, suppose that <fr:tex display="inline"><![CDATA[f]]></fr:tex> monotone, but <fr:tex display="inline"><![CDATA[u]]></fr:tex> is a priori just a function.
        Then <fr:tex display="inline"><![CDATA[u]]></fr:tex> monotone as well.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>7</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>11</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/sub-0006/</fr:uri><fr:display-uri>sub-0006</fr:display-uri><fr:route>/forest/sub-0006/</fr:route><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        Suppose <fr:tex display="inline"><![CDATA[p₁ ≤ p₂]]></fr:tex>.
        Notice that <fr:tex display="inline"><![CDATA[p₂ ≤ u∘f(p₂)]]></fr:tex>, by the unit of the (thin) adjunction.
        Then <fr:tex display="inline"><![CDATA[p₁ ≤ p₂ ≤ u∘f(p₂) ⟹ f(p₁) ≤ f(p₂)]]></fr:tex> by the Hom bijection of the (thin) adjunction.
    </html:p><html:p>
        (dual)
        Suppose <fr:tex display="inline"><![CDATA[q₁ ≤ q₂]]></fr:tex>.
        Notice that <fr:tex display="inline"><![CDATA[f∘u(q₁) ≤ q₂]]></fr:tex> by the counit of the (thin) adjunction.
        Then <fr:tex display="inline"><![CDATA[f∘u(q₁) ≤ q₁ ≤ q₂ ⟹ u(q₁) ≤ u(q₂)]]></fr:tex> by the Hom bijection of the (thin) adjunction.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>7</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>11</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/subb-0006/</fr:uri><fr:display-uri>subb-0006</fr:display-uri><fr:route>/forest/subb-0006/</fr:route><fr:taxon>proof corollary</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        Notice that <fr:link href="/forest/sub-0006/" title="the core of adjoint monotone functions › https://hejohns.github.io/forest/sub-0006/" uri="https://hejohns.github.io/forest/sub-0006/" display-uri="sub-0006" type="local">the above proof</fr:link> does <html:em>not</html:em> use the information that <fr:tex display="inline"><![CDATA[u]]></fr:tex> is monotone.
        Thus <fr:link href="/forest/hejohns-0006/" title="the core of adjoint monotone functions" uri="https://hejohns.github.io/forest/hejohns-0006/" display-uri="hejohns-0006" type="local">the above lemma</fr:link> holds where <fr:tex display="inline"><![CDATA[f]]></fr:tex> and <fr:tex display="inline"><![CDATA[u]]></fr:tex> are just a priori functions.
        The <fr:link href="/forest/hejohns-0006/" title="the core of adjoint monotone functions" uri="https://hejohns.github.io/forest/hejohns-0006/" display-uri="hejohns-0006" type="local">above lemma</fr:link> is in some sense the more
        immediately natural question, but can be easily strengthened to
        the form of this corollary.
    </html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>7</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hejohns-0007/</fr:uri><fr:display-uri>hejohns-0007</fr:display-uri><fr:route>/forest/hejohns-0007/</fr:route><fr:title text="Precursor to The Core of Adjoint Functors">Precursor to The Core of Adjoint Functors</fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    Mentioned in passing as <fr:link href="/forest/street-2012/" title="The Core of Adjoint Functors" uri="https://hejohns.github.io/forest/street-2012/" display-uri="street-2012" type="local">2.1. Proposition.</fr:link>, as "well-known".
</html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>7</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:taxon>proposition</fr:taxon></fr:frontmatter><fr:mainmatter><html:ul><html:li>
            Suppose <fr:tex display="inline"><![CDATA[U : A → X]]></fr:tex> is a functor, <fr:tex display="inline"><![CDATA[F : X .ob → A .ob]]></fr:tex> a function,
            and <fr:tex display="inline"><![CDATA[(πₓ : A(F(x), -) ≅ X(x, U(-)))_{x ∈ X}]]></fr:tex> a family of natural
            isomorphisms. Then there is a unique extension <fr:tex display="inline"><![CDATA[\overline {F}]]></fr:tex> of <fr:tex display="inline"><![CDATA[F]]></fr:tex> such
            that <fr:tex display="inline"><![CDATA[(πₓ)_{x ∈ X}]]></fr:tex> is natural in <fr:tex display="inline"><![CDATA[x]]></fr:tex>, witnessing <fr:tex display="inline"><![CDATA[\overline {F} ⊣ U]]></fr:tex>.
        </html:li>
        <html:li>
            Or dually, suppose that <fr:tex display="inline"><![CDATA[F]]></fr:tex> is a functor, but <fr:tex display="inline"><![CDATA[U]]></fr:tex> is just a
            function on objects, and <fr:tex display="inline"><![CDATA[(πₐ : A(F(-), a) ≅ X(-, U(a)))_{a ∈ A}]]></fr:tex>.
            Then <fr:tex display="inline"><![CDATA[U]]></fr:tex> uniquely extends to <fr:tex display="inline"><![CDATA[\overline {U}]]></fr:tex>.
        </html:li></html:ul></fr:mainmatter></fr:tree><html:p>
    Let's be pedantic and clarify that <fr:tex display="inline"><![CDATA[A(F(-), -), X(-, U(-)): Xᵒᵖ → Setᴬ]]></fr:tex>
    have the same action on morphisms as <fr:tex display="inline"><![CDATA[Hom(-, -)∘Fᵒᵖ, λx. Hom(x, -)∘U]]></fr:tex>.
    This is conventionally left implicit, but we remark to clarify what we mean
    by the family of natural isomorphisms being natural.
</html:p><html:p>
    NOTE: I couldn't get よ to render in the latex (diagrams).
    I'm not sure if it's a lualatex/dvi or font issue.
</html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>7</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/sub-0007/</fr:uri><fr:display-uri>sub-0007</fr:display-uri><fr:route>/forest/sub-0007/</fr:route><fr:title text="the short proof (sketch)">the short proof (sketch)</fr:title><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter><html:ul><html:li>
            Suppose such a <fr:tex display="inline"><![CDATA[\overline {F}]]></fr:tex> exists.
            Then naturality of <fr:tex display="inline"><![CDATA[π]]></fr:tex> requires that
            <fr:tex display="inline"><![CDATA[∀f : X(x, y).]]></fr:tex> this square in <fr:tex display="inline"><![CDATA[Setᴬ]]></fr:tex> commutes:
            <fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>7</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/subsub-0007/</fr:uri><fr:display-uri>subsub-0007</fr:display-uri><fr:route>/forest/subsub-0007/</fr:route></fr:frontmatter><fr:mainmatter>
    
    
        
        <html:figure><fr:resource hash="1995a6cacd5688e305b4b8476e2607d0"><fr:resource-content><html:img src="/forest/1995a6cacd5688e305b4b8476e2607d0.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
                    \begin {tikzcd} A(F(x), -) \ar [d, Rightarrow, "≀", "πₓ"'] & A(F(y), -) \ar [d, Rightarrow, "≀"', "π_y"]\ar [l, Rightarrow, "-∘\overline {F}(f)"'] \\
                        X(x, U(-)) & X(y, U(-)) \ar [l, Rightarrow, "-∘f"]
                    \end {tikzcd}
                ]]></fr:resource-source></fr:resource></html:figure>
    

</fr:mainmatter></fr:tree>
            Then clearly <fr:tex display="inline"><![CDATA[∃!\overline {F}.∀f : X(x, y). \overline {F}(f) = よ⁻¹(πₓ⁻¹∘(-∘f)∘π_y)]]></fr:tex>.
        </html:li>

        <html:li>
            (dual) Suppose such a <fr:tex display="inline"><![CDATA[\overline {U}]]></fr:tex> exists.
            Then naturality of <fr:tex display="inline"><![CDATA[π]]></fr:tex> requires that
            <fr:tex display="inline"><![CDATA[∀u : A(a, b).]]></fr:tex> this square in <fr:tex display="inline"><![CDATA[Set^{Xᵒᵖ}]]></fr:tex> commutes:
            <fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>7</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/subsubb-0007/</fr:uri><fr:display-uri>subsubb-0007</fr:display-uri><fr:route>/forest/subsubb-0007/</fr:route></fr:frontmatter><fr:mainmatter>
    
    
        
        <html:figure><fr:resource hash="301254c448e6a3f6edef20bb39295a2e"><fr:resource-content><html:img src="/forest/301254c448e6a3f6edef20bb39295a2e.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
                    \begin {tikzcd}
                        A(F(-), a) \ar [r, Rightarrow, "(u∘-)"]\ar [d, Rightarrow, "≀"', "πₐ"] & A(F(-), b) \ar [d, Rightarrow, "≀"', "π_b"] \\
                        X(-, U(a)) \ar [r, Rightarrow, "(\overline {U}(u)∘-)"] & X(-, U(b))
                    \end {tikzcd}
                ]]></fr:resource-source></fr:resource></html:figure>
    

</fr:mainmatter></fr:tree>
            and clearly <fr:tex display="inline"><![CDATA[∃!\overline {U}.∀u : A(a, b). \overline {U}(u) = よ⁻¹(π_b∘(u∘-)∘πₐ⁻¹)]]></fr:tex>.
        </html:li></html:ul></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>10</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hejohns-000D/</fr:uri><fr:display-uri>hejohns-000D</fr:display-uri><fr:route>/forest/hejohns-000D/</fr:route><fr:title text="the verbose proof">the verbose proof</fr:title><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    We take inspiration from <fr:link href="/forest/hejohns-0006/" title="the core of adjoint monotone functions" uri="https://hejohns.github.io/forest/hejohns-0006/" display-uri="hejohns-0006" type="local">the thin case</fr:link>.
    We wts the <fr:tex display="inline"><![CDATA[F]]></fr:tex>-action on morphisms is fully determined already (∃!).
    That is, we have two goals:
    <html:ul><html:li>
            (∃) Show that there is a suitable <fr:tex display="inline"><![CDATA[F]]></fr:tex>-action.
        </html:li>
        <html:li>
            (!) That any other <fr:tex display="inline"><![CDATA[F]]></fr:tex>-action is <html:em>equal</html:em> to it.
        </html:li></html:ul>
    As usual, let <fr:tex display="inline"><![CDATA[η_x = πₓ(F(x))(1_{F(x)}) : X(x, U∘F(x))]]></fr:tex> denote the
    component of the unit of the (a posteriori) adjunction
    and <fr:tex display="inline"><![CDATA[ϵₐ = π_{U(a)}(a)⁻¹(1_{U(a)})]]></fr:tex> denote the component of the counit.
</html:p><html:ul><html:li>
        (∃)
        <html:p>
            Now suppose <fr:tex display="inline"><![CDATA[∃f : X(x, y)]]></fr:tex>.
            Since <fr:tex display="inline"><![CDATA[η_y : X(y, U∘F(y))]]></fr:tex>, we have <fr:tex display="inline"><![CDATA[η_y∘f : X(x, U∘F(y))]]></fr:tex>.
            By the Hom bijection, <fr:tex display="inline"><![CDATA[πₓ(F(y))⁻¹(η_y∘f) : A(F(x), F(y))]]></fr:tex>.
            This is our candidate for the <fr:tex display="inline"><![CDATA[F]]></fr:tex>-action.
            <fr:tex display="inline"><![CDATA[\overline {F}(f) ≔ πₓ(F(y))⁻¹(η_y ∘ f)]]></fr:tex>.
        </html:p>
        <html:p>
            As a picture, each <fr:tex display="inline"><![CDATA[f : X(x, y)]]></fr:tex> gives rise to the following
            square in <fr:tex display="inline"><![CDATA[Set]]></fr:tex>:
            <fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>10</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/subb-000D/</fr:uri><fr:display-uri>subb-000D</fr:display-uri><fr:route>/forest/subb-000D/</fr:route></fr:frontmatter><fr:mainmatter>
    
    
        
        <html:figure><fr:resource hash="761cbcd656862beae5f5b3f16094816f"><fr:resource-content><html:img src="/forest/761cbcd656862beae5f5b3f16094816f.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
                    \begin {tikzcd}
                        A(F(x), F(y)) & A(F(y), F(y)) \ar [d, "≀"', "π_y(F(y))"] \\
                        X(x, U∘F(y)) \ar [u, "≀"', "πₓ(F(y))⁻¹"] & X(y, U∘F(y)) \ar [l, "-∘f"]
                    \end {tikzcd}
                ]]></fr:resource-source></fr:resource></html:figure>
    

</fr:mainmatter></fr:tree>
            And our candidate <fr:tex display="inline"><![CDATA[\overline {F}(f)]]></fr:tex> is the one we know to exist by
            chasing <fr:tex display="inline"><![CDATA[1_{F(y)}]]></fr:tex> around the square.
        </html:p>
        <html:p>
            We could directly try to show that <fr:tex display="inline"><![CDATA[\overline {F}]]></fr:tex> defined as such is
            indeed functorial--and I <html:em>have</html:em> tried--, but it's rather
            difficult without the clarifying perspective of the Yoneda
            lemma (no, seriously, although I'm sure one could do it).
        </html:p>
        <html:p>
            It's instructive to try directly, if one hasn't.
            The problem is that <fr:tex display="inline"><![CDATA[\overline {F}(f)]]></fr:tex> as defined is not obviously the
            composition of morphisms in any diagram-- how do you reason
            about the functoriality of <fr:tex display="inline"><![CDATA[πₓ(F(y))⁻¹]]></fr:tex>?
            Instead, we want to invoke a representation theorem and work
            with <fr:tex display="inline"><![CDATA[\overline {F}(f)]]></fr:tex> as an explicit composition in some diagram.
            The solution is to follow the Yoneda principle and
            pass from reasoning in <fr:tex display="inline"><![CDATA[Set]]></fr:tex> to <fr:tex display="inline"><![CDATA[Setᴬ]]></fr:tex>.
        </html:p>
        <html:p>
            Notice that the <fr:link href="/forest/subb-000D/" title="https://hejohns.github.io/forest/subb-000D/" uri="https://hejohns.github.io/forest/subb-000D/" display-uri="subb-000D" type="local">above square</fr:link> is
            moreover <html:em>natural</html:em> in the variable <fr:tex display="inline"><![CDATA[F(y)]]></fr:tex>.
            That is, we've actually described the <fr:tex display="inline"><![CDATA[F(y)]]></fr:tex> component of the
            natural transformation <fr:tex display="inline"><![CDATA[πₓ⁻¹∘(-∘f)∘π_y : A(F(x), -) ⇐ A(F(y),
            -)]]></fr:tex>.
            As a picture, each <fr:tex display="inline"><![CDATA[f : X(x, y)]]></fr:tex> gives
            rise to the following square in <fr:tex display="inline"><![CDATA[Setᴬ]]></fr:tex>:
            <fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>10</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/sub-000D/</fr:uri><fr:display-uri>sub-000D</fr:display-uri><fr:route>/forest/sub-000D/</fr:route></fr:frontmatter><fr:mainmatter>
    
    
        
        <html:figure><fr:resource hash="7b95bb36722ba04f1499ea595ce69018"><fr:resource-content><html:img src="/forest/7b95bb36722ba04f1499ea595ce69018.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
                    \begin {tikzcd}
                        A(F(x), -) & A(F(y), -) \ar [d, Rightarrow, "≀"', "π_y"] \\
                        X(x, U(-)) \ar [u, Rightarrow, "≀"', "πₓ⁻¹"] & X(y, U(-)) \ar [l, Rightarrow, "-∘f"]
                    \end {tikzcd}
                ]]></fr:resource-source></fr:resource></html:figure>
    

</fr:mainmatter></fr:tree></html:p>
        <html:p>
            We first make the trivial observation that <fr:tex display="inline"><![CDATA[A(F(x), -)]]></fr:tex> and
            <fr:tex display="inline"><![CDATA[A(F(y), -)]]></fr:tex> are both Yoneda embeddings (we use the "version"
            where <fr:tex display="inline"><![CDATA[よ : Aᵒᵖ → Setᴬ]]></fr:tex>, ie the Yoneda embedding on <fr:tex display="inline"><![CDATA[Aᵒᵖ]]></fr:tex>),
            <fr:tex display="inline"><![CDATA[よ(F(x))]]></fr:tex> and <fr:tex display="inline"><![CDATA[よ(F(y))]]></fr:tex> respectively.
        </html:p>
        <html:ul><html:li><html:p>
                    Then the Yoneda lemma tells us that by specifying an
                    element <fr:tex display="inline"><![CDATA[\overline {F}(f) : A(F(x), F(y))]]></fr:tex>, this fully
                    determines (ie freely extends to) a natural
                    transformation <fr:tex display="block"><![CDATA[よ(\overline {F}(f)) = (-∘\overline {F}(f)) : よ(F(x)) ⇐
                    よ(F(y))]]></fr:tex></html:p></html:li>
            <html:li><html:p>
                    Equivalently, the Yoneda principle tells us that an
                    element <fr:tex display="inline"><![CDATA[\overline {F}(f) : A(F(x), F(y))]]></fr:tex> fully failthfully
                    embeds as a natural transformation <fr:tex display="block"><![CDATA[よ(\overline {F}(f)) =
                    (-∘\overline {F}(f)) : よ(F(x)) ⇐ よ(F(y))]]></fr:tex></html:p></html:li></html:ul>
        <html:p>
            With this in mind, we notice that by definition,
            <fr:tex display="inline"><![CDATA[よ(\overline {F}(f))]]></fr:tex> is exactly the lid to <fr:link href="/forest/sub-000D/" title="https://hejohns.github.io/forest/sub-000D/" uri="https://hejohns.github.io/forest/sub-000D/" display-uri="sub-000D" type="local">the above <fr:tex display="inline"><![CDATA[Setᴬ]]></fr:tex>
            square</fr:link>.
            
    
    
        
        <html:figure><fr:resource hash="8e1e5b224fafba02d2fcb343c0989965"><fr:resource-content><html:img src="/forest/8e1e5b224fafba02d2fcb343c0989965.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
                \begin {tikzcd} A(F(x), -) & A(F(y), -) \ar [d, Rightarrow, "≀"', "π_y"]\ar [l, Rightarrow, "-∘\overline {F}(f)"'] \\
                    X(x, U(-)) \ar [u, Rightarrow, "≀", "πₓ⁻¹"'] & X(y, U(-)) \ar [l, Rightarrow, "-∘f"]
                \end {tikzcd}
            ]]></fr:resource-source></fr:resource></html:figure>
    


            That is, both natural transformations map <fr:tex display="inline"><![CDATA[1_{F(y)}]]></fr:tex> to the
            same thing-- <fr:tex display="inline"><![CDATA[\overline {F}{F}(f)]]></fr:tex>-- by definition, thus must be equal
            by the Yoneda Lemma.
            (<fr:link href="/forest/subbb-000D/" title="https://hejohns.github.io/forest/subbb-000D/" uri="https://hejohns.github.io/forest/subbb-000D/" display-uri="subbb-000D" type="local">In hindsight</fr:link>, this line of reasoning is quite
            circumlocutious and you might as well start by saying such a
            <fr:tex display="inline"><![CDATA[\overline {F}]]></fr:tex> would have to satisfy this square, but I think it's the
            more obvious starting point without presupposing it exists.)
            Now that we've represented <fr:tex display="inline"><![CDATA[\overline {F}(f)]]></fr:tex> as an explicit
            composition, we have enough to tools consider
            functoriality.
        </html:p>
        <html:p>
            Wts <fr:tex display="inline"><![CDATA[\overline {F}]]></fr:tex> actually defines a functorial action on morphisms for a functor extending <fr:tex display="inline"><![CDATA[F]]></fr:tex>.
            Indeed, <fr:tex display="inline"><![CDATA[\overline {F}(1ₓ : X(x, x)) =  πₓ(F(x))⁻¹(ηₓ∘1ₓ) = πₓ(F(x))⁻¹(ηₓ) = 1_{F(x)}]]></fr:tex> by definition.
            And suppose <fr:tex display="inline"><![CDATA[∃g : X(y, z)]]></fr:tex>.
            Then <fr:tex display="inline"><![CDATA[\overline {F}(g∘f : X(x, z))]]></fr:tex> viewed as a natural transformation gives rise to the following superimposed squares:
            
    
    
        
        <html:figure><fr:resource hash="663232c3ab41e3a3294191aa10712374"><fr:resource-content><html:img src="/forest/663232c3ab41e3a3294191aa10712374.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
                \begin {tikzcd}
                    A(F(x), -) & A(F(y), -) \ar [d, Rightarrow, "π_y"', shift right=2]\ar [l, Rightarrow, "-∘\overline {F}(f)"'] & A(F(z), -) \ar [d, Rightarrow, "π_z"]\ar [l, Rightarrow, "-∘\tilde {F}(g)"']\ar [ll, Rightarrow, "-∘\overline {F}(g∘f)"', bend right] \\
                    X(x, U(-)) \ar [u, Rightarrow, "≀"', "πₓ⁻¹"] & X(y, U(-)) \ar [l, Rightarrow, "-∘f"]\ar [u, Rightarrow, "π_y⁻¹"', shift right=2] & X(z, U(-)) \ar [l, Rightarrow, "-∘g"]\ar [ll, Rightarrow, "-∘(g∘f)", bend left]
                \end {tikzcd}
            ]]></fr:resource-source></fr:resource></html:figure>
    


            A diagram chase verifies that the diagram indeed commutes, and
            that <fr:tex display="inline"><![CDATA[よ(\overline {F}(g∘f)) = よ(\overline {F}(f))∘よ(\overline {F}(g))]]></fr:tex>.
            By the ("going home" direction of the) Yoneda principle, <fr:tex display="inline"><![CDATA[\overline {F}(g∘f) = \overline {F}(f)∘\overline {F}(g)]]></fr:tex>.
            Thus at last, <fr:tex display="inline"><![CDATA[\overline {F}]]></fr:tex> defines a functorial action on <fr:tex display="inline"><![CDATA[X]]></fr:tex>-morphisms.
        </html:p>
        <html:p>
            We should also check that <fr:tex display="inline"><![CDATA[\overline {F}]]></fr:tex> is actually adjoint to <fr:tex display="inline"><![CDATA[U]]></fr:tex>--
            ie, that <fr:tex display="inline"><![CDATA[(πₓ)_{x ∈ X}]]></fr:tex> is indeed <html:em>natural in the variable
            <fr:tex display="inline"><![CDATA[x]]></fr:tex></html:em> as well as <fr:tex display="inline"><![CDATA[a]]></fr:tex>.
            By great good fortune, by defining <fr:tex display="inline"><![CDATA[\overline {F}]]></fr:tex> st
            <fr:tex display="inline"><![CDATA[∀x,y ∈ X. ∀f ∈ X(x, y).]]></fr:tex>
            <fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>7</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/subsub-0007/</fr:uri><fr:display-uri>subsub-0007</fr:display-uri><fr:route>/forest/subsub-0007/</fr:route></fr:frontmatter><fr:mainmatter>
    
    
        
        <html:figure><fr:resource hash="1995a6cacd5688e305b4b8476e2607d0"><fr:resource-content><html:img src="/forest/1995a6cacd5688e305b4b8476e2607d0.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
                    \begin {tikzcd} A(F(x), -) \ar [d, Rightarrow, "≀", "πₓ"'] & A(F(y), -) \ar [d, Rightarrow, "≀"', "π_y"]\ar [l, Rightarrow, "-∘\overline {F}(f)"'] \\
                        X(x, U(-)) & X(y, U(-)) \ar [l, Rightarrow, "-∘f"]
                    \end {tikzcd}
                ]]></fr:resource-source></fr:resource></html:figure>
    

</fr:mainmatter></fr:tree>
            it is indeed the case.
        </html:p></html:li>
    <html:li>
        (!)
        <html:p>
            To finish off the result, we wts for any other <fr:tex display="inline"><![CDATA[F']]></fr:tex> extending
            <fr:tex display="inline"><![CDATA[F]]></fr:tex> to morphisms st <fr:tex display="inline"><![CDATA[F' ⊣ U]]></fr:tex>, witnessed by <fr:tex display="inline"><![CDATA[π : Xᵒᵖ → Setᴬ]]></fr:tex>,
            that <fr:tex display="inline"><![CDATA[F' = \overline {F}]]></fr:tex>.
            This simply follows from the observation that <fr:tex display="inline"><![CDATA[∀f.]]></fr:tex> naturality
            of <fr:tex display="inline"><![CDATA[π]]></fr:tex> is exactly <fr:link href="/forest/subb-000D/" title="https://hejohns.github.io/forest/subb-000D/" uri="https://hejohns.github.io/forest/subb-000D/" display-uri="subb-000D" type="local">this square</fr:link>, and forces
            <fr:tex display="inline"><![CDATA[よ(F'(f)) = πₓ⁻¹∘(-∘f)∘π_y = よ(\overline {F}(f))]]></fr:tex></html:p></html:li></html:ul><html:p>
    So this result is really a corollary of the Yoneda lemma.
    <fr:link href="https://ncatlab.org/nlab/show/adjoint+functorAdjointFunctorFromObjectwiseRepresentingObject" type="external">The nlab page is here</fr:link>.
</html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>10</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/subbb-000D/</fr:uri><fr:display-uri>subbb-000D</fr:display-uri><fr:route>/forest/subbb-000D/</fr:route><fr:taxon>Moral</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        Of course in hindsight, we could've (or even should've)
        <html:em>just</html:em> defined  <fr:tex display="inline"><![CDATA[\overline {F}]]></fr:tex> <html:em>to be</html:em>
        <fr:tex display="inline"><![CDATA[よ⁻¹(πₓ⁻¹∘(-∘f)∘π_y)]]></fr:tex> from the get-go, since it's a much
        more clearly well-behaved definition, but unless you're
        already sold on the Yoneda principle, I find it a difficult
        leap without struggling with lower-level objects a bit
        first.
        I'm still in training.
    </html:p><html:p>
        This is the perspective taken in <fr:link href="/forest/sub-0007/" title="Precursor to The Core of Adjoint Functors › the short proof (sketch)" uri="https://hejohns.github.io/forest/sub-0007/" display-uri="sub-0007" type="local">the short proof</fr:link>.
    </html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><html:p>
    However, unlike <fr:link href="/forest/hejohns-0006/" title="the core of adjoint monotone functions" uri="https://hejohns.github.io/forest/hejohns-0006/" display-uri="hejohns-0006" type="local">the thin case</fr:link>,
    we crucially use the information that <fr:tex display="inline"><![CDATA[U]]></fr:tex> is a functor
    so the natural transformation squares are well-defined.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>11</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hejohns-000E/</fr:uri><fr:display-uri>hejohns-000E</fr:display-uri><fr:route>/forest/hejohns-000E/</fr:route><fr:title text="adjunction core">adjunction core</fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>11</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><fr:link href="/forest/street-2012/" title="The Core of Adjoint Functors" uri="https://hejohns.github.io/forest/street-2012/" display-uri="street-2012" type="local">"An adjunction core consists of"</fr:link>
        <html:ul><html:li>
                functions <fr:tex display="inline"><![CDATA[U : A .ob → X .ob]]></fr:tex> and <fr:tex display="inline"><![CDATA[F : X .ob → A .ob]]></fr:tex></html:li>
            <html:li>
                a family of isomorphisms <fr:tex display="inline"><![CDATA[(π_{x,a} : A(F(x), a) ≅ X(X, U(a)))_{a ∈ A, x ∈ X}]]></fr:tex></html:li></html:ul></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>11</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:taxon>proposition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        An adjunction core extends to an adjuction iff <fr:tex display="inline"><![CDATA[∀a,b ∈ A. ∀x ∈ X.]]></fr:tex>
        <fr:link href="/forest/subb-000E/" title="I" uri="https://hejohns.github.io/forest/subb-000E/" display-uri="subb-000E" type="local">I</fr:link> commutes, and iff <fr:tex display="inline"><![CDATA[∀x,y ∈ X. a ∈ A.]]></fr:tex> <fr:link href="/forest/subbb-000E/" title="II" uri="https://hejohns.github.io/forest/subbb-000E/" display-uri="subbb-000E" type="local">II</fr:link>
        commutes.
        The adjunction is unique when it exists.
    </html:p><html:p>
        The <fr:link href="/forest/street-2012/" title="The Core of Adjoint Functors" uri="https://hejohns.github.io/forest/street-2012/" display-uri="street-2012" type="local">original theorem</fr:link> is stated in terms of
        <fr:tex display="inline"><![CDATA[\mathcal {V}]]></fr:tex>-enriched categories, but we only treat the simple case
        of Homset-categories here.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>11</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/subb-000E/</fr:uri><fr:display-uri>subb-000E</fr:display-uri><fr:route>/forest/subb-000E/</fr:route><fr:title text="I">I</fr:title></fr:frontmatter><fr:mainmatter>
        
    
    
        
        <html:figure><fr:resource hash="bbf5972b9c164a83fc1884a8f3c82e26"><fr:resource-content><html:img src="/forest/bbf5972b9c164a83fc1884a8f3c82e26.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
            \begin {tikzcd}
                A(a, b)×A(Fx, a) \ar [r, "\overline {U}×π_{a,x}"]\ar [d, "∘"] & X(Ua, Ub)×X(x, Ua) \ar [d, "∘"] \\
                A(Fx, b) \ar [r, "π_{x, b}"] & X(x, Ub)
            \end {tikzcd}
        ]]></fr:resource-source></fr:resource></html:figure>
    


</fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>11</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/subbb-000E/</fr:uri><fr:display-uri>subbb-000E</fr:display-uri><fr:route>/forest/subbb-000E/</fr:route><fr:title text="II">II</fr:title></fr:frontmatter><fr:mainmatter>
        
    
    
        
        <html:figure><fr:resource hash="8e354e0cc9eea59853471d2e03dddeb7"><fr:resource-content><html:img src="/forest/8e354e0cc9eea59853471d2e03dddeb7.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
            \begin {tikzcd}
                X(y, Ua)×X(x, y) \ar [r, "π_{y, a}⁻¹×\overline {F}"]\ar [d, "∘"] & A(Fy, a)×A(Fx, Fy) \ar [d, "∘"] \\
                X(x, Ua) \ar [r, "π_{x, a}⁻¹"] & A(Fx, a)
            \end {tikzcd}
        ]]></fr:resource-source></fr:resource></html:figure>
    


</fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>11</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        We use the same notation and definitions of <fr:tex display="inline"><![CDATA[η, ϵ, \overline {F}, \overline {U}]]></fr:tex> as <fr:link href="/forest/hejohns-000D/" title="the verbose proof" uri="https://hejohns.github.io/forest/hejohns-000D/" display-uri="hejohns-000D" type="local">the
        explicit proof of the precursor lemma</fr:link>.
        The definition of <fr:tex display="inline"><![CDATA[\overline {F}, \overline {U}]]></fr:tex> in <fr:link href="/forest/sub-0007/" title="Precursor to The Core of Adjoint Functors › the short proof (sketch)" uri="https://hejohns.github.io/forest/sub-0007/" display-uri="sub-0007" type="local">the short proof</fr:link>
        presupposes that <fr:tex display="inline"><![CDATA[U]]></fr:tex> is a functor, so we're scrupulous to avoid
        circularity.
    </html:p><html:p>
        This proof is rather low tech and is lifted straight from <fr:link href="/forest/street-2012/" title="The Core of Adjoint Functors" uri="https://hejohns.github.io/forest/street-2012/" display-uri="street-2012" type="local">the
        paper</fr:link>. It's also how you'd attack <fr:link href="/forest/hejohns-0007/" title="Precursor to The Core of Adjoint Functors" uri="https://hejohns.github.io/forest/hejohns-0007/" display-uri="hejohns-0007" type="local">the
        precursor</fr:link> head-on. The utility is that it holds in
        enriched categories.
    </html:p><html:p>
        The forward directions are trivial.
        Suppose <fr:tex display="inline"><![CDATA[(F, U, (π_{a, x})_{a ∈ A, x ∈ X})]]></fr:tex> extends to <fr:tex display="inline"><![CDATA[\overline {F} ⊣_π \overline {U}]]></fr:tex>.
        Then <fr:link href="/forest/subb-000E/" title="I" uri="https://hejohns.github.io/forest/subb-000E/" display-uri="subb-000E" type="local">I</fr:link> expresses that <fr:tex display="inline"><![CDATA[∀g : A(a, b). ∀f : A(F(x), a).
        π_{x, b}(g∘f) = \overline {U}(g)∘π_{a, x}(f)]]></fr:tex>. This is exactly the condition
        that <fr:tex display="inline"><![CDATA[∀g : A(a, b). π]]></fr:tex> is natural in <fr:tex display="inline"><![CDATA[a]]></fr:tex> at <fr:tex display="inline"><![CDATA[g]]></fr:tex>, which is certainly
        true of an adjunction.
        <fr:link href="/forest/subbb-000E/" title="II" uri="https://hejohns.github.io/forest/subbb-000E/" display-uri="subbb-000E" type="local">II</fr:link> expresses something similar (dual).
    </html:p><html:p>
        The nontrivial directions are the backward directions.
    </html:p><html:ul><html:li><html:p>
                (I) wts I <fr:tex display="inline"><![CDATA[⟹ \overline {U}]]></fr:tex> is a functor.
                Suppose <fr:tex display="inline"><![CDATA[∀a,b ∈ A. ∀x ∈ X.]]></fr:tex> I holds.
                Then in particular, <fr:tex display="inline"><![CDATA[∀c ∈ A. ]]></fr:tex>I holds at <fr:tex display="inline"><![CDATA[x = U(c)]]></fr:tex>.
            </html:p>
            
        
    
    
        
        <html:figure><fr:resource hash="03b722c1100af75655d30df33037cefa"><fr:resource-content><html:img src="/forest/03b722c1100af75655d30df33037cefa.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
            \begin {tikzcd}
                A(a, b)×A(FUc, a) \ar [r, "\overline {U}×π_{a,Uc}"]\ar [d, "∘"] & X(Ua, Ub)×X(Uc, Ua) \ar [d, "∘"] \\
                A(FUc, b) \ar [r, "π_{Uc, b}"] & X(Uc, Ub)
            \end {tikzcd}
        ]]></fr:resource-source></fr:resource></html:figure>
    



            <html:p>
                As does this trivial square:
            </html:p>
            
    
    
        
        <html:figure><fr:resource hash="afd77b7fca2d46c6c513439e75444e2e"><fr:resource-content><html:img src="/forest/afd77b7fca2d46c6c513439e75444e2e.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
                \begin {tikzcd}
                    A(a, b)×A(c, a) \ar [r, "id×(-∘ϵ_c)"]\ar [d, "∘"] & A(a, b)×A(FUc, a) \ar [d, "∘"] \\
                    A(c, b) \ar [r, "(-∘ϵ_c)"] & A(FUc, b)
                \end {tikzcd}
            ]]></fr:resource-source></fr:resource></html:figure>
    


            <html:p>
                which when pasted together, tells us magically:
            </html:p>
            
    
    
        
        <html:figure><fr:resource hash="073e844f8e36fa3cbe17d8a6715b57d6"><fr:resource-content><html:img src="/forest/073e844f8e36fa3cbe17d8a6715b57d6.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
                \begin {tikzcd}
                    A(a, b)×A(c, a) \ar [r, "\overline {U}×\overline {U}"]\ar [d, "∘"] & X(Ua, Ub)×X(Uc, Ua) \ar [d, "∘"] \\
                    A(c, b) \ar [r, "\overline {U}"] & X(Uc, Ub)
                \end {tikzcd}
            ]]></fr:resource-source></fr:resource></html:figure>
    


            <html:p>
                Combined with <fr:link href="/forest/hejohns-000D/" title="the verbose proof" uri="https://hejohns.github.io/forest/hejohns-000D/" display-uri="hejohns-000D" type="local">the earlier proof</fr:link> that <fr:tex display="inline"><![CDATA[\overline {U}(1ₐ)
                = 1_{\overline {U}(a)}]]></fr:tex> (which just follows by definition),
                we've shown that <fr:tex display="inline"><![CDATA[\overline {U}]]></fr:tex> defines a functorial action on morphisms.
                Actually, we saw earlier that <fr:link href="/forest/subb-000E/" title="I" uri="https://hejohns.github.io/forest/subb-000E/" display-uri="subb-000E" type="local">I</fr:link> expresses that
                <fr:tex display="inline"><![CDATA[π]]></fr:tex> is natural in <fr:tex display="inline"><![CDATA[a]]></fr:tex>, so we've met the preconditions of <fr:link href="/forest/hejohns-0007/" title="Precursor to The Core of Adjoint Functors" uri="https://hejohns.github.io/forest/hejohns-0007/" display-uri="hejohns-0007" type="local">the
                precursor lemma</fr:link>, thus there is a unique
                extension <fr:tex display="inline"><![CDATA[\overline {F}]]></fr:tex> st <fr:tex display="inline"><![CDATA[\overline {F} ⊣_π \overline {U}]]></fr:tex>.
            </html:p>
            <html:p>
                There's two ways ways to see the uniqueness situation:
            </html:p>
            <html:ul><html:li>
                    (An intermediate notion) <fr:tex display="inline"><![CDATA[\overline {U}]]></fr:tex> is the unique extension of
                    <fr:tex display="inline"><![CDATA[U]]></fr:tex> to a functor st <fr:tex display="inline"><![CDATA[π]]></fr:tex> is natural in <fr:tex display="inline"><![CDATA[a]]></fr:tex>.
                    We've essentially seen this already, if not literally.
                    For any functor <fr:tex display="inline"><![CDATA[U']]></fr:tex>, naturality in <fr:tex display="inline"><![CDATA[a]]></fr:tex> requires the following square to hold for all <fr:tex display="inline"><![CDATA[g : A(a, b)]]></fr:tex>:
                    
    
    
        
        <html:figure><fr:resource hash="a9692d0c3ec25fa07e8d042666200bcb"><fr:resource-content><html:img src="/forest/a9692d0c3ec25fa07e8d042666200bcb.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
                        \begin {tikzcd}
                            A(FU'a, a) \ar [r, "g∘-"] & A(FU'a, b) \ar [d, "≀"', "π"] \\
                            X(U'a, U'a) \ar [r, "U'g∘-"]\ar [u, "≀"', "π⁻¹"] & X(U'a, U'b)
                        \end {tikzcd}
                    ]]></fr:resource-source></fr:resource></html:figure>
    


                    Thus, <fr:tex display="inline"><![CDATA[∀g. U'(g) = \overline {U}(g)]]></fr:tex>.
                    Then, with <fr:tex display="inline"><![CDATA[\overline {U}]]></fr:tex> a functor and <fr:tex display="inline"><![CDATA[π]]></fr:tex> natural in <fr:tex display="inline"><![CDATA[a]]></fr:tex>, <fr:link href="/forest/hejohns-0007/" title="Precursor to The Core of Adjoint Functors" uri="https://hejohns.github.io/forest/hejohns-0007/" display-uri="hejohns-0007" type="local">the
                    precursor</fr:link> gives us a unique <fr:tex display="inline"><![CDATA[\overline {F}]]></fr:tex> st <fr:tex display="inline"><![CDATA[\overline {F}
                    ⊣ \overline {U}]]></fr:tex> uniquely.
                </html:li>
                <html:li>
                    (Going backwards) Since the definitions of <fr:tex display="inline"><![CDATA[\overline {F}]]></fr:tex> and
                    <fr:tex display="inline"><![CDATA[\overline {U}]]></fr:tex> (in <fr:link href="/forest/hejohns-0007/" title="Precursor to The Core of Adjoint Functors" uri="https://hejohns.github.io/forest/hejohns-0007/" display-uri="hejohns-0007" type="local">the precursor</fr:link>) are not dependent
                    on the other functor, the total adjunction <fr:tex display="inline"><![CDATA[\overline {F} ⊣ \overline {U}]]></fr:tex> is
                    the unique one extending the core by applying the
                    uniqueness result of <fr:link href="/forest/hejohns-0007/" title="Precursor to The Core of Adjoint Functors" uri="https://hejohns.github.io/forest/hejohns-0007/" display-uri="hejohns-0007" type="local">the precusor</fr:link> to each
                    functor in turn, just knowing the other is a well-defined
                    functor.
                </html:li></html:ul></html:li>
        <html:li><html:p>
                (II) wts II <fr:tex display="inline"><![CDATA[⟹ \overline {F}]]></fr:tex> is a functor.
                This is dual.
            </html:p></html:li></html:ul></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>11</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/sub-000E/</fr:uri><fr:display-uri>sub-000E</fr:display-uri><fr:route>/forest/sub-000E/</fr:route><fr:taxon>proof corollary</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        (For <fr:tex display="inline"><![CDATA[V]]></fr:tex>-enriched categories, ) If <fr:tex display="inline"><![CDATA[V]]></fr:tex> is thin, all diagrams commute,
        thus an adjunction core always determines an adjunction.
    </html:p><html:p><fr:tex display="inline"><![CDATA[Set]]></fr:tex> isn't thin, but <fr:tex display="inline"><![CDATA[2]]></fr:tex> is, thus for posets, an adjunction core
        gives rise to a thin adjunction, as remarked <fr:link href="/forest/subb-0006/" title="the core of adjoint monotone functions › https://hejohns.github.io/forest/subb-0006/" uri="https://hejohns.github.io/forest/subb-0006/" display-uri="subb-0006" type="local">here</fr:link>.
        I don't know how useful this lemma is for ordinary Homset categories.
    </html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>5</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:title text="Code">Code</fr:title></fr:frontmatter><fr:mainmatter><html:ul><html:li>
            Contributing to <fr:link href="https://github.com/maxsnew/cubical-categorical-logic" type="external">Cubical Categorical Logic</fr:link>, "cubical agda formalizations of different approaches to categorical semantics of type theories"
        </html:li>
        <html:li><fr:link href="https://github.com/eecs490/gradescope-utils" type="external">Gradescope-Utils</fr:link>, a suite of scripts for grading EECS 490 (programming languages), but also CSV, JSON, processing combinators more broadly
        </html:li></html:ul></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>5</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:title text="Links">Links</fr:title></fr:frontmatter><fr:mainmatter><html:ul><html:li><fr:link href="https://mplse-reading-group.github.io/" type="external">https://mplse-reading-group.github.io/</fr:link></html:li>
        <html:li><fr:link href="https://github.com/hejohns/the-second-pass-of-the-portable-c-compiler" type="external">The Second Pass of the Portable C Compiler</fr:link></html:li></html:ul></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>5</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:title text="
    
        
        
            Jekyll Blog
        
    
">
    
        
        <html:span class="link local">
            <html:a href="/posts.html">Jekyll Blog</html:a>
        </html:span>
    
</fr:title></fr:frontmatter><fr:mainmatter /></fr:tree>
    
    <fr:tree show-metadata="false" expanded="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>5</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:title text="References">References</fr:title></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>10</fr:month><fr:day>29</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/sterling-2020/</fr:uri><fr:display-uri>sterling-2020</fr:display-uri><fr:route>/forest/sterling-2020/</fr:route><fr:title text="An OK Version of Type Theory">An OK Version of Type Theory</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>10</fr:month><fr:day>29</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:taxon>abstract</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        What’s the right way to write down type theory (with or without
        universes)? It’s unclear that there is a single right way, but there
        are a number of good lessons we’ve learned over time that we can use to
        avoid certain pitfalls and bureaucratic rat-holes. These lessons
        include: avoid subtyping and use coercions instead, and make
        presupposition admissibilities hold for obvious rather than complex
        reasons.
    </html:p></fr:mainmatter></fr:tree><html:p>
    I haven't been able to read long articles recently, so I appreciate that
    this note is short and just about one or two things.
</html:p><html:p>
    AFAIU, this short note is about <html:em>very</html:em> syntactical matters.
    It's a sort of retrospective on the author's experiences with these
    low-level things, probably a result of the various proof assistants and
    type theories they'd worked on at that point.
    I don't feel like I 100% follow the flow, but some comments I found
    interesting: 
    (single quotes are actual quotes, double quotes are air "quotes")
</html:p><html:ul><html:li>
        This 'spectrum' of 'very derivable' to 'very admissible' substitution.
        I don't 100% understand what the author means by each approach (eg
        what is meant by a 'pre-term' exactly) although no doubt many people
        will.
        <html:p>
            The 'very derivable' seems to be explicit substitutions, and can be
            taken to the extreme formality by only operating on the last variable
            in the context and requiring weakening, exchange, etc.
            This is not a use-facing language, but something that could be
            elaborated to, for example.
        </html:p>
        <html:p>
            The 'semi-admissible' seems to be the "normal" (meta?) notion of
            substitution on 'raw' (untyped?) terms, with the typing rules set
            up such that the 'typing principle of substitution'
            (presumably the thing that looks like <fr:tex display="inline"><![CDATA[Γ ⊢ M : A, Δ ⊢ δ : Γ ⟹ Δ ⊢ δ*(M) : A]]></fr:tex>)
            is derivable.
            I should probably be ashamed that I'm not clear how one could make
            this derivable aside from directly throwing it in as a rule…
        </html:p>
        <html:p>
            The 'very admissible' approach seems to me, probably unfortunately,
            the most "normal", which is just "normal" substitution on 'raw'
            terms with a typing principle justified by induction on
            derivations.
            I say unfortunately because 'There is no useful consequence of the
            substation principle for dependent type theory being admissible but
            not derivable, so one might as well avoid the headache.'
        </html:p></html:li>
    <html:li>
        A similar story follows for the derivability or admissibility of
        presuppositions (implicit premisses) of judgments.
        'Generally speaking, it is quite perverse for
        [<fr:tex display="inline"><![CDATA[Γ ⊢ a : A ⟹ Γ ⊢ A type]]></fr:tex>]
        to be a rule of type theory', and although I want to agree, I suppose I
        don't see an obvious reason why it should be the case.
        I bring up this seemingly frivolous point because this seems like one way to make the presupposition derivable.
        Otherwise, one can make the presupposition admissible (as "normal") by
        having every rule premissed on its presuppositions.
        'there is essentially zero pay-off to [minimizing the premiss to the rules]'.
    </html:li>
    <html:li>
        'We do not write down any congruence rules! We assume enough rules to
        ensure that definitional equality is a congruence. This is one of the
        main motivations for working in an equational logical framework (to
        rule out any perverse kind of “equality” that is not a congruence!)'
    </html:li>
    <html:li>
        'But let me state what is not negotiable: the most well-adapted notion
        of substitution for dependent type theory is a simultaneous
        substitution [inline figure omitted]. So, a definition of when such a
        simultaneous substitution is well-typed should be given (either by
        rules, or by induction on contexts)'
    </html:li>
    <html:li>
        And lastly, that there are many ways to handle universes and rules for
        them, and that some 'are reasonable but even harder to justify in many
        models', or that some 'has many more useful models'.
        There's a line of work on what this means precisely, which I should get
        to sooner than later.
    </html:li></html:ul><html:p><html:span class="link local">
            <html:a href="/forest/bafkrmibkv3qycoacmxt56soct3pyuemkschm7rsaqrjn6o5gv55itk4e2m.html">paper</html:a>
        </html:span></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/mclarty-1990a/</fr:uri><fr:display-uri>mclarty-1990a</fr:display-uri><fr:route>/forest/mclarty-1990a/</fr:route><fr:title text="Book Review (1990) of John Bell's Toposes and Local Set Theories (1988)">Book Review (1990) of John Bell's Toposes and Local Set Theories (1988)</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><html:span class="link local">
            <html:a href="/forest/bafkrmihi27ba27pi7afcljzxenkg5sxg3mjr6uguupgkygzombp2beaj6i.html">paper</html:a>
        </html:span></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>13</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/scherer-2017/</fr:uri><fr:display-uri>scherer-2017</fr:display-uri><fr:route>/forest/scherer-2017/</fr:route><fr:title text="Deciding equivalence with sums and the empty type">Deciding equivalence with sums and the empty type</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><fr:link href="https://arxiv.org/pdf/1610.01213" type="external">https://arxiv.org/pdf/1610.01213</fr:link>.
    The nice introduction informed me of <fr:link href="/forest/friedman-1975/" title="Equality Between Functionals" uri="https://hejohns.github.io/forest/friedman-1975/" display-uri="friedman-1975" type="local">Equality Between Functionals</fr:link> and <fr:link href="/forest/statman-1985/" title="Equality Between Functionals Revisited" uri="https://hejohns.github.io/forest/statman-1985/" display-uri="statman-1985" type="local">Equality Between Functionals Revisited</fr:link>.
    Referenced on <fr:link href="https://proofassistants.stackexchange.com/a/1177" type="external">stack overflow</fr:link>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>13</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/friedman-1975/</fr:uri><fr:display-uri>friedman-1975</fr:display-uri><fr:route>/forest/friedman-1975/</fr:route><fr:title text="Equality Between Functionals">Equality Between Functionals</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>13</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:taxon>abstract</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        The λ-calculus, in both its typed and untyped forms, has primarily been
        regarded as an attempt to formalize the concept of <html:em>rule</html:em> or
        <html:em>process</html:em>, and ultimately to provide a new foundation for mathematics.
        It seems fair to say that this aspect of the λ-calculus is currently in an
        embryonic state of development, awaiting further conceptual advances.
    </html:p><html:p>
        There is, however, another aspect of the <html:em>typed</html:em> λ-calculus, which is
        readily understood. This is its connection with the full classical finite
        type structure over ω, (i.e., with the functionals of finite type). In an
        obvious way, each closed term in the typed λ-calculus defines a functional
        of finite type over ω.  Call a functional <html:em>simple</html:em> if it is given by
        some closed term in the typed x-calculus.
    </html:p><html:p>
        Several definitions of <html:em>convertibility</html:em> between terms in the λ-calculus,
        with or without types, have been considered. The motivation for introducing
        these definitions has primarily been to analyze the notion of the
        <html:em>identity</html:em> between rules, or processes. The relation <fr:tex display="inline"><![CDATA[⊢ s = t]]></fr:tex> defined
        in the text, is equivalent to one of these definitions of convertibility.
        It is easy to see that any two convertible terms define the same functional
        of finite type. We show here that any two non- convertible terms define
        different functionals of finite type.[This result was obtained in 1970.]
        This, coupled with the known decidability of convertibility, tells us that
        "equality between simple functionals is recursive."
    </html:p></fr:mainmatter></fr:tree><html:p>
    Square brackets denote author's footnotes.
    
    
    
        
        <html:span class="link local">
            <html:a href="/forest/bafkrmiagxqteubvzmyrlx7zy7uv4k2zgrgbwt7uqn2yd6edpg5uuxkovni.html">paper</html:a>
        </html:span></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>13</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/statman-1985/</fr:uri><fr:display-uri>statman-1985</fr:display-uri><fr:route>/forest/statman-1985/</fr:route><fr:title text="Equality Between Functionals Revisited">Equality Between Functionals Revisited</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>13</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:taxon>abstract</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        In this note we shall try to place Friedman's remarkable little paper
        (<fr:link href="/forest/friedman-1975/" title="Equality Between Functionals" uri="https://hejohns.github.io/forest/friedman-1975/" display-uri="friedman-1975" type="local">3</fr:link>) in the context of what we know today about the model
        theory of the typed λ-calculus. In order to do this, it is appropriate to
        survey recent work in this area, in so far as it touches on issues raised
        by Friedman. We don't intend a general survey; much will be left out. In
        particular, we shall omit discussion of unification, fragments of L.C.F.,
        and polymorphic types, which are areas of interest to the author, and the
        specialist will surely find other omissions. However, we will try to show
        the reader how Friedman's paper <html:em>lays the foundation</html:em> for the general
        model theory of the typed λ-calculus.
    </html:p><html:p>
        The plan of this note is the following. We shall begin by a brief, informal
        introduction to the subject. The reader is then advised to read Friedman's
        paper. It is, after all, quite accessible and easy to read. We shall then
        proceed to consider the three major issues touched on in "Equality between
        functionals" as we view them today. These issues are
        <html:ul><html:li>
                completness theorems,
            </html:li>
            <html:li>
                the solvability of higher type functional equations, and
            </html:li>
            <html:li>
                logical relations.
            </html:li></html:ul></html:p></fr:mainmatter></fr:tree><html:p><html:span class="link local">
            <html:a href="/forest/bafkrmigbaxrflfeaosmua6pr3fn3xpji3olimdwczsqduwgzdvkcbt57ou.html">paper</html:a>
        </html:span></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>24</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/sterling-2022/</fr:uri><fr:display-uri>sterling-2022</fr:display-uri><fr:route>/forest/sterling-2022/</fr:route><fr:title text="Naïve Logical Relations in Synthetic Tait Computability">Naïve Logical Relations in Synthetic Tait Computability</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>24</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:taxon>abstract</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        Logical relations are the main tool for proving <html:strong>positive</html:strong>
        properties of logics, type theories, and programming languages:
        canonicity, decidability, conservativity, computational adequacy, and
        more. Logical relations combine pure syntax with non-syntactic objects
        that are parameretized in syntax in a somewhat complex way; the
        sophistication of possible parameterizations makes logical relations a
        tool that is primarily accessible to specialists. In the spirit of
        Halmos’ Naïve Set Theory, we advance a new viewpoint on logical
        relations based on synthetic Tait computability, an internal language
        for categories of logical relations. In <html:strong>synthetic Tait
        computability</html:strong>, logical relations are manipulated as if they were sets,
        making the essence of many complex logical relations arguments
        accessible to non-specialists.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>24</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>25</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date></fr:frontmatter><fr:mainmatter><html:p>
        I can't quite follow the <html:em>phase distinction</html:em> and only have a very vague
        idea of what's going on starting at p. 9.
    </html:p><html:p>
        From what I can tell, the idea is to work in the internal language of some
        topos-- really the internal "agda-like dependent type theory"-- to
        construct the logical relations category, instead of doing something like
        (analytic) gluing.
        How this makes anything easier is beyond me at the moment.
        I can't tell if the <html:em>object-space/meta-space</html:em> discussion is clear
        and I just don't have some context, or it's actually presented almost
        mystically.
        The mention of <fr:link href="/forest/carette-kiselyov-shan-2007/" title="Finally Tagless, Partially Evaluated" uri="https://hejohns.github.io/forest/carette-kiselyov-shan-2007/" display-uri="carette-kiselyov-shan-2007" type="local">finally tagless encodings</fr:link>
        and 
    
    
        
        <html:span class="link local">
            <html:a href="/forest/bafkrmialfvovionhuz3sas33bwebonhh44n2lfqe4vbbptwlzmiyw2u2j4.html">a justification for hoas</html:a>
        </html:span>
    

 doesn't seem super
        on-the-point, but if it's mentioned it must be for good reason…
    </html:p><html:p>
        Again, quotes are air-quotes, not actual quotes.
        
    
    
        
        <html:span class="link local">
            <html:a href="/forest/bafkrmifiptalnishfatx4nhy7auqdh4rjarm7t3lsexy3aqjsa3nipsqty.html">paper</html:a>
        </html:span></html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>11</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/Grunbacher-2003/</fr:uri><fr:display-uri>Grunbacher-2003</fr:display-uri><fr:route>/forest/Grunbacher-2003/</fr:route><fr:title text="POSIX Access Control Lists on Linux">POSIX Access Control Lists on Linux</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>11</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:taxon>abstract</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        This paper discusses file system Access Control Lists as implemented in
        several UNIX-like operating systems. After recapitulating the concepts
        of these Access Control Lists that never formally became a POSIX
        standard, we focus on the different aspects of implementation and use
        on Linux.
    </html:p></fr:mainmatter></fr:tree><html:p><html:span class="link local">
            <html:a href="/forest/bafkrmib253gxzruitxxm2fn56qwf64tjr3fwrjyhjijivifrjp6ks55r6m.html">paper</html:a>
        </html:span></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/lawvere-1970/</fr:uri><fr:display-uri>lawvere-1970</fr:display-uri><fr:route>/forest/lawvere-1970/</fr:route><fr:title text="Quantifiers and Sheaves">Quantifiers and Sheaves</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:taxon>abstract</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        The unity of opposites in the title is essentially that between logic
        and geometry, and there are compelling reasons for maintaining that
        geometry is the leading aspect. At the same lime, in the present joint
        work with Myles Tierney there are important influences in the other
        direction: a Grothendieck "topology" appears most naturally as a
        modal operator, of the nature "it is locally the case that", the
        usual logical operators such as ∀, ∃, ⇒ have natural analogues which
        apply to families of geometrical objects rather than to propositional
        functions, and an important technique is to lift constructions first
        understood for "the" category <html:strong>S</html:strong> of abstract sets to an arbitrary
        topos. We first sum up the principal contradictions of the
        Grothendieck-Giraud-Verdier theory of topos in terms of four or five
        adjoint functors, significantly generalizing the theory to free it of
        reliance on an <html:em>external</html:em> notion of infinite limit (in particular
        enabling one to claim that in a sense logic is a special case of
        geometry). The method thus developing is then applied to intrinsically
        define the concept of Boolean-valued model for <html:strong>S</html:strong> (<html:strong>BVM/S</html:strong>) and to prove
        the independence of the continuum hypothesis free of any use of
        transfinite induction. The second application of the method outlined
        here is an intrinsic geometric construction of the Chevalley-Hakim
        global spectrum of a ringed topos free of any choice of a "site of
        definition".
    </html:p><html:p>
        When the main contradictions of a thing have been found,
        the scientific procedure is to summarize them in slogans which one then
        constantly uses as an ideological weapon for the further development
        and transformation of the thing. Doing this for "set theory" requires
        taking account of the experience that the main pairs of opposing
        tendencies in mathematics take the form of adjoint functors, and frees
        us of the mathematically irrelevant traces (<fr:tex display="inline"><![CDATA[∈]]></fr:tex>) left behind by the
        process of accumulating (<fr:tex display="inline"><![CDATA[∪]]></fr:tex>) the power set (<fr:tex display="inline"><![CDATA[\mathcal {P}]]></fr:tex>) at each stage of a
        metaphysical "construction". Further, experience with sheaves,
        permutation representations, algebraic spaces, etc., shows that a "set
        theory" for geometry should apply not only to abstract sets divorced
        from time, space, ring of definition, etc., but also to more general
        sets which do in fact develop along such parameters. For such sets,
        usually logic is "intuitionistic" (in its formal properties)
        usually the axiom of choice is false, and usually a set is not
        determined by its points defined over <fr:tex display="inline"><![CDATA[1]]></fr:tex> only.
    </html:p></fr:mainmatter></fr:tree><html:p>
    I have not read this, and have no idea what "contradictions" he's referring to.
    
    
    
        
        <html:span class="link local">
            <html:a href="/forest/bafkrmifeoznnrye2fegtd2rhqxffkaabnyhy2dwupb7hvkw4kn2ioxv55e.html">paper</html:a>
        </html:span></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/blass-2003/</fr:uri><fr:display-uri>blass-2003</fr:display-uri><fr:route>/forest/blass-2003/</fr:route><fr:title text="Resource Consciousness in Classical Logic">Resource Consciousness in Classical Logic</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:taxon>abstract</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        Using Herbrand's Theorem, we define simple Herbrand validity, a sort of
        resource consciousness that makes sense in classical predicate logic.
        We characterize the propositional formulas all of whose first-order
        instances are simply Herbrand valid. The characterization turns out to
        coincide with a known characterization of game semantical validity for
        multiplicative formulas.
    </html:p></fr:mainmatter></fr:tree><html:p>
    This is currently a "would like to read, but no urgency" paper, because
    Blass + Herbrand's theorem.
    
    
    
        
        <html:span class="link local">
            <html:a href="/forest/bafkrmid5nmi2waj6hx4u5a5fm7h7qk5kyt6cnoiza47bjah42uupelzosu.html">paper</html:a>
        </html:span></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hofmann-1999/</fr:uri><fr:display-uri>hofmann-1999</fr:display-uri><fr:route>/forest/hofmann-1999/</fr:route><fr:title text="Semantical analysis of higher-order abstract syntax">Semantical analysis of higher-order abstract syntax</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:taxon>abstract</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        A functor category semantics for higher-order abstract syntax is
            proposed with the following aims: relating higher-order and first
            order syntax, justifying induction principles, suggesting new
            logical principles to reason about higher-order syntax.
    </html:p></fr:mainmatter></fr:tree><html:p><html:span class="link local">
            <html:a href="/forest/bafkrmialfvovionhuz3sas33bwebonhh44n2lfqe4vbbptwlzmiyw2u2j4.html">paper</html:a>
        </html:span></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/mclarty-1990b/</fr:uri><fr:display-uri>mclarty-1990b</fr:display-uri><fr:route>/forest/mclarty-1990b/</fr:route><fr:title text="The Uses and Abuses of the History of Topos Theory">The Uses and Abuses of the History of Topos Theory</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:taxon>abstract</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        The view that toposes originated as generalized set theory is a figment of
        set theoretically educated common sense. This false history obstructs
        understanding of category theory and especially of categorical foundations
        for mathematics. Problems in geometry, topology, and related algebra led to
        categories and toposes. Elementary toposes arose when Lawvere's interest in
        the foundations of physics and Tierney's in the foundations of topology led
        both to study Grothendieck's foundations for algebraic geometry. I end with
        remarks on a categorical view of the history of set theory, including a
        false history plausible from that point of view that would make it helpful
        to introduce toposes as a generalization from set theory.
    </html:p></fr:mainmatter></fr:tree><html:p><html:span class="link local">
            <html:a href="/forest/bafkrmicdvjwin7j3yfn4nglv7eopjil7q6yya6r5bjlco5farqk3c347de.html">paper</html:a>
        </html:span></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/marquis-reyes-2012/</fr:uri><fr:display-uri>marquis-reyes-2012</fr:display-uri><fr:route>/forest/marquis-reyes-2012/</fr:route><fr:title text="The history of categorical logic: 1963-1977">The history of categorical logic: 1963-1977</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    I have not read this. This might be a good source, aside from <fr:link href="/forest/ronnie-chen/" title="Ronnie Chen" uri="https://hejohns.github.io/forest/ronnie-chen/" display-uri="ronnie-chen" type="local">Ronnie Chen</fr:link>,
    where the viewpoint of "generalized algebraic semantics" is developed.
</html:p><html:p><html:span class="link local">
            <html:a href="/forest/bafkrmiahry7qcmlthqrr3wr23p5ifrmeu3mcd7ok7sldtcbb2xvlpzzdve.html">paper</html:a>
        </html:span></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/blass-1988/</fr:uri><fr:display-uri>blass-1988</fr:display-uri><fr:route>/forest/blass-1988/</fr:route><fr:title text="Topoi and Computation">Topoi and Computation</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:taxon>abstract</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        This is the written version of a talk given at the C.I.R.M. Workshop on
        Logic in Computer Science at Marseille, France in June, 1988. Its purpose
        is to argue that there is a close connection between the theory of
        computation and the geometric side of topos theory. We begin with a brief
        outline of the history and basic concepts of topos theory.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>1</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:taxon>notes</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        Prof. Blass essentially described this background over the course of
        the logic seminar last semester (as comments at various meetings,
        culminating with a full talk), but this is a nice written account of
        the history of topos theory, the relation between Grothendieck and
        Elementary topoi, and the relation between geometric and logical
        morphisms.
    </html:p></fr:mainmatter></fr:tree><html:p><html:span class="link local">
            <html:a href="/forest/bafkrmiep4vcawitkshumdy2jim72fl6ryefe3a5nitmabzyppidrwzrpem.html">paper</html:a>
        </html:span></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors><fr:contributor><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:contributor></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>28</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/quine-1960/</fr:uri><fr:display-uri>quine-1960</fr:display-uri><fr:route>/forest/quine-1960/</fr:route><fr:title text="Variables Explained Away">Variables Explained Away</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    "Separately I sent a copy of Quine's 1950 paper on combinatory logic to
    this list. Whatever else you might think about Quine, he was a terrific
    explainer, and this is the best introduction to the subject I know."
</html:p><html:p>
    (Yes, that 50 should be a 60(b).)
    Here is the followup I wrote:
</html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>28</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:taxon>email</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        Thanks for sharing this nice little note, which sketches a combinatory
        (classical) first-order logic.
    </html:p><html:p>
        I was surprised by the mention of von Neumann 1925 in this snippet:
    </html:p><html:p>
        "In a way our operators are reminiscent also of the axioms of class
        existence in Neumann, J. von, Eine Axiomatisierung der Mengenlehre,
        Journal für reine und ungewandte Mathematik 154: 219-240, 1925, despite
        dissimilarity of purpose." (Footnote 1, p. 346)
    </html:p><html:p>
        From what I gather, the reminiscence with von Neumann 1925 (I assume
        Quine was principally referring to the "III. Logical Construction
        Axioms") is that the purposes (of Quine's predicate combinators and von
        Neumann's axioms of existence of II-objects) are actually quite
        similar.
    </html:p><html:p>
        It seems that the system of von Neumann 1925 isn't couched in any
        particular formal system (although it's maybe implicitly first-order,
        and apparently translated into such by Skolem 1938), thus von Neumann
        wants to recover from any definite property ("logical condition") on
        I-objects, the (existence of a) class (II-object) of those I-objects.
        Wikipedia calls this the <fr:link href="https://en.wikipedia.org/wiki/Von_Neumann%E2%80%93Bernays%E2%80%93G%C3%B6del_set_theoryClass_existence_theorem" type="external">class existence theorem</fr:link>.
    </html:p><html:p>
        (More generally, the "reduction theorem" in von Neumann 1925 says that
        every expression of I-objects (definable class-function) is indeed a
        II-object (class-function). This restricts to logical conditions and
        classes.)
    </html:p><html:p>
        To do this economically, the existence of a few basic
        combinator-classes are stipulated (=, ∀, ∃!), and more complex logical
        conditions are put in "normal form" by eliminating variables with the
        combinator-classes.  The 'uneconomic' way, if von Neumann 1925 were
        working in an explicit logic, would be to just stipulate a schema of
        class comprehension (also mentioned in the Wikipedia article), as
        included in the back of Chang and Keisler.
    </html:p><html:p>
        Actually, while there are explicit class existence axioms for absorbing
        =, ∀, ∃!, I don't see any for things like ∧ or ¬, and don't see how
        they'd follow with the other axioms, but I suppose they must. The
        Wikipedia article has a write-up starting from more user-friendly
        axioms.
    </html:p><html:p>
        In any case, I hadn't realized that the historic move to make precise
        the notion of 'definite property' as 'first-order definable' was
        nontrivial, and found this connection with Quine's note interesting,
    </html:p><html:p>
        Johnson He
    </html:p></fr:mainmatter></fr:tree><html:ul><html:li><html:span class="link local">
            <html:a href="/forest/bafkrmifcmgrq4gl2z5mfdrtoespqyjtft7cpndxvn7sbmdq3cbmpy7txha.html">paper</html:a>
        </html:span></html:li>
    <html:li><fr:link href="/forest/von-neumann-1925/" title="An Axiomatization of Set Theory" uri="https://hejohns.github.io/forest/von-neumann-1925/" display-uri="von-neumann-1925" type="local">An Axiomatization of Set Theory</fr:link></html:li></html:ul></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>21</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/maddy-2019/</fr:uri><fr:display-uri>maddy-2019</fr:display-uri><fr:route>/forest/maddy-2019/</fr:route><fr:title text="What do we want a foundation to do?">What do we want a foundation to do?</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>21</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:taxon>abstract</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        Mainstream orthodoxy holds that set theory provides a foundation for
        contemporary pure mathematics. Critics of this view argue that category
        theory, or more recently univalent foundations, is better suited to this
        role. Some observers of this controversy suggest that it might be resolved
        by a better understanding of what a foundation is. Despite considerable
        sympathy to this line of thought, I’m skeptical of the unspoken assumption
        that there’s an underlying concept of a ‘foundation’ up for analysis, that
        this analysis would properly guide our assessment of the various
        candidates. In contrast, it seems to me that the considerations the
        combatants offer against opponents and for their preferred candidates, as
        well as the roles each candidate actually or potentially succeeds in
        playing, reveal quite a number of different jobs that mathematicians want
        done. What matters is these jobs we want our theories to do and how well
        they do them. Whether any or all of them, jobs or theories, deserves to be
        called ‘foundational’ is really beside the point.
    </html:p></fr:mainmatter></fr:tree><html:p>
    A nice article that can be briefly summarized as
    <html:ul><html:li>
            There is no one clear set of desiderata for a <html:em>foundational</html:em>
            system, whatever that means
        </html:li>
        <html:li>
            Classical set theory is perfectly fine as a foundational system in
            the traditionally (ie ZFC) conceived sense
        </html:li>
        <html:li>
            There is promise for the new 21ˢᵗ century desiderata of <html:em>proof
            checking</html:em> (recalling Voevodsky's concerns with correctness "at the
            bleeding edge").
        </html:li></html:ul></html:p><html:p>
    The contrast between the minimalistic ZFC and potentially enormous "user
    friendly" univalent type theories is reminiscent of Hilbert style proofs vs
    natural deduction. Indeed, it's like how Ronnie calls set theory "the
    machine/assembly language of math" (kind of paraphrase), and Max calls SK
    combinators "the machine/assembly language of λ-calculus".
</html:p><html:p>
    Natural deduction is certainly more complicated than SK/Hilbert proof
    systems, but has nice usability properties that are worth study and
    implementation.
    The general mathematical trend seems to be that of starting with a spartan
    formal system, then gradually making it more user friendly to accomodate
    every increasingly complicated mathematics, where the minimalistic system
    starts to leave one wanting.
</html:p><html:p>
    Maddy only mentions Coq, but being 2019 it would've been nice if somewhat
    redundant to mention other proof assistants eg Cubical Agda.
</html:p><html:p>
    I've used quotes here as air quotes, not actual quotes of Maddy.
    
    
    
        
        <html:span class="link local">
            <html:a href="/forest/bafkrmigt6axcfsbkcfk6uxyjizk5f2vkaeepr6pqjam5nzkjmoroqkclfu.html">paper</html:a>
        </html:span></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>2</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/Adámek-Rosický-Vitale-2010/</fr:uri><fr:display-uri>Adámek-Rosický-Vitale-2010</fr:display-uri><fr:route>/forest/Adámek-Rosický-Vitale-2010/</fr:route><fr:title text="Algebraic Theories : A Categorical Introduction to General Algebra">Algebraic Theories : A Categorical Introduction to General Algebra</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter /></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>28</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/von-neumann-1925/</fr:uri><fr:display-uri>von-neumann-1925</fr:display-uri><fr:route>/forest/von-neumann-1925/</fr:route><fr:title text="An Axiomatization of Set Theory">An Axiomatization of Set Theory</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    One of the early NBG papers. Maybe "the" NBG paper.
    My notes on this are currently in <fr:link href="/forest/quine-1960/" title="Variables Explained Away" uri="https://hejohns.github.io/forest/quine-1960/" display-uri="quine-1960" type="local">Variables Explained Away</fr:link>.
</html:p><html:p>
    English translation in <fr:link href="/forest/van-heijenoort-1967/" title="From Frege To Gödel" uri="https://hejohns.github.io/forest/van-heijenoort-1967/" display-uri="van-heijenoort-1967" type="local">From Frege To Gödel</fr:link>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>7</fr:month><fr:day>11</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/grayson-2018/</fr:uri><fr:display-uri>grayson-2018</fr:display-uri><fr:route>/forest/grayson-2018/</fr:route><fr:title text="An introduction to univalent foundations for mathematicians">An introduction to univalent foundations for mathematicians</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><fr:link href="https://unimath.github.io/minneapolis2024/" type="external">"An gentle introduction to univalent
    foundations."</fr:link>,
    but still made much easier to read after the <fr:link href="/forest/cubical-categorical-logic/" title="maxsnew/cubical-categorical-logic" uri="https://hejohns.github.io/forest/cubical-categorical-logic/" display-uri="cubical-categorical-logic" type="local">maxsnew/cubical-categorical-logic</fr:link>
    hacking experience.
</html:p><html:p>
    The "two examples, punchline third" expository pattern is very nice.
</html:p><html:p><fr:link href="https://arxiv.org/abs/1711.01477v3" type="external">https://arxiv.org/abs/1711.01477v3</fr:link></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>6</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/jacobs-1999/</fr:uri><fr:display-uri>jacobs-1999</fr:display-uri><fr:route>/forest/jacobs-1999/</fr:route><fr:title text="Categorical Logic and Type Theory">Categorical Logic and Type Theory</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter /></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>2</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/awodey-2010/</fr:uri><fr:display-uri>awodey-2010</fr:display-uri><fr:route>/forest/awodey-2010/</fr:route><fr:title text="Category Theory">Category Theory</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    First book I used to seriously study category theory.
    Terse.
    No frills.
    A little about logic.
    Good.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>31</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/mclarty-1992/</fr:uri><fr:display-uri>mclarty-1992</fr:display-uri><fr:route>/forest/mclarty-1992/</fr:route><fr:title text="Elementary Categories, Elementary Toposes">Elementary Categories, Elementary Toposes</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter /></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>24</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/carette-kiselyov-shan-2007/</fr:uri><fr:display-uri>carette-kiselyov-shan-2007</fr:display-uri><fr:route>/forest/carette-kiselyov-shan-2007/</fr:route><fr:title text="Finally Tagless, Partially Evaluated">Finally Tagless, Partially Evaluated</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>24</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:taxon>abstract</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        We have built the first family of tagless interpretations for a
        higher-order typed object language in a typed metalanguage (Haskell or
        ML) that require no dependent types, generalized algebraic data types,
        or postprocessing to eliminate tags. The statically type-preserving
        interpretations include an evaluator, a compiler (or staged evaluator),
        a partial evaluator, and call-by-name and call-by-value CPS
        transformers.
    </html:p><html:p>
        Our main idea is to encode HOAS using cogen functions rather than data
        constructors. In other words, we represent object terms not in an
        initial algebra but using the coalgebraic structure of the λ-calculus.
        Our representation also simulates inductive maps from types to types,
        which are required for typed partial evaluation and CPS
        transformations.
    </html:p><html:p>
        Our encoding of an object term abstracts over the various ways to
        interpret it, yet statically assures that the interpreters never get
        stuck.  To achieve self-interpretation and show Jones-optimality, we
        relate this exemplar of higher-rank and higher-kind polymorphism to
        plugging a term into a context of let-polymorphic bindings.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>24</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>25</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:taxon>notes</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        This is the APLAS version (conference paper). There is a roughly twice
        as long journal version.
    </html:p><html:p>
        I didn't study a lot of the probably more interesting aspects of this
        work.
        I just wanted a first/resonant-understanding of "what does <html:em>finally
        tagless</html:em> mean?".
    </html:p><html:p>
        It seems the very basic idea is about the general problem of DSLs.
        The very short way to say it, is that we like to construct languages as
        object languages of nice meta languages.
        For example, a nice meta languages gives us nice primitives to reuse as
        the denotational semantics of the object language.
        A classic example is to use the <html:code>Int</html:code> type in the meta language as
        the semantics of the DSL/embedded/object language's numeric type.
    </html:p><html:p>
        Most people's knee jerk reaction is to encode the object language as an
        ADT. This is fine and well, and can be called <html:em>initial</html:em> in the sense
        that it is the free syntax generated by the encoded rules/initial
        algebra/inductive dataype.
        But the naïve TODO
    </html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>2</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/makkai-reyes-1977/</fr:uri><fr:display-uri>makkai-reyes-1977</fr:display-uri><fr:route>/forest/makkai-reyes-1977/</fr:route><fr:title text="First Order Categorical Logic">First Order Categorical Logic</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    I've heard/been told this is <html:em>the</html:em> book for, well, the subject in the
    title, and Makkai completeness.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>28</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/van-heijenoort-1967/</fr:uri><fr:display-uri>van-heijenoort-1967</fr:display-uri><fr:route>/forest/van-heijenoort-1967/</fr:route><fr:title text="From Frege To Gödel">From Frege To Gödel</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    A+. I should get a second copy to gift whenever needed.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors><fr:contributor><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:contributor></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>11</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/millies-zeilberger-2015/</fr:uri><fr:display-uri>millies-zeilberger-2015</fr:display-uri><fr:route>/forest/millies-zeilberger-2015/</fr:route><fr:title text="Functors are Type Refinement Systems">Functors are Type Refinement Systems</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>11</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:taxon>abstract</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        The standard reading of type theory through the lens of category theory
        is based on the idea of viewing a type system as a category of
        well-typed terms. We propose a basic revision of this reading: rather
        than interpreting type systems as categories, we describe them as
        functors from a category of typing derivations to a category of
        underlying terms. Then, turning this around, we explain how in fact any
        functor gives rise to a generalized type system, with an abstract
        notion of typing judgment, typing derivations and typing rules. This
        leads to a purely categorical reformulation of various natural classes
        of type systems as natural classes of functors. The main purpose of
        this paper is to describe the general framework (which can also be seen
        as providing a categorical analysis of refinement types), and to
        present a few applications. As a larger case study, we revisit
        Reynolds’ paper on “The Meaning of Types” (2000), showing how the
        paper’s main results may be reconstructed along these lines.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>11</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:title text="Sections 1-2">Sections 1-2</fr:title></fr:frontmatter><fr:mainmatter><html:p><html:em>What</html:em> is a logical relation?
        A LR is just a model of the syntax, used to prove <fr:tex display="inline"><![CDATA[∀M]]></fr:tex> statements.
        Thus, it's usually <html:em>just</html:em> a model "above" (or a structure preserving
        functor into) the syntax, typically trivially constructed as a pullback
        (it's hard in general to concoct models with structure preserving maps
        into the syntax).
        This is so we can take advantage of the universal property of the
        syntax (its initiality), as we always do (eg classical soundness of
        Prop logic).
        The initiality lets us lift any syntactic term into the model, and talk
        about it in the model. The projection of the model then let's us
        actually say something about the syntax itself.
        So a logical relations argument is <html:em>just</html:em> a clever choice of model,
        to let us say something interesting/talk about what we care about.
    </html:p><html:p>
        So (classical) parametricity (a la Reynolds '83) is just this.
        He constructs a set-theoretic model of system F (all models in the
        paper are set theoretic) out of <html:em>two</html:em> standard models.
        In terms of data abstraction/automata, the point is to construct a
        bisimulation between the two models, so we can say that two types are
        "the same"-- every step in the program preserves the relation in
        lock-step.
        This is entirely analogous to canonicity, where we need to actually
        reason about the whole language preserving the type, not just intro and
        elims for that type, for a stronger inductive hypothesis.
    </html:p><html:p>
        This way, we can show that two different semantics and implementations
        for a <html:code>intset</html:code> type are in a precise sense, "the same".  We
        typically relate a naive implementation and a optimized implementation.
        That is, the reference and optimized implementations are
        bisimilar/extensionally equivalent.
    </html:p><html:p>
        I'm still not super clear on why parametricity fundamentally is tied
        with this notion of data hiding.  I guess it's that to give an account
        of "operating on a type, just knowing it's a type", one has to give a
        notion of "just knowing it's a type".  For this, Reynolds defines a
        notion of "respecting interfaces" w/ relations between models, and that
        polymophic terms respect any interface?
    </html:p><html:p>
        That last question is that the "constructing a bisimulation between two
        models" view seems to make sense, but as a phrasing of parametricity,
        it should really be that "for any two models, we can always construct
        (using a LR) a bisimulation between them".
        Assuming it's actually true eg you can't construct the model if you say
        that the empty intlist is related to a nonempty one.
    </html:p><html:p>
        And do we get anything interesting if one of the models is itself the syntax?
        Is this what parametricity is?
        What if we put the same model on both sides? It should be trivial, thinking of it as a bisimulation, but I guess it just gives you a logical predicate.
        What about the syntax as a "closed terms" henkin model?
    </html:p><html:p>
        Maybe I'm finally close to being able to understand what a Kripke
        logical relation is.
    </html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hinman-2005/</fr:uri><fr:display-uri>hinman-2005</fr:display-uri><fr:route>/forest/hinman-2005/</fr:route><fr:title text="Fundamentals of Mathematical Logic">Fundamentals of Mathematical Logic</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    The <html:strong>tome</html:strong>, sometimes used at Michigan, but it was never (one of) my
    course text(s). I haven't used it much for reading either, owing to the
    large amount of new notation one has to refresh every time you open the
    book, but it's a solid reference book.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>3</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/lambek-scott-1986/</fr:uri><fr:display-uri>lambek-scott-1986</fr:display-uri><fr:route>/forest/lambek-scott-1986/</fr:route><fr:title text="Introduction to higher order categorical logic">Introduction to higher order categorical logic</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter /></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>15</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/shoenfield-1967/</fr:uri><fr:display-uri>shoenfield-1967</fr:display-uri><fr:route>/forest/shoenfield-1967/</fr:route><fr:title text="Mathematical Logic">Mathematical Logic</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter /></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>15</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/logicmatters/</fr:uri><fr:display-uri>logicmatters</fr:display-uri><fr:route>/forest/logicmatters/</fr:route><fr:title text="Peter Smith's Book Reviews">Peter Smith's Book Reviews</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    One of my all-time favorite pages on the web (and that's not an uncommonly
    held opinion), a tremendous resource and service for the community. I'm not
    able to evaluate too many of Prof. Smith's opinions, but I don't disagree
    with any of what he's written about the books I have seen.
</html:p><html:p>
    At least I just reread the review of <fr:link href="/forest/shoenfield-1967/" title="Mathematical Logic" uri="https://hejohns.github.io/forest/shoenfield-1967/" display-uri="shoenfield-1967" type="local">Mathematical Logic</fr:link>, and "So this
    neither has the cleanness of a Hilbert system nor the naturalness of a
    natural deduction system. As far as I noticed, nothing is said to motivate
    this seemingly horrible choice as against others." always makes me laugh.
</html:p><html:p><fr:link href="https://www.logicmatters.net/tyl/booknotes/" type="external">https://www.logicmatters.net/tyl/booknotes/</fr:link></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>30</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/rosiak-2022/</fr:uri><fr:display-uri>rosiak-2022</fr:display-uri><fr:route>/forest/rosiak-2022/</fr:route><fr:title text="Sheaf Theory through Examples">Sheaf Theory through Examples</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    open access
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>2</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/maclane-moerdijk-1994/</fr:uri><fr:display-uri>maclane-moerdijk-1994</fr:display-uri><fr:route>/forest/maclane-moerdijk-1994/</fr:route><fr:title text="Sheaves in Geometry and Logic: A First Introduction to Topos Theory">Sheaves in Geometry and Logic: A First Introduction to Topos Theory</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter /></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>2</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/johnstone-2002/</fr:uri><fr:display-uri>johnstone-2002</fr:display-uri><fr:route>/forest/johnstone-2002/</fr:route><fr:title text="Sketches of an Elephant: a topos theory compendium">Sketches of an Elephant: a topos theory compendium</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter /></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>7</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/street-2012/</fr:uri><fr:display-uri>street-2012</fr:display-uri><fr:route>/forest/street-2012/</fr:route><fr:title text="The Core of Adjoint Functors">The Core of Adjoint Functors</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    The first point:
</html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>7</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:taxon>abstract</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        During my Topology lectures at Macquarie University in the 1970s, the
        students and I realized, in proving that a function f between posets was
        order preserving when there was a function u in the reverse direction such
        that f (x) ≤ a if and only if x ≤ u(a), did not require u to be order
        preserving. I realized then that knowing functors in the two directions
        only on objects and the usual hom adjointness isomorphism implied the
        effect of the functors on homs was uniquely determined. Writing this down
        properly led to the present paper.
    </html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>12</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/dummett-1991/</fr:uri><fr:display-uri>dummett-1991</fr:display-uri><fr:route>/forest/dummett-1991/</fr:route><fr:title text="The Logical Basis of Metaphysics">The Logical Basis of Metaphysics</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>12</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:title text="Stability">Stability</fr:title></fr:frontmatter><fr:mainmatter><html:p>
        The opening sentence is what <fr:link href="/forest/zeilberger/" title="Noam Zeilberger" uri="https://hejohns.github.io/forest/zeilberger/" display-uri="zeilberger" type="local">Noam Zeilberger</fr:link> quotes on his work on
        polarity.
    </html:p><html:p>
        What's the relationship between harmony-stability and Pfenning's local
        soundness and completeness?
        They're not literally the same thing, but they're similar.
    </html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>24</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/scott-1980/</fr:uri><fr:display-uri>scott-1980</fr:display-uri><fr:route>/forest/scott-1980/</fr:route><fr:title text="The Presheaf Model for Set Theory">The Presheaf Model for Set Theory</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    (some paper notes TODO)
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="true" expanded="false" toc="false" numbered="false"><fr:frontmatter><fr:authors /><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>2</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/goldblatt-2006/</fr:uri><fr:display-uri>goldblatt-2006</fr:display-uri><fr:route>/forest/goldblatt-2006/</fr:route><fr:title text="Topoi: The Categorial Analysis of Logic">Topoi: The Categorial Analysis of Logic</fr:title><fr:taxon>Reference</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    "Bibliographical Note: This Dover edition, first published in 2006, is a
    slightly corrected unabridged republication of the revised (second) edition
    of the work originally published in 1984 by Elsevier Science Publishers
    B.V., Amsterdam, The Netherlands, as Volume 98 in the North-Holland Series,
    "Studies in Logic and the Foundations of Mathematics." A new Preface and
    updated Bibliography have been specially prepared for this reprint."
</html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree>
</fr:mainmatter>
  <fr:backmatter>
    <fr:tree show-metadata="false" hidden-when-empty="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:title text="References">References</fr:title>
      </fr:frontmatter>
      <fr:mainmatter />
    </fr:tree>
    <fr:tree show-metadata="false" hidden-when-empty="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:title text="Context">Context</fr:title>
      </fr:frontmatter>
      <fr:mainmatter />
    </fr:tree>
    <fr:tree show-metadata="false" hidden-when-empty="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:title text="Backlinks">Backlinks</fr:title>
      </fr:frontmatter>
      <fr:mainmatter />
    </fr:tree>
    <fr:tree show-metadata="false" hidden-when-empty="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:title text="Related">Related</fr:title>
      </fr:frontmatter>
      <fr:mainmatter>
        <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
          <fr:frontmatter>
            <fr:authors>
              <fr:author>
                <fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link>
              </fr:author>
            </fr:authors>
            <fr:date>
              <fr:year>2024</fr:year>
              <fr:month>5</fr:month>
              <fr:day>5</fr:day>
            </fr:date>
            <fr:date>
              <fr:year>2025</fr:year>
              <fr:month>9</fr:month>
              <fr:day>27</fr:day>
            </fr:date>
            <fr:uri>https://hejohns.github.io/forest/hejohns/</fr:uri>
            <fr:display-uri>hejohns</fr:display-uri>
            <fr:route>/forest/hejohns/</fr:route>
            <fr:title text="Johnson He">Johnson He</fr:title>
            <fr:taxon>person</fr:taxon>
          </fr:frontmatter>
          <fr:mainmatter>
    
    <fr:tree show-metadata="false" expanded="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>10</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://hejohns.github.io/forest/hejohns-000O/</fr:uri><fr:display-uri>hejohns-000O</fr:display-uri><fr:route>/forest/hejohns-000O/</fr:route><fr:title text="About Me">About Me</fr:title></fr:frontmatter><fr:mainmatter><html:p>
    I am a PhD student in Computer Science at Indiana University.
    My advisor is <fr:link href="/forest/angiuli/" title="Carlo Angiuli" uri="https://hejohns.github.io/forest/angiuli/" display-uri="angiuli" type="local">Carlo Angiuli</fr:link>.
    I'm interested in logic and related areas of computer science, particularly
    programming languages.
</html:p><html:p>
    This is my <fr:link href="https://www.forester-notes.org/" type="external">forest</fr:link>.
</html:p><html:ul><html:li>
        email: 
    
    
        
        <html:figure><fr:resource hash="f83c75a9d6ef70094cc93da937116500"><fr:resource-content><html:img src="/forest/f83c75a9d6ef70094cc93da937116500.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[hejo@iu.edu]]></fr:resource-source></fr:resource></html:figure></html:li>
    <html:li>
        photo:
        <html:p><html:img src="/forest/bafkrmidnsmym7ovopdtdistedzjytkiqhocv3ef2qwy3yle4gj22ugoogu.jpeg" width="150" height="150" /></html:p></html:li></html:ul></fr:mainmatter></fr:tree>
<fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/forest/hejohns/" title="Johnson He" uri="https://hejohns.github.io/forest/hejohns/" display-uri="hejohns" type="local">Johnson He</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>5</fr:day></fr:date><fr:date><fr:year>2025</fr:year><fr:month>9</fr:month><fr:day>27</fr:day></fr:date><fr:title text="Extended About">Extended About</fr:title></fr:frontmatter><fr:mainmatter><html:p>
        Previously, I was a master's student (SUGS) in Computer Science and Engineering at the
        University of Michigan, where I was an undergraduate before that.
    </html:p><html:ul><html:li>
          email (active indefinitely): 
    
    
        
        <html:figure><fr:resource hash="93fb11d38533dd2ce22fa3fee6c93796"><fr:resource-content><html:img src="/forest/93fb11d38533dd2ce22fa3fee6c93796.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz-cd}
    \usepackage {unicode-math} ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[hejohns@umich.edu]]></fr:resource-source></fr:resource></html:figure></html:li></html:ul><html:p>
        My screen name is <html:code>hejohns</html:code>, eg <fr:link href="https://github.com/hejohns" type="external">https://github.com/hejohns</fr:link>,
        but IU only let you choose from a couple automatically generated
        options, so my username is <html:code>hejo</html:code> there.
    </html:p></fr:mainmatter></fr:tree></fr:mainmatter>
        </fr:tree>
      </fr:mainmatter>
    </fr:tree>
    <fr:tree show-metadata="false" hidden-when-empty="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:title text="Contributions">Contributions</fr:title>
      </fr:frontmatter>
      <fr:mainmatter />
    </fr:tree>
  </fr:backmatter>
</fr:tree>
