├── .github └── FUNDING.yml ├── .gitignore ├── .gitmodules ├── .ruby-gemset ├── CONTRIBUTING.md ├── Gemfile ├── Gemfile.lock ├── README.md ├── _bibliography └── refs.bib ├── _config.yml ├── _includes ├── breadcrumbs.html ├── d-pad.html ├── head.html ├── header.html ├── list.html ├── macro-loader.html ├── search.html └── toc.html ├── _layouts ├── bib.html ├── bibtex.html ├── default.html ├── page.html ├── post.html └── sheafy │ ├── node │ ├── default.md │ ├── result.md │ └── section.md │ └── tree │ └── default.html ├── _lectures ├── categorical-foundations.md └── topos.md ├── _nodes ├── 0000.md ├── 0001.md ├── 0002.md ├── 0003.md ├── 0004.md ├── 0005.md ├── 0006.md ├── 0007.md ├── 0008.md ├── 0009.md ├── 000A.md ├── 000B.md ├── 000C.md ├── 000D.md ├── 000E.md ├── 000F.md ├── 000G.md ├── 000H.md ├── 000I.md ├── 000J.md ├── 000K.md ├── 000L.md ├── 000N.md ├── 000O.md ├── 000P.md ├── 000Q.md ├── 000R.md ├── 000S.md ├── 000T.md ├── 000U.md ├── 000V.md ├── 000W.md ├── 000X.md ├── 000Y.md ├── 000Z.md ├── 0010.md ├── 0011.md ├── 0012.md ├── 0013.md ├── 0014.md ├── 0015.md ├── 0016.md ├── 0017.md ├── 0018.md ├── 0019.md ├── 001A.md ├── 001B.md ├── 001C.md ├── 001D.md ├── 001E.md ├── 001F.md ├── 001G.md ├── 001H.md ├── 001I.md ├── 001J.md ├── 001K.md ├── 001L.md ├── 001M.md ├── 001N.md ├── 001O.md ├── 001P.md ├── 001Q.md ├── 001R.md ├── 001S.md ├── 001T.md ├── 001U.md ├── 001V.md ├── 001W.md ├── 001X.md ├── 001Y.md ├── 001Z.md ├── 0020.md ├── 0021.md ├── 0022.md ├── 0023.md ├── 0024.md ├── 0025.md ├── 0026.md ├── 0029.md ├── 002A.md ├── 002B.md ├── 002C.md ├── 002D.md ├── 002E.md ├── 002F.md ├── 002G.md ├── 002H.md ├── 002I.md ├── 002J.md ├── 002K.md ├── 002L.md ├── 002M.md ├── 002N.md ├── 002O.md ├── 002P.md ├── 002Q.md ├── 002R.md ├── 002S.md ├── 002T.md ├── 002U.md ├── 002V.md ├── 002W.md ├── 002X.md ├── 002Y.md ├── 002Z.md ├── 0030.md ├── 0031.md ├── 0032.md ├── 0033.md ├── 0034.md ├── 0035.md ├── 0036.md ├── 0037.md ├── 0038.md ├── 0039.md ├── 003A.md ├── 003C.md ├── 003D.md └── 003E.md ├── _plugins ├── changelog.rb ├── display_title_filter.rb ├── nlab_tag.rb ├── node_info.rb ├── patch-antex.rb ├── qed_tag.rb ├── ref_tag.rb └── to_numbering_filter.rb ├── assets ├── macros │ ├── jon-tikz.sty │ ├── topos.katex.json │ ├── topos.mathjax.json │ └── topos.sty ├── search.js ├── simple.css └── style.css ├── changelog.md ├── deploy.sh ├── index.md ├── macros ├── macro-kit.rkt └── topos.rkt ├── mint-node.rkt └── setup-worktree.sh /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | github: jonsterling 3 | ko_fi: paolobrasolin 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .antex-cache 2 | .DS_store 3 | compiled 4 | _site 5 | _deploy 6 | *~ 7 | .sass-cache 8 | .jekyll* 9 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonsterling/math/661175965a56e2b94b1f9ed35f993a6f81bb2b82/.gitmodules -------------------------------------------------------------------------------- /.ruby-gemset: -------------------------------------------------------------------------------- 1 | jon-math 2 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Contributions are very welcome; however, this book is being written from a specific point of view, so before contributing you should discuss your idea with the maintainer by opening a thread in the [Discussions](https://github.com/jonsterling/math/discussions) tab. 2 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | ruby '2.7.5' 4 | 5 | gem 'jekyll', '~> 4.2.1' 6 | 7 | group :jekyll_plugins do 8 | gem 'jekyll-antex', '~> 0.8.1' 9 | gem 'jekyll-scholar' 10 | gem 'jekyll-sheafy', '~> 0.3.0' 11 | end 12 | 13 | # kramdown v2 ships without the gfm parser by default. If you're using 14 | # kramdown v1, comment out this line. 15 | gem 'kramdown-parser-gfm' 16 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | addressable (2.8.1) 5 | public_suffix (>= 2.0.2, < 6.0) 6 | antex (0.1.3) 7 | liquid (>= 3, < 6) 8 | nokogiri (~> 1) 9 | bibtex-ruby (6.0.0) 10 | latex-decode (~> 0.0) 11 | citeproc (1.0.10) 12 | namae (~> 1.0) 13 | citeproc-ruby (1.1.14) 14 | citeproc (~> 1.0, >= 1.0.9) 15 | csl (~> 1.6) 16 | colorator (1.1.0) 17 | concurrent-ruby (1.1.10) 18 | csl (1.6.0) 19 | namae (~> 1.0) 20 | rexml 21 | csl-styles (1.0.1.11) 22 | csl (~> 1.0) 23 | em-websocket (0.5.3) 24 | eventmachine (>= 0.12.9) 25 | http_parser.rb (~> 0) 26 | eventmachine (1.2.7) 27 | ffi (1.15.5) 28 | forwardable-extended (2.6.0) 29 | http_parser.rb (0.8.0) 30 | i18n (1.12.0) 31 | concurrent-ruby (~> 1.0) 32 | jekyll (4.2.2) 33 | addressable (~> 2.4) 34 | colorator (~> 1.0) 35 | em-websocket (~> 0.5) 36 | i18n (~> 1.0) 37 | jekyll-sass-converter (~> 2.0) 38 | jekyll-watch (~> 2.0) 39 | kramdown (~> 2.3) 40 | kramdown-parser-gfm (~> 1.0) 41 | liquid (~> 4.0) 42 | mercenary (~> 0.4.0) 43 | pathutil (~> 0.9) 44 | rouge (~> 3.0) 45 | safe_yaml (~> 1.0) 46 | terminal-table (~> 2.0) 47 | jekyll-antex (0.8.1) 48 | antex (~> 0.1.3) 49 | jekyll (>= 3, < 5) 50 | kramdown-parser-gfm (~> 1.1.0) 51 | nokogiri (~> 1) 52 | jekyll-sass-converter (2.2.0) 53 | sassc (> 2.0.1, < 3.0) 54 | jekyll-scholar (7.1.0) 55 | bibtex-ruby (~> 6.0) 56 | citeproc-ruby (~> 1.0) 57 | csl-styles (~> 1.0) 58 | jekyll (~> 4.0) 59 | jekyll-sheafy (0.3.0) 60 | jekyll (>= 3, < 5) 61 | jekyll-watch (2.2.1) 62 | listen (~> 3.0) 63 | kramdown (2.4.0) 64 | rexml 65 | kramdown-parser-gfm (1.1.0) 66 | kramdown (~> 2.0) 67 | latex-decode (0.4.0) 68 | liquid (4.0.3) 69 | listen (3.7.1) 70 | rb-fsevent (~> 0.10, >= 0.10.3) 71 | rb-inotify (~> 0.9, >= 0.9.10) 72 | mercenary (0.4.0) 73 | mini_portile2 (2.8.0) 74 | namae (1.1.1) 75 | nokogiri (1.13.8) 76 | mini_portile2 (~> 2.8.0) 77 | racc (~> 1.4) 78 | pathutil (0.16.2) 79 | forwardable-extended (~> 2.6) 80 | public_suffix (5.0.0) 81 | racc (1.6.0) 82 | rb-fsevent (0.11.2) 83 | rb-inotify (0.10.1) 84 | ffi (~> 1.0) 85 | rexml (3.2.5) 86 | rouge (3.30.0) 87 | safe_yaml (1.0.5) 88 | sassc (2.4.0) 89 | ffi (~> 1.9) 90 | terminal-table (2.0.0) 91 | unicode-display_width (~> 1.1, >= 1.1.1) 92 | unicode-display_width (1.8.0) 93 | 94 | PLATFORMS 95 | ruby 96 | 97 | DEPENDENCIES 98 | jekyll (~> 4.2.1) 99 | jekyll-antex (~> 0.8.1) 100 | jekyll-scholar 101 | jekyll-sheafy (~> 0.3.0) 102 | kramdown-parser-gfm 103 | 104 | RUBY VERSION 105 | ruby 2.7.5p203 106 | 107 | BUNDLED WITH 108 | 2.1.4 109 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ***Notice:*** These lecture notes have now been incorporated into my [Forest](https://github.com/jonsterling/forest). This repository will not be updated except in order to fix broken redirects. 2 | 3 | ----- 4 | 5 | This repository is based on [Krater](https://github.com/paolobrasolin/krater), 6 | a tool for building math-rich websites; the purpose of the present code is to 7 | support "Stacks Project"-style websites, where you create a bunch of files like 8 | `_nodes/00A4.md` that may import each other, and then specify a root like 9 | `_lectures/lecture.md` that imports some node. 10 | 11 | ### Running on your machine 12 | 13 | You will need a running LaTeX installation, including `latexmk`, `dvisvgm` and whatever engine and packages you plan on using. 14 | Chances are that if you're reading this you already have everything you need. 15 | 16 | You will need to [install Ruby 2.7.5][ruby-install-url]; you will need to ensure that 17 | you have ghostscript installed, with the `LIBGS` environment variable correctly 18 | set. On macOS with Homebrew, after installing ghostscript you must add the 19 | following line to your `.bashrc` or `.zshrc`: 20 | 21 | ```bash 22 | export LIBGS=/opt/homebrew/lib/libgs.dylib 23 | ``` 24 | 25 | After that, you can simply 26 | 27 | ```bash 28 | # install dependencies 29 | bundle 30 | # run Jekyll 31 | bundle exec jekyll serve 32 | ``` 33 | 34 | and your website will be available at `http://127.0.0.1:4000//`. 35 | 36 | [ruby-install-url]: https://www.ruby-lang.org/it/documentation/installation/ 37 | 38 | 39 | ### Node UID policy and drafts 40 | 41 | 1. Node UIDs should be added in order; so if the greatest node UID is `00X2`, 42 | then the next node that is committed should be `00X3`. 43 | 44 | 2. When a new node `00X3` is committed, it is permanent: it is not permitted to 45 | rename it, however it is permitted to *delete* it. 46 | 47 | If two branches contain drafted nodes, when one is merged, the node UIDs chosen 48 | on the other branch have to be renamed so that when *they* are committed to 49 | `main`, there are no conflicts and node UIDs are consecutive. This causes 50 | considerable friction, so we will use the following method for drafts. 51 | 52 | 1. In a draft, name any *new* node with an underscore `_00X3`. 53 | 54 | 2. Prior to merging, you may acquire a temporary lock on the entire repository 55 | and rename every node draft node to the next consecutive "permanent" UID. 56 | 57 | 3. Pull requests that involve draft nodes should be squashed prior to being 58 | merged; this is because we want to avoid the auto-generated changelog from 59 | referring to draft nodes that do not exist at merge-time. 60 | 61 | The script `mint-node.rkt` will assist you in determining what the next 62 | permanent UID is. For now you must handle the renaming manually, but in the 63 | future we can include scripts to automate this process. 64 | -------------------------------------------------------------------------------- /_bibliography/refs.bib: -------------------------------------------------------------------------------- 1 | @string{acm = "Association for Computing Machinery"} 2 | @string{apal = "Annals of Pure and Applied Logic"} 3 | @string{cacm = "Communications of the ACM"} 4 | @string{cup = "Cambridge University Press"} 5 | @string{entcs = "Electronic Notes in Theoretical Computer Science"} 6 | @string{eptcs = "Electronic Proceedings in Theoretical Computer Science"} 7 | @string{i&c = "Information and Computation"} 8 | @string{ieee = "IEEE Computer Society"} 9 | @string{jacm = "Journal of the ACM"} 10 | @string{jal = "Journal of Applied Logic"} 11 | @string{jems = "Journal of the European Mathematical Society"} 12 | @string{jfp = "Journal of Functional Programming"} 13 | @string{jpaa = "Journal of Pure and Applied Algebra"} 14 | @string{jsc = "Journal of Symbolic Computation"} 15 | @string{jsl = "The Journal of Symbolic Logic"} 16 | @string{lmcs = "Logical Methods in Computer Science"} 17 | @string{mscs = "Mathematical Structures in Computer Science"} 18 | @string{pacmpl = "Proceedings of the ACM on Programming Languages"} 19 | @string{tcs = "Theoretical Computer Science"} 20 | @string{tocl = "ACM Transactions on Computational Logic"} 21 | @string{toplas = "ACM Transactions on Programming Languages and Systems"} 22 | 23 | @unpublished{streicher:2018, 24 | author = {Streicher, Thomas}, 25 | year = {2018}, 26 | eprint = {1801.02927}, 27 | eprinttype = {arXiv}, 28 | title = {Fibred Categories \`{a} la Jean B\'{e}nabou}, 29 | } 30 | 31 | @article{benabou:1985, 32 | author = {B\'{e}nabou, Jean}, 33 | publisher = cup, 34 | year = {1985}, 35 | doi = {10.2307/2273784}, 36 | journal = {Journal of Symbolic Logic}, 37 | number = {1}, 38 | pages = {10--37}, 39 | title = {Fibered categories and the foundations of naive category theory}, 40 | volume = {50}, 41 | } 42 | 43 | @book{jacobs:1999, 44 | author = {Jacobs, Bart}, 45 | address = {Amsterdam}, 46 | publisher = {North Holland}, 47 | year = {1999}, 48 | number = {141}, 49 | series = {Studies in Logic and the Foundations of Mathematics}, 50 | title = {Categorical Logic and Type Theory}, 51 | } 52 | 53 | @book{sga:4, 54 | author = {Artin, Michael and Grothendieck, Alexander and Verdier, Jean-Louis}, 55 | address = {Berlin}, 56 | publisher = {Springer-Verlag}, 57 | year = {1972}, 58 | note = {S\'{e}minaire de G\'{e}om\'{e}trie Alg\'{e}brique du Bois-Marie 1963--1964 (SGA 4), Dirig\'{e} par M. Artin, A. Grothendieck, et J.-L. Verdier. Avec la collaboration de N. Bourbaki, P. Deligne et B. Saint-Donat, Lecture Notes in Mathematics, Vol. 269, 270, 305}, 59 | title = {Th\'{e}orie des topos et cohomologie \'{e}tale des sch\'{e}mas}, 60 | } 61 | 62 | @book{sga:1, 63 | author = {Grothendieck, Alexander}, 64 | publisher = {Springer-Verlag}, 65 | year = {1971}, 66 | series = {Lecture notes in mathematics}, 67 | title = {Rev\^{e}tements \'{e}tales et groupe fondamental (SGA 1)}, 68 | volume = {224}, 69 | } 70 | 71 | 72 | @article{street:1980, 73 | author = {Street, Ross}, 74 | language = {eng}, 75 | publisher = {Dunod \'{e}diteur, publi\'{e} avec le concours du CNRS}, 76 | url = {http://eudml.org/doc/91227}, 77 | year = {1980}, 78 | journal = {Cahiers de Topologie et G\'{e}om\'{e}trie Diff\'{e}rentielle Cat\'{e}goriques}, 79 | number = {2}, 80 | pages = {111--160}, 81 | title = {Fibrations in bicategories}, 82 | volume = {21}, 83 | } 84 | 85 | @article{ahrens-lumsdaine:2019, 86 | author = {Ahrens, Benedikt and Lumsdaine, Peter LeFanu}, 87 | url = {https://lmcs.episciences.org/5252}, 88 | year = {2019}, 89 | month = mar, 90 | doi = {10.23638/LMCS-15(1:20)2019}, 91 | eprint = {1705.04296}, 92 | eprinttype = {arXiv}, 93 | issue = {1}, 94 | journal = lmcs, 95 | title = {Displayed Categories}, 96 | volume = {15}, 97 | } 98 | 99 | 100 | @book{lawvere-schanuel:2009, 101 | author = {Lawvere, F. William and Schanuel, Stephen H.}, 102 | address = {New York, NY, USA}, 103 | publisher = cup, 104 | year = {2009}, 105 | edition = {2nd}, 106 | isbn = {0-521-89485-9}, 107 | title = {Conceptual Mathematics: A First Introduction to Categories}, 108 | } 109 | 110 | @book{borceux:1994:vol2, 111 | author = {Borceux, Francis}, 112 | publisher = cup, 113 | year = {1994}, 114 | title = {Handbook of Categorical Algebra 2 -- Categories and Structures}, 115 | } 116 | 117 | @misc{streicher:2017:fibered-top, 118 | author = {Streicher, Thomas}, 119 | url = {https://www2.mathematik.tu-darmstadt.de/~streicher/FIBR/fibtop.pdf}, 120 | date = {2011-06}, 121 | note = {Unpublished manuscript}, 122 | title = {Observations on Fibered Toposes}, 123 | } 124 | 125 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | title: The Nursery 2 | email: jon@jonmsterling.com 3 | description: >- 4 | A mathematical web page. 5 | baseurl: &baseurl "/math" 6 | url: "https://www.jonmsterling.com/" 7 | twitter_username: jonmsterling 8 | github_username: jonsterling 9 | 10 | safe: false 11 | source: . 12 | destination: ./_site 13 | exclude: 14 | - .byebug_history 15 | - macros/compiled 16 | - _site 17 | - _bibliography 18 | - setup-worktree.sh 19 | - deploy.sh 20 | 21 | keep_files: 22 | - antex 23 | 24 | markdown: kramdown 25 | kramdown: 26 | input: GFM 27 | syntax_highlighter: rouge 28 | math_engine: null 29 | parse_block_html: true 30 | 31 | antex: 32 | inlining: true 33 | url_path_prefix: *baseurl 34 | 35 | preamble: >- 36 | \usepackage{jon-tikz} 37 | \usepackage{mlmodern,amsfonts,amssymb,amsmath} 38 | 39 | template: | 40 | \documentclass{article} 41 | \pagestyle{empty} 42 | \usepackage{ {{ macrolib }} } 43 | {{ preamble }} 44 | \newsavebox\snippet 45 | \begin{lrbox}{\snippet}{{ prepend }}{{ snippet }}{{ append }}\end{lrbox} 46 | \newwrite\file 47 | \immediate\openout\file=\jobname.yml 48 | \immediate\write\file{em: \the\dimexpr1em} 49 | \immediate\write\file{ex: \the\dimexpr1ex} 50 | \immediate\write\file{ht: \the\ht\snippet} 51 | \immediate\write\file{dp: \the\dp\snippet} 52 | \immediate\write\file{wd: \the\wd\snippet} 53 | \closeout\file 54 | \begin{document}\usebox{\snippet}\end{document} 55 | 56 | commands: 57 | latexmk: 58 | command: 59 | - "TEXINPUTS=.:./assets/macros/:${TEXINPUTS}" 60 | - "latexmk" 61 | - "-output-directory={{ dir.work }}" 62 | - "{{ file.tex }}" 63 | sources: 64 | - "{{ file.tex }}" 65 | targets: 66 | - "{{ file.dvi }}" 67 | - "{{ file.yml }}" 68 | 69 | aliases: # disable most aliases and use server side AnTeX only for complex LaTeX 70 | default: 71 | priority: 20 72 | regexp: !ruby/regexp | 73 | /{%\s*tex\s*(?.*?)%} 74 | (?.*?) 75 | {%\s*endtex\s*%}/mx 76 | options: 77 | classes: [antex, display] 78 | prepend: '$\displaystyle ' 79 | append: $ 80 | display_math: false 81 | inline_math: false 82 | inline_macro: false 83 | 84 | plugins: 85 | - jekyll-scholar 86 | - jekyll/sheafy 87 | 88 | scholar: 89 | bibliography: refs.bib 90 | bibliography_template: bib 91 | details_dir: bibliography 92 | details_layout: bibtex.html 93 | details_link: Details 94 | 95 | header_pages: 96 | - changelog.md 97 | 98 | collections: 99 | lectures: 100 | output: true 101 | nodes: 102 | output: true 103 | 104 | defaults: 105 | - scope: 106 | type: nodes 107 | values: 108 | taxon: section 109 | excerpt: "" 110 | - scope: 111 | type: lectures 112 | values: 113 | taxon: section 114 | excerpt: "" 115 | 116 | sheafy: 117 | inheritable: 118 | - macrolib 119 | references: 120 | matchers: 121 | - !ruby/regexp /{%\s*[cp]?ref (?.+?)\s*%}/ 122 | taxa: 123 | section: 124 | layout: sheafy/tree/default 125 | sublayout: sheafy/node/section 126 | genus: Section 127 | clicker: section 128 | theorem: 129 | layout: sheafy/tree/default 130 | sublayout: sheafy/node/result 131 | genus: Theorem 132 | clicker: result 133 | lemma: 134 | layout: sheafy/tree/default 135 | sublayout: sheafy/node/result 136 | genus: Lemma 137 | clicker: result 138 | corollary: 139 | layout: sheafy/tree/default 140 | sublayout: sheafy/node/result 141 | genus: Corollary 142 | clicker: result 143 | definition: 144 | layout: sheafy/tree/default 145 | sublayout: sheafy/node/result 146 | genus: Definition 147 | clicker: result 148 | exercise: 149 | layout: sheafy/tree/default 150 | sublayout: sheafy/node/result 151 | genus: Exercise 152 | clicker: result 153 | construction: 154 | layout: sheafy/tree/default 155 | sublayout: sheafy/node/result 156 | genus: Construction 157 | clicker: result 158 | computation: 159 | layout: sheafy/tree/default 160 | sublayout: sheafy/node/result 161 | genus: Computation 162 | clicker: result 163 | example: 164 | layout: sheafy/tree/default 165 | sublayout: sheafy/node/result 166 | genus: Example 167 | clicker: result 168 | notation: 169 | layout: sheafy/tree/default 170 | sublayout: sheafy/node/result 171 | genus: Notation 172 | clicker: result 173 | remark: 174 | layout: sheafy/tree/default 175 | sublayout: sheafy/node/result 176 | genus: Remark 177 | clicker: result 178 | intuition: 179 | layout: sheafy/tree/default 180 | sublayout: sheafy/node/result 181 | genus: Intuition 182 | clicker: result 183 | warning: 184 | layout: sheafy/tree/default 185 | sublayout: sheafy/node/result 186 | genus: Warning 187 | clicker: warning 188 | 189 | changelog: 190 | authors: 191 | jon@jonmsterling.com: 192 | name: Jon Sterling 193 | link: https://www.jonmsterling.com/ 194 | carlo@carloangiuli.com: 195 | link: http://www.cs.cmu.edu/~cangiuli/ 196 | paolo.brasolin@gmail.com: 197 | hide: true 198 | -------------------------------------------------------------------------------- /_includes/breadcrumbs.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | {% unless include.list.size == 0 %} 9 | 23 | {% endunless %} 24 | -------------------------------------------------------------------------------- /_includes/d-pad.html: -------------------------------------------------------------------------------- 1 | 31 | 32 | 63 | -------------------------------------------------------------------------------- /_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% if page.collection == "nodes" %} 5 | 6 | {% endif %} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 16 | 18 | 20 | 21 | 23 | 25 | 26 | 28 | 29 | {{page.title}} 30 | 31 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /_includes/header.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {%- assign default_paths = site.pages | map: "path" -%} 5 | {%- assign page_paths = site.header_pages | default: default_paths -%} 6 | {%- assign titles_size = site.pages | map: 'title' | join: '' | size -%} 7 | 8 | {%- if titles_size > 0 -%} 9 | 23 | {%- endif -%} 24 | 25 |
26 | -------------------------------------------------------------------------------- /_includes/list.html: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /_includes/macro-loader.html: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /_includes/search.html: -------------------------------------------------------------------------------- 1 | 31 | 32 | 33 | 34 | 55 | -------------------------------------------------------------------------------- /_includes/toc.html: -------------------------------------------------------------------------------- 1 |
    2 | {% assign filtered_resources = include.page.children | where: "clicker", "section" %} 3 | {% for resource in filtered_resources %} 4 |
  • 5 | {{ resource.clicks | to_numbering }}. 6 | 7 | {{ resource.title }} 8 | 9 | [{{resource.slug}}] 10 | {% include toc.html page=resource %} 11 |
  • 12 | {% endfor %} 13 |
14 | -------------------------------------------------------------------------------- /_layouts/bib.html: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 |
5 | {{reference}} 6 | {% if entry.eprinttype == "arXiv" %} 7 | arXiv:{{entry.eprint}}. 8 | {% endif %} 9 | {% if entry.hal_id %} 10 | hal:{{entry.hal_id}}. 11 | {% endif %} 12 |
13 | -------------------------------------------------------------------------------- /_layouts/bibtex.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | --- 4 |
5 | {{page.reference}} 6 | {% if page.entry.eprinttype == "arXiv" %} 7 | arXiv:{{page.entry.eprint}}. 8 | {% endif %} 9 | {% if page.entry.hal_id %} 10 | hal:{{page.entry.hal_id}}. 11 | {% endif %} 12 |
13 | 14 |
15 |
{{page.entry.bibtex}}
16 |
17 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | 5 | 6 | {%include head.html %} 7 | 8 | 9 | {%include header.html %} 10 | {{ content }} 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 |
5 | 6 |
7 |

{{ page.title | escape }}

8 |
9 | 10 |
11 | {{ content }} 12 |
13 | 14 |
15 | -------------------------------------------------------------------------------- /_layouts/post.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 | 7 |
8 |

{{ page.title | escape }}

9 | 10 | 11 | 30 |
31 | 32 |
33 | {{ content }} 34 |
35 | 36 | {%- if site.disqus.shortname -%} 37 | {%- include disqus_comments.html -%} 38 | {%- endif -%} 39 | 40 | 41 |
42 | -------------------------------------------------------------------------------- /_layouts/sheafy/node/default.md: -------------------------------------------------------------------------------- 1 |
2 | {{ content }} 3 |
4 | -------------------------------------------------------------------------------- /_layouts/sheafy/node/result.md: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | {::nomarkdown} 5 | 6 |
7 | [{{ page.slug }}] 8 | {{page | display_title_parenthetical -}}. 9 |
10 | 11 | {:/} 12 | 13 | {{ content }} 14 | 15 |
16 | 17 | {% include macro-loader.html page=page %} 18 | -------------------------------------------------------------------------------- /_layouts/sheafy/node/section.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | {::nomarkdown} 4 | 5 |
6 | 7 | {% if page.depth == 0 %} 8 | {{ page.title }} 9 | {% else %} 10 | {{ page.clicks | to_numbering }}. 11 | {{ page.title }} 12 | [{{ page.slug }}] 13 | {% endif %} 14 | 15 | {%- if page.author -%} 16 |

17 | by {% for author in page.author %} 18 | 20 | {%- if forloop.last == false %}, {% endif -%} 21 | {% endfor %} 22 |

23 | {%- endif -%} 24 |
25 | 26 | {% if page == page.subroot %} 27 | {% assign filtered_resources = page.children | where: "clicker", "section" %} 28 | {% if filtered_resources.size != 0 %} 29 | 33 | {% endif %} 34 | {% endif %} 35 | 36 | {:/} 37 | 38 | {{ content }} 39 | 40 |
41 | 42 | {% include macro-loader.html page=page %} 43 | -------------------------------------------------------------------------------- /_layouts/sheafy/tree/default.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | {% include search.html %} 6 | 7 |
8 | 11 | 12 |
13 | {{ content }} 14 |
15 | 16 | {% include d-pad.html page=page %} 17 | 18 | {% if page.referrers.size != 0 %} 19 | 23 | {% endif %} 24 | 25 | {% capture bibliography_count_cited %}{% bibliography_count --cited %}{% endcapture %} 26 | {% if bibliography_count_cited != "0" %} 27 |

Bibliography

28 | {% bibliography --cited %} 29 | {% endif %} 30 | 31 |
32 | -------------------------------------------------------------------------------- /_lectures/categorical-foundations.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Foundations of Relative Category Theory 3 | date: 2022-01-01 4 | author: 5 | - Jonathan Sterling 6 | - Carlo Angiuli 7 | macrolib: topos 8 | --- 9 | 10 | **The current version of these notes is now located on my Forest. Permalinks from the existing website are redirected to the corresponding nodes in the Forest.** 11 | 12 | We assume knowledge of basic categorical concepts such as categories, functors, 13 | and natural transformations. The purpose of this lecture is to develop the 14 | notion of a category *over* another category. 15 | 16 | We will draw on the following materials: 17 | 18 | > - Ahrens and Lumsdaine. [Displayed Categories](https://arxiv.org/abs/1705.04296). 19 | > - Benabou. Fibered categories and the foundations of naive category theory. 20 | > - Borceux. Handbook of Categorical Algebra 2: Categories and Structures. 21 | > - Jacobs. [Categorical Logic and Type Theory](https://people.mpi-sws.org/~dreyer/courses/catlogic/jacobs.pdf) . 22 | > - Streicher. [Fibered Categories à la Jean Bénabou](https://www2.mathematik.tu-darmstadt.de/~streicher/FIBR/FiBo.pdf). 23 | 24 | This material is deeply influenced by conversations with Thomas Streicher, as well as his writings. 25 | 26 | @include{000R} 27 | @include{0008} 28 | @include{0009} 29 | @include{000E} 30 | @include{000N} 31 | @include{0012} 32 | -------------------------------------------------------------------------------- /_lectures/topos.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Geometric universes and topoi (draft) 3 | date: 2022-01-08 4 | author: Jonathan Sterling 5 | macrolib: topos 6 | --- 7 | 8 | @include{0023} 9 | @include{0024} 10 | 11 | -------------------------------------------------------------------------------- /_nodes/0000.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Displayed category 3 | taxon: definition 4 | --- 5 | 6 | Let $B$ be a category. A *displayed category* $E$ over $B$ is defined by the 7 | following data {%cite ahrens-lumsdaine:2019%}: 8 | 1. for each object $x\in B$, a collection of *displayed objects* $E\Sub{x}$, 9 | 2. for each morphism $f : x \to y\in B$ and displayed objects $\bar{x}\in E\Sub{x}$ and 10 | $\bar{y}\in E\Sub{y}$, a family of collections of *displayed morphisms* $E\Sub{f}(\bar{x},\bar{y})$, 11 | which we may also write $\bar{f}:\bar{x}\to\Sub{f} \bar{y}$, 12 | 3. for each $x\in B$ and $\bar{x}\in E\Sub{x}$, a morphism $\Idn{\bar{x}} \in 13 | E\Sub{\Idn{x}}(\bar{x},\bar{x})$, 14 | 4. for each $f : x \to y$ and $g:y \to z$ in $B$ and objects $\bar{x}\in E\Sub{x}, \bar{y}\in 15 | E\Sub{y}, \bar{z}\in E\Sub{z}$, a function 16 | \\[ 17 | E\Sub{f}(\bar{x},\bar{y}) \times E\Sub{g}(\bar{y},\bar{z}) \to E\Sub{f;g}(\bar{x},\bar{z}) 18 | \\] 19 | that we will denote like ordinary (diagrammatic) function composition, 20 | 5. such that the following equations hold: 21 | \\[ 22 | \Idn{\bar{x}};\bar{h} = \bar{h}\qquad 23 | \bar{h};\Idn{\bar{y}} = \bar{h}\qquad 24 | \bar{f};(\bar{g};\bar{h}) = (\bar{f};\bar{g});\bar{h} 25 | \\] 26 | Note that these are well-defined because of the corresponding 27 | laws for the base category $B$. 28 | 29 | **Notation**. When we have too many subscripts, we will write $E[x]$ instead of $E\Sub{x}$. 30 | -------------------------------------------------------------------------------- /_nodes/0001.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Cartesian morphisms 3 | taxon: definition 4 | --- 5 | 6 | Let $E$ be displayed over $B$, and let $f:x\to y \in B$; a morphism 7 | $\bar{f}:\bar{x}\to\Sub{f} \bar{y}$ in $E$ is called *cartesian* over $f$ when for 8 | any $m:u\to x$ and $\bar{h}:\bar{u}\to\Sub{m;f} \bar{y}$ there exists a unique 9 | $\bar{m} : \bar{u}\to\Sub{m} \bar{x}$ with $\bar{m};\bar{f} = \bar{h}$. We visualize 10 | this unique factorization of $\bar{h}$ through $\bar{f}$ over $m$ as follows: 11 | {%tex macrolib: topos%} 12 | \begin{tikzpicture}[diagram] 13 | \SpliceDiagramSquare{ 14 | west/style = lies over, 15 | east/style = lies over, 16 | north/node/style = upright desc, 17 | height = 1.5cm, 18 | nw = \bar{x}, 19 | ne = \bar{y}, 20 | sw = x, 21 | north = \bar{f}, 22 | south = f, 23 | se = y, 24 | nw/style = pullback, 25 | } 26 | \node (u') [above left = 1.5cm of nw,xshift=-.5cm] {$\bar{u}$}; 27 | \node (u) [above left = 1.5cm of sw,xshift=-.5cm] {$u$}; 28 | \draw[lies over] (u') to (u); 29 | \draw[->,bend left=30] (u') to node [sloped,above] {$\bar{h}$} (ne); 30 | \draw[->] (u) to node [sloped,below] {$m$} (sw); 31 | \draw[->,exists] (u') to node [desc] {$\bar{m}$} (nw); 32 | \end{tikzpicture} 33 | {%endtex%} 34 | 35 | Above we have used the "pullback corner" to indicate $\bar{x}\to\bar{y}$ as a 36 | cartesian map. We return to this in our discussion of the self-indexing {%ref 0003 %} 37 | of a category. 38 | -------------------------------------------------------------------------------- /_nodes/0002.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Cartesian fibration 3 | taxon: definition 4 | --- 5 | 6 | A displayed category $E$ over $B$ is said to be a *cartesian fibration*, when 7 | for each morphism $f : x \to y$ and displayed object $\bar{y}\in E\Sub{y}$, there 8 | exists a displayed object $\bar{x}\in E\Sub{x}$ and a *cartesian* morphism 9 | $\bar{f} : \bar{x}\to\Sub{f} \bar{y}$ in the sense of {%cref 0001%}. Note that the pair $(\bar{x},\bar{f})$ is unique up to 10 | unique isomorphism, so being a cartesian fibration is a *property* of a displayed category. 11 | 12 | There are other variations of fibration. For instance, $E$ is said to be an 13 | *isofibration* when the condition above holds just for isomorphisms $f : x 14 | \cong y$ in the base. 15 | -------------------------------------------------------------------------------- /_nodes/0003.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The fundamental self-indexing 3 | --- 4 | 5 | @include{001X} 6 | @include{001Y} 7 | -------------------------------------------------------------------------------- /_nodes/0004.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Displayed and fibered functors 3 | --- 4 | 5 | Let $E$ be displayed over $B$ and let $F$ be displayed over $C$. If $U:B \to C$ 6 | is an ordinary functor, than a *displayed functor* from $E$ to $F$ over $U$ is 7 | given by the following data: 8 | 9 | 1. for each displayed object $\bar{x}\in E\Sub{x}$, a displayed object $\bar{U}\bar{x}\in F\Sub{Ux}$, 10 | 2. for each displayed morphism $\bar{f} : \bar{x}\to\Sub{f}\bar{y}$, a displayed morphism $\bar{U}\bar{f} : \bar{U}\bar{x}\to\Sub{Uf}\bar{U}\bar{y}$, 11 | 3. such that the assignment $\bar{U}f$ preserves displayed identities and displayed composition. 12 | 13 | From this notion, we can see the variation of displayed categories over their 14 | base categories itself has a "displayed categorical" structure; up to size 15 | issues, we could speak of the displayed *bicategory* of displayed categories. 16 | 17 | **Note.** The correct notion of morphism between cartesian fibrations is given 18 | by displayed functors that preserve cartesian maps. We will call these *fibered 19 | functors*. 20 | 21 | -------------------------------------------------------------------------------- /_nodes/0005.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Fiber categories and vertical maps 3 | --- 4 | 5 | Let $E$ be a category displayed over $B$. A *vertical map* in $E$ is defined to be one that 6 | lies over the identity map in $B$. 7 | For every $b\in B$, there the collection $E\Sub{b}$ of displayed objects has the 8 | structure of a category; in particular, we set $E\Sub{b}(u,v)$ to be the collection 9 | of vertical maps $u\to\Sub{\Idn{b}}v$. 10 | -------------------------------------------------------------------------------- /_nodes/0006.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Example: the family fibration" 3 | --- 4 | 5 | Any ordinary category $C$ can be viewed as a displayed category $\FAM{C}$ over $\SET$: 6 | 7 | 1. For $S\in \SET$, an object in $\FAM{C}[S]$ is specified by a functor $C^S$ 8 | where $S$ is regarded as a discrete category. 9 | 2. Given $f : S \to T$ in $\SET$ and $x\in C^S$ and $y\in C^T$, a morphism 10 | $x \to\Sub{f} y$ is given by a morphism $x\to \InvImg{f}y$ in $C^S$ where 11 | $\InvImg{f} : C^T \to C^S$ is precomposition with $f$. 12 | 13 | The displayed category $\FAM{C}$ is in fact a cartesian fibration. This family 14 | fibration is the starting point for developing a *relative* form of category 15 | theory, the purpose of this lecture. By analogy with viewing an ordinary 16 | category $C$ as a fibration $\FAM{C}$ over $\SET$, we may reasonably define a 17 | "relative category" over another base $B$ to be a fibration over $B$. 18 | 19 | This story for relative category theory reflects the way that ordinary 20 | categories are "based on" $\SET$ in some sense in spite of the fact that they 21 | do not necessarily have sets of objects or even sets of morphisms between 22 | objects. Being small and locally small respectively will later be seen to be 23 | properties of a family fibration over an arbitrary base $B$, strictly 24 | generalizing the classical notions. 25 | -------------------------------------------------------------------------------- /_nodes/0007.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Change of base 3 | --- 4 | 5 | Suppose that $E$ is displayed over $B$ and $F : X\to B$ is a 6 | functor; then we may define a displayed category $\InvImg{F}E$ as over $X$ follows: 7 | 8 | 1. An object of $(\InvImg{F}E)\Sub{x}$ is an object of $E\Sub{Fx}$. 9 | 10 | 2. Given $\bar{x}\in (\InvImg{F}E)\Sub{x}$, $\bar{y}\in (\InvImg{F}E)\Sub{y}$ and $f : x 11 | \to y$, a morphism $\bar{x}\to\Sub{f}\bar{y}$ in $\InvImg{F}E$ is given by a morphism $\bar{x}\to\Sub{Ff}\bar{y}$ in $E$. 12 | 13 | We visualize the change of base scenario as follows: 14 | {%tex macrolib: topos%} 15 | \DiagramSquare{ 16 | nw/style = pullback, 17 | west/style = lies over, 18 | east/style = lies over, 19 | height = 1.5cm, 20 | nw = \InvImg{F}{E}, 21 | ne = E, 22 | sw = X, 23 | se = B, 24 | south = F, 25 | } 26 | {%endtex%} 27 | -------------------------------------------------------------------------------- /_nodes/0008.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Displayed categories and fibrations 3 | --- 4 | 5 | @include{0000} 6 | @include{0001} 7 | @include{0002} 8 | @include{0003} 9 | @include{0014} 10 | @include{0029} 11 | @include{0004} 12 | @include{0005} 13 | @include{000Q} 14 | @include{0006} 15 | @include{0007} 16 | 17 | 18 | @include{002J} 19 | -------------------------------------------------------------------------------- /_nodes/0009.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The Grothendieck construction 3 | --- 4 | 5 | @include{000A} 6 | @include{000B} 7 | @include{000D} 8 | 9 | {{page.refs}} 10 | -------------------------------------------------------------------------------- /_nodes/000A.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The total category and its projection 3 | --- 4 | 5 | Note that any displayed category $E$ over $B$ can be viewed as an undisplayed 6 | category $\TotCat{E}$ equipped with a projection functor $p\Sub{E}: \TotCat{E}\to 7 | B$; in this case $\TotCat{E}$ is called the *total category* of $E$. 8 | 9 | 1. An object of $\TotCat{E}$ is given by a pair $(x,\bar{x})$ where $x\in B$ and 10 | $\bar{x}\in E\Sub{x}$. 11 | 2. A morphism $(x,\bar{x})\to (y,\bar{y})$ in $\TotCat{E}$ is given by a pair $(f,\bar{f})$ where 12 | $f:x\to y$ and $\bar{f}:\bar{x}\to\Sub{f}\bar{y}$. 13 | 14 | The construction of the total category of a displayed category is called the *Grothendieck construction.* 15 | 16 | 17 | @include{001T} 18 | -------------------------------------------------------------------------------- /_nodes/000B.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Displayed categories from functors 3 | --- 4 | 5 | In many cases, one starts with a functor $P:E\to B$; if it were meaningful to 6 | speak of *equality* of objects in an arbitrary category then there would be an 7 | obvious construction of a displayed category $P\Sub{\bullet}$ from $P$; we would 8 | simply set $P\Sub{x}$ to be the collection of objects $u\in E$ such that $Pu=x$. As 9 | it stands there is a more subtle version that will coincide up to categorical 10 | equivalence with the naïve one in all cases that the latter is meaningful. 11 | 12 | 1. We define an object of $P\Sub{x}$ to be a pair $(u,\phi\Sub{u})$ where $u\in E$ and 13 | $\phi\Sub{u} : Pu\cong x$. It is good to visualize such a pair as a "crooked 14 | leg" like so: 15 | {%tex macrolib: topos%} 16 | \begin{tikzpicture}[diagram] 17 | \node (u) {$u$}; 18 | \node (Pu) [below = 1cm of u] {$Pu$}; 19 | \node (x) [right = 1.5cm of Pu] {$x$}; 20 | \draw[lies over] (u) to (Pu); 21 | \draw[->] (Pu) to node [below] {$\phi\Sub{u}$} (x); 22 | \end{tikzpicture} 23 | {%endtex%} 24 | 25 | 2. A morphism $(u,\phi\Sub{u})\to\Sub{f} (v,\phi\Sub{v})$ over $f : x \to y$ is given by 26 | a morphism $h : u\to v$ that lies over $f$ modulo the isomorphisms 27 | $\phi\Sub{u},\phi\Sub{v}$ in sense depicted below: 28 | {%tex macrolib: topos%} 29 | \begin{tikzpicture}[diagram] 30 | \node (pu) {$Pu$}; 31 | \node (pv) [right = of pu] {$Pv$}; 32 | \node (x) [below left = 1.5cm of pu] {$x$}; 33 | \node (y) [below right = 1.5cm of pv] {$y$}; 34 | \node (u) [above = 1.5cm of pu] {$u$}; 35 | \node (v) [above = 1.5cm of pv] {$v$}; 36 | \draw[lies over] (u) to (pu); 37 | \draw[lies over] (v) to (pv); 38 | \draw[->] (u) to node [above] {$h$} (v); 39 | \draw[->] (x) to node [sloped,above] {$\phi\Sub{u}\Sup{-1}$} (pu); 40 | \draw[->] (pu) to node [upright desc] {$Ph$} (pv); 41 | \draw[->] (pv) to node [sloped,above] {$\phi\Sub{v}$} (y); 42 | \draw[->,bend right=30] (x) to node [below] {$f$} (y); 43 | \end{tikzpicture} 44 | {%endtex%} 45 | 46 | @include{001U} 47 | 48 | We have a functor $\TotCat{P\Sub{\bullet}}\to E$ taking a pair $(x,(u,\phi\Sub{u}))$ to 49 | $u$. 50 | 51 | @include{001V} 52 | @include{001W} 53 | 54 | 55 | @include{000C} 56 | -------------------------------------------------------------------------------- /_nodes/000C.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Relationship to Street's fibrations 3 | --- 4 | 5 | In classical category theory, cartesian fibrations are defined by 6 | Grothendieck {%cite sga:1 -A%} to be certain functors $E\to B$ such that any morphism $f:x\to Pv$ 7 | in $B$ lies strictly underneath a cartesian morphism in $E$. As we have 8 | discussed, this condition cannot be formulated unless equality is meaningful 9 | for the collection of objects of $B$. 10 | 11 | There is an alternative definition of cartesian fibration {%cite street:1980%} that avoids 12 | equality of objects; here we require for each $f:x\to Pv$ a cartesian morphism 13 | $h:\InvImg{f}v \to v$ together with an isomorphism $\phi : P(\InvImg{f}v)\cong x$ 14 | such that $\phi^{-1};Ph = f$. 15 | 16 | By unrolling definitions, it is not difficult to see that the displayed 17 | category $P\Sub{\bullet}$ is a cartesian fibration in our sense if and only if the functor 18 | $P:E\to B$ was a fibration in Street's sense. Moreover, it can be seen that the 19 | Grothendieck construction yields a *Grothendieck* fibration 20 | $\TotCat{P\Sub{\bullet}}\to B$; hence we have introduced by accident a convenient 21 | destription of the *strictification* of Street fibrations into equivalent 22 | Grothendieck fibrations. 23 | -------------------------------------------------------------------------------- /_nodes/000D.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Iteration and pushforward 3 | --- 4 | 5 | It also makes sense to speak of categories displayed over other displayed 6 | categories; one way to formalize this notion is as follows. Let $E$ be 7 | displayed over $B$; we define a category displayed over $E$ to be simply a 8 | category displayed over the total category $\TotCat{E}$. 9 | 10 | Now let $F$ be displayed over $E$ over $B$. Then we may regard $F$ as a 11 | displayed category $B\Sub{!}F$ over $B$ as follows: 12 | 13 | 1. An object of $(B\Sub{!}F)\Sub{x}$ is a pair $(\bar{x},{\ddot{x}})$ with $\bar{x}\in E\Sub{x}$ and ${\ddot{x}}\in F\Sub{\bar{x}}$. 14 | 2. A morphism $(\bar{x},{\ddot{x}})\to\Sub{f}(\bar{y},{\ddot{y}})$ is given by a pair $(\bar{f},{\ddot{f}})$ where $\bar{f}:\bar{x}\to\Sub{f}\bar{y}$ in $E$ and ${\ddot{f}}:{\ddot{x}}\to\Sub{\bar{f}} {\ddot{y}}$ in $F$. 15 | 16 | By virtue of {%cref 000B%}, we may define the *pushforward* of a displayed category along a functor. In particular, let $E$ 17 | be displayed over $B$ and let $U:B\to C$ be an ordinary functor; then we may 18 | obtain a displayed category $U\Sub{!}E$ over $C$ as follows: 19 | 20 | 1. First we construct the displayed category $U\Sub{\bullet}$ corresponding to the 21 | functor $U:B \to C$. 22 | 2. We recall that there is a canonical equivalence of categories 23 | $\TotCat{U\Sub{\bullet}}\to B$. 24 | 3. Because $E$ is displayed over $B$, we may regard it as displayed over the 25 | equivalent total category $\TotCat{U\Sub{\bullet}}$ by 26 | change of base {%pref 0007%}. 27 | 4. Hence we may define the pushforward $U\Sub{!}E$ to be the displayed category $(U\Sub{\bullet})\Sub{!}E$ as defined above. 28 | 29 | -------------------------------------------------------------------------------- /_nodes/000E.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Properties of fibrations 3 | --- 4 | 5 | @include{000F} 6 | @include{000J} 7 | @include{002E} 8 | @include{002L} 9 | -------------------------------------------------------------------------------- /_nodes/000F.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Locally small fibrations 3 | --- 4 | 5 | There are a number of (equivalent) variations on the definition of a locally 6 | small fibration. We attempt to provide 7 | some intuition for these definitions. 8 | 9 | @include{000G} 10 | @include{000H} 11 | @include{000I} 12 | -------------------------------------------------------------------------------- /_nodes/000G.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Warmup: locally small family fibrations" 3 | --- 4 | 5 | An ordinary category $E$ is called *locally small* when for any $x,y\in E$ the 6 | collection of morphisms $x\to y$ is a set. This property of $E$ can be 7 | rephrased in terms of its *family fibration* {% pref 0006 %} $\FAM{E}$ over 8 | $\SET$ as follows. 9 | 10 | Consider an index set $I\in \SET$ and two families $u,v\in C^I$. We may define 11 | an $I$-indexed collection $[u,v]\Sub{i\in I}$ consisting (pointwise) of all the 12 | morphisms $u\Sub{i}\to v\Sub{i}$ in $C$: 13 | {%tex macrolib: topos%}[u,v]\Sub{i} = \{ f \mid f: u\Sub{i}\to v\Sub{i} \}{%endtex%} 14 | 15 | If $C$ is locally small, $[u,v]\Sub{i\in I}$ is in fact a family of sets for 16 | any $I\in\SET$ as each $[u,v]\Sub{i}$ is a set. Conversely, if $[u,v]\Sub{i\in I}$ 17 | is a family of sets for any $I\in \SET$, then $C$ is locally small as we may 18 | consider in particular the case that $I=\mathbf{1}$. 19 | -------------------------------------------------------------------------------- /_nodes/000H.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: A more abstract formulation 3 | --- 4 | 5 | We will reformulate the above in a way that uses only the language that makes 6 | sense for an arbitrary cartesian fibration, though for now we stick with $\FAM{C}$. Given 7 | $u,v\in \FAM{C}[I]$, we have a "relative hom family" $[u,v]\in\Sl{\SET}{I}$, 8 | defined in {%cref 000G%}. The fact that each $[u,v]\Sub{i}$ is the set of all 9 | morphisms $u\Sub{i}\to v\Sub{i}$ can be rephrased more abstractly. 10 | 11 | First we consider the restriction of $u\in \FAM{C}[I]$ to $\FAM{C}[[u,v]]$ as follows: 12 | {%tex macrolib: topos%} 13 | \DiagramSquare{ 14 | nw/style = pullback, 15 | west/style = lies over, 16 | east/style = lies over, 17 | north/style = {->,exists}, 18 | height = 1.5cm, 19 | nw = \InvImg{[u,v]}u, 20 | ne = u, 21 | sw = {[u,v]}, 22 | se = I, 23 | south = p\Sub{[u,v]}, 24 | north = \bar{p}\Sub{[u,v]} 25 | } 26 | {%endtex%} 27 | Explicitly the family $\InvImg{[u,v]}u$ is indexed in a pair of an element $i\in I$ and a morphism $u\Sub{i}\to v\Sub{i}$. 28 | We can think of $\InvImg{[u,v]}u$ as the object of elements of $u\Sub{i}$ indexed in pairs $(i,u\Sub{i}\to v\Sub{i})$. 29 | 30 | There is a canonical map 31 | $\epsilon\Sub{[u,v]}:\InvImg{[u,v]}u\to\Sub{p\Sub{[u,v]}} v$ that 32 | "evaluates" each indexing morphism $u\Sub{i}\to v\Sub{i}$. 33 | 34 | That each $[u,v]\Sub{i}$ is the set of all morphisms $u\Sub{i}\to v\Sub{i}$ can be 35 | rephrased as a universal property: for any family $h\in\Sl{\SET}{I}$ and 36 | morphism $\epsilon\Sub{h} : \InvImg{h}u\to\Sub{h} v$ in $\FAM{C}$, there is a 37 | unique cartesian map $\InvImg{h}u\to \InvImg{[u,v]}u$ factoring $\epsilon\Sub{h}$ through $\epsilon\Sub{[u,v]}$ 38 | in the sense depicted below: 39 | {%tex macrolib: topos%} 40 | \begin{tikzpicture}[diagram] 41 | \SpliceDiagramSquare{ 42 | height = 1.5cm, 43 | width = 3cm, 44 | west/style = lies over, 45 | east/style = lies over, 46 | north/node/style = upright desc, 47 | south/node/style = upright desc, 48 | nw = \InvImg{[u,v]}u, 49 | ne = v, 50 | sw = {[u,v]}, 51 | se = I, 52 | south = p\Sub{[u,v]}, 53 | north = \epsilon\Sub{[u,v]}, 54 | } 55 | \node (h/u) [pullback,left = of nw] {$\InvImg{h}u$}; 56 | \node (h) [left = of sw] {$h$}; 57 | \draw[bend left,->] (h/u) to node [sloped,above] {$\epsilon\Sub{h}$} (ne); 58 | \draw[lies over] (h/u) to (h); 59 | \draw[->,exists] (h) to (sw); 60 | \draw[->,exists] (h/u) to (nw); 61 | \draw[->,bend right=30] (h) to node [below] {$p\Sub{h}$} (se); 62 | \end{tikzpicture} 63 | {%endtex%} 64 | 65 | To convince ourselves of this, we note that the family $H \coloneqq \brc{u\Sub{i}\to v\Sub{i}}\Sub{i\in I}$ itself satisfies the universal property above. Indeed, fix a candidate $h \in \Sl{\SET}{I}$ equipped with a map $\epsilon\Sub{h} : \InvImg{h}u \to_h v$. Unfolding the meaning of this map in set theoretical notation, we see that it amounts to a family of maps $\epsilon\Sub{h}[i] : \prod\Sub{x\in h_i} \brc{u_i\to v_i}$ for each $i\in I$; such a family immediately induces the desired map $h\to H$. 66 | {%qed%} 67 | -------------------------------------------------------------------------------- /_nodes/000I.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The definition of local smallness 3 | --- 4 | 5 | Based on our explorations above, we are now prepared to write down (and 6 | understand) the proper definition of local smallness for an arbitrary cartesian fibration 7 | $E$ over $B$, which should be thought of as a (potentially large) category 8 | relative to $B$. 9 | 10 | 11 | @include{001C} 12 | @include{001B} 13 | 14 | -------------------------------------------------------------------------------- /_nodes/000J.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Globally small fibrations 3 | --- 4 | 5 | In ordinary category theory, a category $C$ is called *small* when the objects 6 | of $C$ can be arranged into a set, and so can for every $x,y\in C$ the 7 | collection of morphisms $x\to y$. It is useful to separate these two conditions 8 | when we generalize them to fibrations. The latter is called *local smallness* 9 | and is discussed and defined in {%cref 000F%}; the former is called *global 10 | smallness* by Jacobs {%cite jacobs:1999 -A%} and factors through an important concept: the *generic object*. 11 | 12 | @include{001D} 13 | 14 | @include{000K} 15 | 16 | @include{000P} 17 | -------------------------------------------------------------------------------- /_nodes/000K.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Generic objects 3 | --- 4 | 5 | Up to equivalence of categories, we may detect global smallness of a category $C$ from the perspective of the family fibration $\FAM{C}$ {%pref 0006%}. In particular, a category is equivalent to a globally small category when its family fibration has a *generic object* in the following sense. 6 | 7 | @include{001E} 8 | 9 | @include{000L} 10 | -------------------------------------------------------------------------------- /_nodes/000L.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Globally small categories 3 | taxon: theorem 4 | --- 5 | 6 | An ordinary category $C$ is equivalent to a globally small category if and only if the fibration $\FAM{C}$ has a generic object. 7 | 8 | **Proof.** 9 | To see that this is the case, suppose that $C$ has a set of objects. Then 10 | $C\in\SET$ and we define $\lfloor{C}\rfloor$ to be the displayed object 11 | $\brc{x}\Sub{x\in C}\in \FAM{C}[C]$. Fixing $I\in \SET$ and $z\in C^I$, we 12 | consider the cartesian map displayed over $z : I \to C$: 13 | {%tex macrolib: topos%} 14 | \DiagramSquare{ 15 | height = 1.5cm, 16 | width = 3cm, 17 | west/style = lies over, 18 | east/style = lies over, 19 | sw = I, 20 | se = C, 21 | south = z, 22 | ne = \brc{x}\Sub{x\in C}, 23 | nw = {z = \brc{z\,i}\Sub{i\in I} } 24 | } 25 | {%endtex%} 26 | 27 | Conversely assume that $\FAM{C}$ has a generic object $\bar{u}\in\FAM{C}[U]$ 28 | for some $U\in \SET$; then we may equip $U$ with the structure of a globally 29 | small category such that $U$ is equivalent to $C$, using a construction that is similar to our implementation of the opposite fibration {%pref 000Q%}. In particular we define a 30 | morphism $x\to y\in U$ to be given by the following data: 31 | 32 | 1. a cartesian map $a\to\Sub{x} \bar{u}$ over $x : 1\to U$, 33 | 2. a cartesian map $b\to\Sub{y} \bar{u}$ over $y : 1\to U$, 34 | 3. and a vertical map $h:a\to b$ in $\FAM{C}[1]\simeq C$, 35 | 36 | such that $(a\Sub{1},b\Sub{1},h\Sub{1})$ is identified with $(a\Sub{2},b\Sub{2},h\Sub{2})$ when $h_1$ and $h_2$ are equal modulo the (unique) vertical isomorphisms between the cartesian lifts in the sense depicted below: 37 | {%tex macrolib: topos%} 38 | \begin{tikzpicture}[diagram] 39 | \SpliceDiagramSquare{ 40 | nw = a_1, 41 | ne = a_2, 42 | sw = b_1, 43 | se = b_2, 44 | north = \cong, 45 | south = \cong, 46 | west = h_1, 47 | east = h_2, 48 | east/node/style = upright desc, 49 | } 50 | \node (u) [between = ne and se, xshift = 2cm] {$\bar{u}$}; 51 | \draw[->] (ne) to node [sloped,above] {cart.}(u); 52 | \draw[->] (se) to node [sloped,below] {cart.} (u); 53 | \end{tikzpicture} 54 | {%endtex%} 55 | 56 | Remember that a cartesian map $a\to\Sub{x}\bar{u}$ is standing for a *choice* 57 | of an object of $C$ encoded by $x\in U$. Because such choices are unique only 58 | up to isomorphism, we must include them explicitly in the data. 59 | {%qed%} 60 | -------------------------------------------------------------------------------- /_nodes/000N.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Small fibrations and internal categories 3 | --- 4 | 5 | The purpose of this section is to develop the relationship between *internal 6 | categories* (categories defined in the internal language of a category $B$) and 7 | cartesian fibrations over $B$, generalizing the relationship between categories internal 8 | to $\SET$ (i.e. small categories) and their family fibrations over $\SET$. 9 | 10 | @include{001Q} 11 | 12 | We have already seen in {%cref 000G%} and {%cref 000L%} that smallness in the 13 | sense of the definition above appropriately generalizes the ordinary notion of 14 | smallness for categories over $\SET$. Another perspective on smallness is given 15 | by the *internal language*, in which a category is viewed as an algebra for the 16 | "theory of categories" computed in another category with enough structure. The 17 | notion of internal categories is credited (independently) to Alexander 18 | Grothendieck and Charles Ehresmann. 19 | 20 | @include{000O} 21 | @include{000V} 22 | @include{0011} 23 | @include{000Z} 24 | -------------------------------------------------------------------------------- /_nodes/000O.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Internal categories 3 | --- 4 | 5 | The notion of a (meta-)category is an {%nlab essentially algebraic theory%}. As such it is 6 | possible to compute *models* of this theory in any category that has finite 7 | limits. 8 | 9 | @include{001A} 10 | -------------------------------------------------------------------------------- /_nodes/000P.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: definition 3 | title: Globally small fibration 4 | --- 5 | 6 | A cartesian fibration $E$ over $B$ is called *globally small* when it has a generic object in the sense of {%cref 001E%}. 7 | -------------------------------------------------------------------------------- /_nodes/000Q.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Opposite categories 3 | --- 4 | 5 | We adapt Bénabou's construction as reported by Streicher {%cite streicher:2018 -A%}. 6 | 7 | @include{001Z} 8 | @include{000T} 9 | @include{000U} 10 | 11 | 12 | @include{000S} 13 | -------------------------------------------------------------------------------- /_nodes/000R.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Foundational assumptions 3 | --- 4 | 5 | @include{001F} 6 | 7 | In our definition above, we have not imposed any restrictions on what kinds of 8 | things the objects and morphisms are; our definition is pre-mathematical, so we 9 | do not assume beforehand that there is a such thing as a collection of "all" 10 | meta-categories. 11 | 12 | **Remark.** We may define analogous notions of meta-functor, etc. But we do not 13 | assume that the notion of "all meta-functors $\mathfrak{C}\to\mathfrak{D}$" is 14 | well-defined; the notion is entirely schematic. 15 | 16 | 17 | **Assumption.** We assume a meta-category $\BoldSymbol{\mathfrak{Coll}}$ whose 18 | objects we will refer to as "collections". We assume that the meta-category of all collections satisfies the axioms of Lawvere's {%nlab ETCS%}. 19 | 20 | @include{001G} 21 | 22 | Consequently there exists a meta-category $\BoldSymbol{\mathfrak{Cat}}$ of all 23 | categories. Following [Lawvere](http://rfcwalters.blogspot.com/2010/10/old-post-why-are-we-concerned-fw.html) (but deviating from some other authors that 24 | ground the notion of meta-categories in *classes*) we notice that 25 | $\BoldSymbol{\mathfrak{Cat}}$ is cartesian closed; in other words, all functor 26 | categories exist regardless of size. 27 | 28 | **Assumption.** At times we may assume that there exists a *category* 29 | $\SET\subseteq\BoldSymbol{\mathfrak{Coll}}$ of collections that we will refer 30 | to as sets, such that $\SET$ is closed under the axioms of {%nlab ETCS%}. Rather than work with $\SET$ at all 31 | times, our approach is to use the tools of relative category theory to 32 | objectify the notions of "small" and "locally small" category over any category 33 | $B$, generalizing the role of $\SET$ from classical category theory. 34 | -------------------------------------------------------------------------------- /_nodes/000S.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Exegesis of opposite categories 3 | --- 4 | 5 | The construction of fibered opposite categories {%pref 001Z%} does appear quite 6 | involved, but it can be seen to be inevitable from the perspective of the fiber 7 | categories $\OpCat{E}\Sub{x}$ {%pref 0005%}. Indeed, let $u,v\in 8 | \OpCat{E}\Sub{x}$ and fix a *vertical* map $h : u \to v\in \OpCat{E}\Sub{x}$; 9 | by unfolding definitions, we see that the vertical map $h : u \to v$ is 10 | uniquely determined by a morphism $v\to u\in E\Sub{x}$. 11 | 12 | **Proof.** A displayed morphism $u\to\Sub{\Idn{x}} v\in \OpCat{E}$ is 13 | determined by a span $\brc{u\leftarrow v\Sub{x} \to v}\in E$ where the right-hand 14 | map is cartesian over $\Idn{x} : x\to x$ and the left-hand map is vertical, taken up to the identification of 15 | different cartesian lifts $v\Sub{x}\to x$. A displayed morphism that is cartesian over the identity is an isomorphism; hence, displayed morphisms $u\to\Sub{\Idn{x}} v\in\OpCat{E}$ are equivalently determined by vertical maps $v\to u \in E$. 16 | {%qed%} 17 | -------------------------------------------------------------------------------- /_nodes/000T.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Characterization of cartesian maps 3 | --- 4 | 5 | There is a simple characterization of cartesian maps in $\OpCat{E}$. 6 | 7 | @include{0020} 8 | -------------------------------------------------------------------------------- /_nodes/000U.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Cartesian lifts in the opposite category 3 | --- 4 | 5 | The foregoing characterization of cartesian maps in $\OpCat{E}$ 6 | immediately implies that $\OpCat{E}$ is fibered over $B$. 7 | 8 | @include{0021} 9 | -------------------------------------------------------------------------------- /_nodes/000V.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The externalization of an internal category 3 | --- 4 | 5 | @include{001R} 6 | @include{000W} 7 | @include{000X} 8 | @include{000Y} 9 | -------------------------------------------------------------------------------- /_nodes/000W.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: lemma 3 | --- 4 | 5 | The externalization {%ref 000V%} is a cartesian fibration. 6 | 7 | **Proof.** 8 | Given an object $v\in \brk{C}\Sub{y}$ and a 9 | morphism $f:x\to y$ in $E$, we may define a cartesian lift 10 | $\InvImg{f}v\to\Sub{f} v$ by setting $\InvImg{f}v = v\circ f : x \to C\Sub{0}$. 11 | {%qed%} 12 | -------------------------------------------------------------------------------- /_nodes/000X.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: lemma 3 | --- 4 | 5 | The externalization {%ref 000V%} is globally small 6 | 7 | **Proof.** 8 | We may choose a generic object {%ref 000K%} for $\brk{C}$, namely the identity element $(C\Sub{0},\Idn{C\Sub{0}})\in \TotCat{\brk{C}}$. Given any object $(x,u)\in \TotCat{\brk{C}}$ the cartesian map $(x,u)\to (C\Sub{0},\Idn{C\Sub{0}})$ is given as follows: 9 | {%tex macrolib: topos%} 10 | \begin{tikzpicture}[diagram] 11 | \node (x) {$x$}; 12 | \node (y) [below = of x] {$C\Sub{0}$}; 13 | \node (C/1) [right = of x] {$C\Sub{1}$}; 14 | \node (C/0) [below = of C/1] {$C\Sub{0}$}; 15 | \node (C/0') [above = of C/1] {$C\Sub{0}$}; 16 | \draw[->] (x) to node [upright desc] {$\Con{idn}\Sub{u}$} (C/1); 17 | \draw[->] (C/1) to node [right] {$t$} (C/0); 18 | \draw[->] (C/1) to node [right] {$s$} (C/0'); 19 | \draw[->] (y) to node [below] {$\Idn{C\Sub{0}}$} (C/0); 20 | \draw[->] (x) to node [left] {$u$} (y); 21 | \draw[->] (x) to node [sloped,above] {$u$} (C/0'); 22 | \end{tikzpicture} 23 | {%endtex%} 24 | {%qed%} 25 | -------------------------------------------------------------------------------- /_nodes/000Y.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: lemma 3 | --- 4 | 5 | The externalization {%ref 000V%} is locally small 6 | 7 | **Proof.** 8 | Fix $x\in E$ and $u,v\in 9 | \brk{C}\Sub{x}$, we must exhibit a terminal object to the (total) category 10 | $\TotCat{\CandHom{x}{u}{v}}$ of "hom candidates" defined in {%ref 000I%}. 11 | First we define $\brk{u,v}$ to be the following pullback in $E$: 12 | {%tex macrolib: topos%} 13 | \DiagramSquare{ 14 | nw/style = pullback, 15 | ne = C\Sub{1}, 16 | se = C\Sub{0}\times C\Sub{0}, 17 | east = {(s,t)}, 18 | south = {(u,v)}, 19 | sw = x, 20 | nw = \brk{u,v}, 21 | west = p, 22 | north = q, 23 | west/style = {->,exists}, 24 | north/style = {->,exists}, 25 | } 26 | {%endtex%} 27 | 28 | We define $\overline{p}:\InvImg{\brk{u,v}}{u}\to\Sub{p} u\in \brk{C}\Sub{\brk{u,v}}$ to be 29 | the cartesian lift of $u\in \brk{C}\Sub{x}$ along $p:\brk{u,v}\to x$: 30 | {%tex macrolib: topos%} 31 | \DiagramSquare{ 32 | height = 1.5cm, 33 | nw/style = pullback, 34 | west/style = lies over, 35 | east/style = lies over, 36 | north/style = {->,exists}, 37 | ne = u, 38 | nw = \InvImg{\brk{u,v}}u, 39 | sw = \brk{u,v}, 40 | se = x, 41 | south = p, 42 | north = \overline{p}, 43 | } 44 | {%endtex%} 45 | 46 | We need to define a displayed evaluation map 47 | $\epsilon : \InvImg{\brk{u,v}}u\to\Sub{p} v$; unraveling the definition of a displayed 48 | morphism in the externalization of $C$, we choose the following diagram: 49 | 50 | {%tex macrolib: topos%} 51 | \begin{tikzpicture}[diagram] 52 | \SpliceDiagramSquare{ 53 | ne = C\Sub{1}, 54 | se = C\Sub{0}, 55 | east = t, 56 | nw = \brk{u,v}, 57 | sw = x, 58 | west = p, 59 | south = v, 60 | north = q, 61 | north/style = {magenta,->}, 62 | north/node/style = upright desc, 63 | } 64 | \node (nne) [above = of ne] {$C\Sub{0}$}; 65 | \node (nnw) [above = of nw] {$x$}; 66 | \draw[->] (ne) to node [right] {$s$} (nne); 67 | \draw[->] (nw) to node [left] {$p$} (nnw); 68 | \draw[->] (nnw) to node [above] {$u$} (nne); 69 | \draw[->] (nw) to node [desc] {$\InvImg{\brk{u,v}}{u}$} (nne); 70 | \end{tikzpicture} 71 | {%endtex%} 72 | 73 | 74 | Putting all this together, we assert that the terminal object of 75 | $\TotCat{\CandHom{x}{u}{v}}$ is the following span in $\brk{C}$: 76 | {%tex macrolib: topos%} 77 | \begin{tikzpicture}[diagram] 78 | \SpliceDiagramSquare{ 79 | height = 1.5cm, 80 | west/style = lies over, 81 | east/style = lies over, 82 | north/style = <-, 83 | south/style = <-, 84 | ne/style = ne pullback, 85 | ne = \InvImg{\brk{u,v}}{u}, 86 | se = \brk{u,v}, 87 | sw = x, 88 | nw = u, 89 | south = p, 90 | north = \bar{p}, 91 | } 92 | \SpliceDiagramSquare{ 93 | height = 1.5cm, 94 | west/style = lies over, 95 | east/style = lies over, 96 | glue = west, 97 | glue target = l/, 98 | ne = v, 99 | se = x, 100 | north = \epsilon, 101 | south = p, 102 | } 103 | \end{tikzpicture} 104 | {%endtex%} 105 | 106 | Fixing another such candidate hom span $\brc{u \leftarrow \bar{h}\rightarrow v}\in\TotCat{\CandHom{x}{u}{v}}$, according to {%ref 000I%} we must exhibit a unique cartesian morphism $\bar\alpha : \bar{h}\to \InvImg{\brk{u,v}}{u}$ making the following diagram commute: 107 | {%tex macrolib: topos%} 108 | \begin{tikzpicture}[diagram] 109 | \node (u) {$u$}; 110 | \node (h) [above right = 1.5cm of u,xshift=.5cm] {$\bar{h}$}; 111 | \node (hom) [below right = 1.5cm of u,xshift=.5cm] {$\InvImg{\brk{u,v}}{u}$}; 112 | \node (v) [below right = 1.5cm of h,xshift=.5cm] {$v$}; 113 | \draw[->] (hom) to node [sloped,below] {$\bar{p}$} (u); 114 | \draw[->] (h) to node [sloped,above] {$\bar{p}\Sub{h}$} (u); 115 | \draw[->] (hom) to node [sloped,below] {$\epsilon$} (v); 116 | \draw[->] (h) to node [sloped,above] {$\epsilon\Sub{h}$} (v); 117 | \draw[->] (h) to node [upright desc] {$\bar\alpha$} (hom); 118 | \end{tikzpicture} 119 | {%endtex%} 120 | 121 | First we note that the evaluation map $\epsilon\Sub{h} : \bar{h}\to v$ amounts 122 | to an internal morphism $h\to C\Sub{1}$ satisfying the appropriate 123 | compatibility conditions. Therefore we may define the base $\alpha:h\to \brk{u,v}$ of 124 | the universal map using the universal property of the pullback that defines $\brk{u,v}$: 125 | {%tex macrolib: topos%} 126 | \begin{tikzpicture}[diagram] 127 | \SpliceDiagramSquare{ 128 | nw/style = pullback, 129 | ne = C\Sub{1}, 130 | se = C\Sub{0}\times C\Sub{0}, 131 | east = {(s,t)}, 132 | south = {(u,v)}, 133 | sw = x, 134 | nw = \brk{u,v}, 135 | west = p, 136 | north = q, 137 | north/node/style = upright desc, 138 | west/node/style = upright desc, 139 | } 140 | \node (h) [above left = of nw] {$h$}; 141 | \draw[->,bend right=30] (h) to node [left] {$p_h$} (sw); 142 | \draw[->,bend left=30] (h) to node [sloped,above] {$\epsilon_h$} (ne); 143 | \draw[->,exists] (h) to node [desc] {$\alpha$} (nw); 144 | \end{tikzpicture} 145 | {%endtex%} 146 | 147 | The morphism $\alpha:h\to \brk{u,v}$ defined above is the *unique* map in $E$ 148 | satisfying the conditions required of the base for $\bar\alpha$; therefore, it 149 | suffices to show that there exists a cartesian morphism 150 | $\bar\alpha:\bar{h}\to\Sub{\alpha}\InvImg{\brk{u,v}}u$ since it will be unique if it 151 | exists. We define $\bar\alpha$ using the universal property of the cartesian lift: 152 | {%tex macrolib: topos%} 153 | \begin{tikzpicture}[diagram] 154 | \SpliceDiagramSquare{ 155 | ne/style = pullback, 156 | nw/style = dotted pullback, 157 | west/style = lies over, 158 | east/style = lies over, 159 | height = 1.5cm, 160 | se = \brk{u,v}, 161 | ne = \InvImg{\brk{u,v}}u, 162 | sw = h, 163 | nw = \bar{h}, 164 | south = \alpha, 165 | north = \bar\alpha, 166 | north/style = {->,exists}, 167 | north/node/style = upright desc, 168 | south/node/style = upright desc, 169 | } 170 | \SpliceDiagramSquare{ 171 | glue = west, 172 | glue target = l/, 173 | east/style = lies over, 174 | height = 1.5cm, 175 | ne = u, 176 | se = x, 177 | south = p, 178 | north = \bar{p}, 179 | north/node/style = upright desc, 180 | south/node/style = upright desc, 181 | } 182 | \draw[->,bend left=30] (l/nw) to node [above] {$\bar{p}\Sub{h}$} (r/ne); 183 | \draw[->,bend right=30] (l/sw) to node [below] {$p\Sub{h}$} (r/se); 184 | \end{tikzpicture} 185 | {%endtex%} 186 | 187 | That $\bar{\alpha}:\bar{h}\to\Sub{\alpha}\InvImg{\brk{u,v}}u$ is cartesian follows from the 188 | "generalized pullback lemma" for cartesian morphisms {%ref 0014 %}: it suffices 189 | to observe that both $\bar{p}\Sub{h}:\bar{h}\to u$ and its second factor 190 | $\bar{p}:\InvImg{\brk{u,v}}u\to u$ are cartesian. 191 | {%qed%} 192 | -------------------------------------------------------------------------------- /_nodes/000Z.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The internalization of a small fibration 3 | --- 4 | 5 | Let $C$ be a small cartesian fibration {%pref 001Q %} over $B$ a category with finite 6 | limits, i.e. a cartesian fibration that is both locally small {%pref 001B%} and globally 7 | small {%pref 000P%}. We will show that $C$ is equivalent to the externalization 8 | {%ref 000V%} of an internal category {%ref 000O%} $\underline{C}$ in $B$, 9 | namely the full internal subcategory {%ref 0011%} associated to the generic 10 | object $\bar{u}\in C$. 11 | 12 | By {%cref 001S%} we know that the externalization of $\underline{C}$ so-defined 13 | is equivalent to the full subfibration $\FullSubfib{\bar{u}}$ of $C$ spanned by 14 | objects that are "classified" by $\bar{u}$. Because $\bar{u}$ is generic, we 15 | know that *every* object of $C$ is classified by $\bar{u}$, so we are done. 16 | -------------------------------------------------------------------------------- /_nodes/0010.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The full subfibration associated to a displayed object 3 | taxon: construction 4 | --- 5 | 6 | Let $E$ be a cartesian fibration 7 | over $B$; then any displayed object $\bar{x} \in E\Sub{x}$ induces a *full subfibration* $\FullSubfib{\bar{u}}\subseteq E$ spanned by displayed objects that are classified by $\bar{u}$, i.e. arise from $\bar{u}$ by cartesian lift. 8 | 9 | 1. An object of $\FullSubfib{\bar{u}}\Sub{x}$ is specified by an object $\bar{x}\in E\Sub{x}$ together with a cartesian morphism $\bar{x}\to \bar{u}$. 10 | 11 | 2. Given $f:x\to y\in B$, a morphism from $\bar{x}\to \bar{u}$ to $\bar{y}\to\bar{u}\in$ over $f$ is given by any displayed morphism $\bar{x}\to\Sub{f}\bar{y}$. 12 | 13 | 14 | -------------------------------------------------------------------------------- /_nodes/0011.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The full internal subcategory associated to a displayed object 3 | --- 4 | 5 | The full internal subfibration {%pref 0010%} associated to a displayed object $\bar{u}$ of a locally small cartesian fibration $E$ over $B$ can be seen to be equivalent to the externalization 6 | of an internal category $\gl{\bar{u}}$ in $B$. In particular, we let the object of objects $\gl{\bar{u}}\Sub{0}$ be $u$ itself; defining the object of arrows $\gl{\bar{u}}\Sub{1}$ is more complex, making critical use of the local smalness of $E$ over $B$. 7 | 8 | We will think of the fiber $E\Sub{u\times u}$ as the category of 9 | objects indexed in the *boundary* (source and target) of a morphism. Restricting $\bar{u}$ along the source and target projections, we obtain the displayed objects of "points of the source" and "points of the target" respectively: 10 | {%tex macrolib: topos%} 11 | \DiagramSquare{ 12 | height = 1.5cm, 13 | nw/style = pullback, 14 | west/style = lies over, 15 | east/style = lies over, 16 | nw = \bar{\partial}\Sub{1}, 17 | sw = u\times u, 18 | se = u, 19 | ne = \bar{u}, 20 | south = \pi\Sub{1}, 21 | north = \bar{\pi}\Sub{1}, 22 | } 23 | \qquad 24 | \DiagramSquare{ 25 | height = 1.5cm, 26 | nw/style = pullback, 27 | west/style = lies over, 28 | east/style = lies over, 29 | nw = \bar{\partial}\Sub{2}, 30 | sw = u\times u, 31 | se = u, 32 | ne = \bar{u}, 33 | south = \pi\Sub{2}, 34 | north = \bar{\pi}\Sub{2}, 35 | } 36 | {%endtex%} 37 | 38 | Because $E$ is locally small, there is an object 39 | $\brk{\bar\partial\Sub{1},\bar\partial\Sub{2}}\in \Sl{B}{u\times u}$ that 40 | behaves as the "generic hom set". We define $\gl{\bar{u}}\Sub{1}\in B$ and its 41 | source and target projections to be this very object. 42 | 43 | @include{001S} 44 | -------------------------------------------------------------------------------- /_nodes/0012.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Other kinds of fibrations 3 | --- 4 | 5 | @include{0015} 6 | @include{0013} 7 | -------------------------------------------------------------------------------- /_nodes/0013.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Right fibrations 3 | --- 4 | 5 | @include{001O} 6 | 7 | Recall from {%cref 0005 %} that for every $b\in B$, the collection of displayed 8 | objects $E\Sub{b}$ and vertical maps $E\Sub{1\Sub{b}}$ forms a category. When $E$ is 9 | a right fibration over $B$, this category is in fact a *groupoid*. 10 | 11 | @include{001P} 12 | -------------------------------------------------------------------------------- /_nodes/0014.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The generalized pullback lemma 3 | --- 4 | 5 | In light of {%ref 0003 %}, the following result for displayed categories generalizes 6 | the ordinary "pullback lemma." 7 | 8 | @include{001H} 9 | 10 | -------------------------------------------------------------------------------- /_nodes/0015.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Cocartesian fibrations 3 | --- 4 | 5 | Cocartesian fibrations are a dual notion to cartesian fibrations, in which the 6 | variance of indexing is reversed. 7 | 8 | @include{0016} 9 | 10 | We use a "pushout corner" to indicate $\bar{x}\to\bar{y}$ as a cocartesian morphism, 11 | a notation justified by {%cref 0019 %}. 12 | 13 | @include{0017} 14 | 15 | **Remark.** These are also known as *opfibrations*. 16 | 17 | @include{0018} 18 | @include{002X} 19 | @include{0019} 20 | -------------------------------------------------------------------------------- /_nodes/0016.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Cocartesian morphism 3 | taxon: definition 4 | --- 5 | 6 | Let $E$ be displayed over $B$, and let $f:x\to y \in B$; a morphism 7 | $\bar{f}:\bar{x}\to\Sub{f} \bar{y}$ in $E$ is called *cocartesian* over $f$ when for 8 | any $m:y\to u$ and $\bar{h}:\bar{x}\to\Sub{f;m} \bar{u}$ there exists a unique 9 | $\bar{m} : \bar{y}\to\Sub{m} \bar{u}$ with $\bar{f};\bar{m} = \bar{h}$: 10 | {%tex macrolib: topos%} 11 | \begin{tikzpicture}[diagram] 12 | \SpliceDiagramSquare{ 13 | west/style = lies over, 14 | east/style = lies over, 15 | north/node/style = upright desc, 16 | height = 1.5cm, 17 | nw = \bar{x}, 18 | ne = \bar{y}, 19 | sw = x, 20 | north = \bar{f}, 21 | south = f, 22 | se = y, 23 | ne/style = ne pullback, 24 | } 25 | \node (u') [above right = 1.5cm of ne,xshift=.5cm] {$\bar{u}$}; 26 | \node (u) [above right = 1.5cm of se,xshift=.5cm] {$u$}; 27 | \draw[lies over] (u') to (u); 28 | \draw[->,bend left=30] (nw) to node [sloped,above] {$\bar{h}$} (u'); 29 | \draw[->] (se) to node [sloped,below] {$m$} (u); 30 | \draw[->,exists] (ne) to node [desc] {$\bar{m}$} (u'); 31 | \end{tikzpicture} 32 | {%endtex%} 33 | -------------------------------------------------------------------------------- /_nodes/0017.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Cocartesian fibration 3 | taxon: definition 4 | --- 5 | 6 | A displayed category $E$ over $B$ is a *cocartesian fibration* when for each 7 | $f : x \to y\in B$ and $\bar{x}\in E\Sub{x}$, there exists a displayed object 8 | $\bar{y}\in E\Sub{y}$ and a *cocartesian* morphism $\bar{f} : \bar{x}\to\Sub{f} \bar{y}$. 9 | -------------------------------------------------------------------------------- /_nodes/0018.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The total opposite of a displayed category 3 | --- 4 | 5 | @include{001I} 6 | 7 | **Warning.** Do not confuse this construction with {%cref 001Z%}, which produces a 8 | displayed category over $B$ and not $\OpCat{B}$. 9 | 10 | @include{001J} 11 | @include{001K} 12 | @include{001L} 13 | -------------------------------------------------------------------------------- /_nodes/0019.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Example: The dual self-indexing" 3 | --- 4 | 5 | Dually to the fundamental self-indexing {%pref 001X %}, every category $B$ can 6 | also be displayed over itself via its *coslices* $\CoSl{x}{B}$. 7 | 8 | @include{002Z} 9 | 10 | @include{001M} 11 | @include{001N} 12 | @include{0030} 13 | -------------------------------------------------------------------------------- /_nodes/001A.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Internal category 3 | taxon: definition 4 | --- 5 | 6 | Let $E$ be a category with finite limits; then an _internal category_ 7 | in $E$ is defined by the following data: 8 | 9 | 1. an object of objects $C\Sub{0}\in E$, 10 | 2. an object of morphisms $C\Sub{1}\in E$, 11 | 3. source and target morphisms $s,t:C\Sub{1}\to C\Sub{0}$, 12 | 4. a generic identity morphism $C\Sub{0}\to C\Sub{1}$, 13 | 5. a generic composition morphism $C\Sub{1}\times\Sub{C\Sub{0}}C\Sub{1}\to C\Sub{1}$, 14 | 6. satisfying a number of laws corresponding to those of a category. 15 | 16 | For the details of these laws, we refer to the nLab ({%nlab internal category%}). 17 | -------------------------------------------------------------------------------- /_nodes/001B.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Locally small fibration 3 | taxon: definition 4 | --- 5 | 6 | A cartesian fibration $E$ over $B$ is *locally small* if and only if for 7 | each $x\in B$ and $u,v\in E\Sub{x}$, the total category $\TotCat{\CandHom{x}{u}{v}}$ 8 | has a terminal object. 9 | -------------------------------------------------------------------------------- /_nodes/001C.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Hom candidates 3 | taxon: definition 4 | --- 5 | 6 | For any $x\in B$ and displayed objects $u,v\in E\Sub{x}$, we define a *hom 7 | candidate* for $u,v$ to be a span $u\leftarrow \bar{h} \rightarrow v$ in $E$ in which the left-hand leg is cartesian: 8 | {%tex macrolib: topos%} 9 | \begin{tikzpicture}[diagram] 10 | \SpliceDiagramSquare{ 11 | height = 1.5cm, 12 | west/style = lies over, 13 | east/style = lies over, 14 | north/style = <-, 15 | south/style = <-, 16 | ne/style = ne pullback, 17 | ne = \bar{h}, 18 | se = h, 19 | sw = x, 20 | nw = u, 21 | south = p\Sub{h}, 22 | north = \bar{p}\Sub{h} 23 | } 24 | \SpliceDiagramSquare{ 25 | height = 1.5cm, 26 | west/style = lies over, 27 | east/style = lies over, 28 | glue = west, 29 | glue target = l/, 30 | ne = v, 31 | se = x, 32 | north = \epsilon\Sub{h}, 33 | south = p\Sub{h}, 34 | } 35 | \end{tikzpicture} 36 | {%endtex%} 37 | 38 | In the above, $h$ should be thought of as a candidate for the "hom object" of $u,v$, 39 | and $\epsilon\Sub{h}$ should be viewed as the structure of an "evaluation map" for $h$. 40 | This structure can be rephrased in terms of a displayed category $\CandHom{x}{u}{v}$ over $\Sl{B}{x}$: 41 | 42 | 1. Given $h\in \Sl{B}{x}$, an object of $\CandHom{x}{u}{v}\Sub{h}$ is given by a hom candidate 43 | whose apex in the base is $h$ itself. We will write $\bar{h}$ metonymically 44 | for the entire hom candidate over $h$. 45 | 46 | 2. Given $\alpha:l\to h\in\Sl{B}{x}$ and hom candidates $\bar{l}\in \CandHom{x}{u}{v}\Sub{l}$ and 47 | $\bar{h}\in \CandHom{x}{u}{v}\Sub{h}$, a morphism $\bar{h}\to\Sub{\alpha} \bar{l}$ is given by a 48 | cartesian morphism $\bar\alpha:\bar{l}\to\Sub{\alpha}\bar{h}$ in $E$ such that the 49 | following diagram commutes: 50 | {%tex macrolib: topos%} 51 | \begin{tikzpicture}[diagram] 52 | \node (u) {$u$}; 53 | \node (l) [above right = 1.5cm of u,xshift=.5cm] {$\bar{l}$}; 54 | \node (h) [below right = 1.5cm of u,xshift=.5cm] {$\bar{h}$}; 55 | \node (v) [below right = 1.5cm of l,xshift=.5cm] {$v$}; 56 | \draw[->] (h) to node [sloped,below] {$\bar{p}\Sub{h}$} (u); 57 | \draw[->] (l) to node [sloped,above] {$\bar{p}\Sub{l}$} (u); 58 | \draw[->] (h) to node [sloped,below] {$\epsilon\Sub{h}$} (v); 59 | \draw[->] (l) to node [sloped,above] {$\epsilon\Sub{l}$} (v); 60 | \draw[->] (l) to node [upright desc] {$\bar\alpha$} (h); 61 | \end{tikzpicture} 62 | {%endtex%} 63 | -------------------------------------------------------------------------------- /_nodes/001D.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: definition 3 | --- 4 | 5 | An ordinary category is called *globally small* when it has a set of objects. 6 | -------------------------------------------------------------------------------- /_nodes/001E.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: definition 3 | title: Generic object 4 | --- 5 | 6 | Let $E$ be a cartesian fibration over $B$; a *generic object* for $E$ is defined to be an object $\bar{u}\in \TotCat{E}$ such that for any $\bar{z}\in \TotCat{E}$ there exists a cartesian map $\bar{z}\to \bar{u}$. 7 | 8 | **Warning.** Our terminology differs from that of Jacobs {%cite jacobs:1999 -A%}; what we refer to as a *generic object* here is Jacobs' *weak generic object*. We prefer the unqualified terminology, as generic objects in the stronger sense are very rare. 9 | -------------------------------------------------------------------------------- /_nodes/001F.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: definition 3 | --- 4 | 5 | A *meta-category* $\mathfrak{C}$ is defined by explaining what 6 | an object of $\mathfrak{E}$ is, and, given two objects $x,y\in \mathfrak{E}$, 7 | what a morphism from $x$ to $y$ is, together with the following operations: 8 | 9 | 1. for each object $x\in \mathfrak{E}$, an *identity* map $\Idn{x} : x \to x$, 10 | 2. for any two maps $f:x\to y$ and $g:y\to z$, a *composite map* $f;g : x \to z$, 11 | 3. such that the following equations hold: 12 | \\[ 13 | \Idn{x};h = h\qquad 14 | h;\Idn{y} = h\qquad 15 | f;(g;h) = (f;g);{h} 16 | \\] 17 | 18 | -------------------------------------------------------------------------------- /_nodes/001G.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: definition 3 | --- 4 | 5 | A *category* $E$ is defined to be a meta-category whose objects 6 | are defined to be the elements of some collection, and for any two objects 7 | $x,y\in E$ the morphisms $x\to y$ are defined to be the elements of some 8 | collection. 9 | -------------------------------------------------------------------------------- /_nodes/001H.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: lemma 3 | title: Generalized pullback lemma 4 | --- 5 | 6 | Let $\bar{f} : \bar{x}\to\Sub{f}\bar{y}$, and suppose that 7 | $\bar{g} : \bar{y}\to\Sub{g}\bar{z}$ is cartesian over $g$. Then 8 | $\bar{f};\bar{g}$ is cartesian over $f;g$ if and only if $\bar{f}$ is cartesian 9 | over $f$. 10 | {%tex macrolib: topos%} 11 | \begin{tikzpicture}[diagram] 12 | \SpliceDiagramSquare{ 13 | height = 1.5cm, 14 | west/style = lies over, 15 | east/style = lies over, 16 | nw/style = pullback, 17 | sw = y, 18 | nw = \bar{y}, 19 | se = z, 20 | ne = \bar{z}, 21 | south = g, 22 | north = \bar{g}, 23 | } 24 | \node (x*) [dotted pullback, left = of nw] {$\bar{x}$}; 25 | \node (x) [left = of sw] {$x$}; 26 | \draw[->] (x*) to node [above] {$\bar{f}$} (nw); 27 | \draw[lies over] (x*) to (x); 28 | \draw[->] (x) to node [below] {$f$} (sw); 29 | \end{tikzpicture} 30 | {%endtex%} 31 | 32 | **Proof.** Suppose first that $\bar{f}$ is cartesian. To see that $\bar{f};\bar{g}$ 33 | is cartesian, we must construct a unique factorization as follows: 34 | {%tex macrolib: topos%} 35 | \begin{tikzpicture}[diagram] 36 | \SpliceDiagramSquare{ 37 | west/style = lies over, 38 | east/style = lies over, 39 | north/node/style = upright desc, 40 | height = 1.5cm, 41 | nw = \bar{x}, 42 | ne = \bar{y}, 43 | sw = x, 44 | north = \bar{f}, 45 | south = f, 46 | se = y, 47 | nw/style = pullback, 48 | ne/style = pullback, 49 | } 50 | \node (z') [right = 2cm of ne] {$\bar{z}$}; 51 | \node (z) [right = 2cm of se] {$z$}; 52 | \draw[lies over] (z') to (z); 53 | \draw[->] (se) to node [below] {$g$} (z); 54 | \draw[->] (ne) to node [desc] {$\bar{g}$} (z'); 55 | 56 | \node (u') [above left = 1.5cm of nw,xshift=-.5cm] {$\bar{u}$}; 57 | \node (u) [above left = 1.5cm of sw,xshift=-.5cm] {$u$}; 58 | \draw[lies over] (u') to (u); 59 | \draw[->,bend left=30] (u') to node [sloped,above] {$\bar{h}$} (z'); 60 | \draw[->] (u) to node [sloped,below] {$m$} (sw); 61 | \draw[->,exists] (u') to (nw); 62 | \end{tikzpicture} 63 | {%endtex%} 64 | Because $\bar{g}$ is cartesian, we can factor $\bar{h} = i;\bar{g}$ for a unique 65 | $i:\bar{u}\to\Sub{m;f}\bar{y}$. Then, because $\bar{f}$ is cartesian, we can further 66 | factor $i = j;\bar{f}$ for a unique $j:\bar{u}\to\Sub{m}\bar{x}$. We conclude that 67 | there is a unique $j:\bar{u}\to\Sub{m}\bar{x}$ for which 68 | $\bar{h} = j;\bar{f};\bar{g}$, as required. 69 | 70 | Conversely, suppose that $\bar{f};\bar{g}$ is cartesian. To see that $\bar{f}$ is 71 | cartesian, we must construct a unique factorization as follows: 72 | {%tex macrolib: topos%} 73 | \begin{tikzpicture}[diagram] 74 | \SpliceDiagramSquare{ 75 | west/style = lies over, 76 | east/style = lies over, 77 | north/node/style = upright desc, 78 | height = 1.5cm, 79 | nw = \bar{x}, 80 | ne = \bar{y}, 81 | sw = x, 82 | north = \bar{f}, 83 | south = f, 84 | se = y, 85 | ne/style = pullback, 86 | } 87 | \node (z') [right = 2cm of ne] {$\bar{z}$}; 88 | \node (z) [right = 2cm of se] {$z$}; 89 | \draw[lies over] (z') to (z); 90 | \draw[->] (se) to node [below] {$g$} (z); 91 | \draw[->] (ne) to node [desc] {$\bar{g}$} (z'); 92 | 93 | \node (u') [above left = 1.5cm of nw,xshift=-.5cm] {$\bar{u}$}; 94 | \node (u) [above left = 1.5cm of sw,xshift=-.5cm] {$u$}; 95 | \draw[lies over] (u') to (u); 96 | \draw[->,bend left=30] (u') to node [sloped,above] {$\bar{h}$} (ne); 97 | \draw[->] (u) to node [sloped,below] {$m$} (sw); 98 | \draw[->,exists] (u') to (nw); 99 | \end{tikzpicture} 100 | {%endtex%} 101 | Because $\bar{f};\bar{g}$ is cartesian, we can factor 102 | $\bar{h};\bar{g} = i;\bar{f};\bar{g}$ for a unique $i:\bar{u}\to\Sub{m}\bar{x}$. 103 | On the other hand, because $\bar{g}$ is cartesian, there is a unique 104 | $j:\bar{u}\to\Sub{m;f}\bar{y}$ for which $\bar{h};\bar{g} = j;\bar{g}$; as both 105 | $\bar{h}$ and $i;\bar{f}$ satisfy this condition, we conclude $\bar{h}=i;\bar{f}$. 106 | Therefore, there is a unique $i:\bar{u}\to\Sub{m}\bar{x}$ for which 107 | $\bar{h} = i;\bar{f}$, as required. 108 | {%qed%} 109 | -------------------------------------------------------------------------------- /_nodes/001I.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: construction 3 | --- 4 | 5 | Let $E$ be displayed over $B$; we define its *total opposite* $\TotOpCat{E}$ 6 | displayed over $\OpCat{B}$ as follows: 7 | 8 | 1. An object of $\TotOpCat{E}\Sub{x}$ is given by an object of $E\Sub{x}$. 9 | 10 | 2. Given $f : x \to y\in \OpCat{B}$, a displayed morphism $\bar{x}\to\Sub{f} \bar{y}$ in $\TotOpCat{E}$ 11 | is given by a displayed morphism $\bar{y}\to\Sub{f} \bar{x}$ in $E$. 12 | 13 | 14 | -------------------------------------------------------------------------------- /_nodes/001J.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: exercise 3 | --- 4 | 5 | Let $E$ be displayed over $B$. Prove that the total category {%pref 000A %} 6 | $\TotCat{\TotOpCat{E}}$ is $\OpCat{\prn{\TotCat{E}}}$, and its projection functor is 7 | $\OpCat{\prn{p\Sub{E}}} : \OpCat{\TotCat{E}}\to\OpCat{B}$. 8 | -------------------------------------------------------------------------------- /_nodes/001K.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: exercise 3 | --- 4 | 5 | Let $E$ be displayed over $B$, and let $f:x\to y\in B$. Prove that a 6 | morphism $\bar{f}:\bar{x}\to\Sub{f}\bar{y}$ is cartesian over $f$ in $E$ if and only 7 | if $\bar{f}:\bar{y}\to\Sub{f}\bar{x}$ is cocartesian over $f$ in $\TotOpCat{E}$. 8 | 9 | -------------------------------------------------------------------------------- /_nodes/001L.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: exercise 3 | --- 4 | 5 | Prove that a displayed category $E$ is a cartesian fibration over $B$ 6 | if and only if $\TotOpCat{E}$ is a cocartesian fibration over $\OpCat{B}$. 7 | 8 | -------------------------------------------------------------------------------- /_nodes/001M.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: exercise 3 | --- 4 | 5 | Prove that $\overline{B}$ is a cocartesian fibration if and only if 6 | $B$ has pushouts. 7 | -------------------------------------------------------------------------------- /_nodes/001N.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: exercise 3 | --- 4 | 5 | Prove that the total category {%pref 000A%} of $\overline{B}$ is the 6 | arrow category $B^{\to}$, and the projection is the *domain* functor. 7 | -------------------------------------------------------------------------------- /_nodes/001O.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: definition 3 | --- 4 | 5 | A cartesian fibration $E$ over $B$ is said to be a *right fibration* 6 | when all displayed morphisms in $E$ are cartesian. 7 | -------------------------------------------------------------------------------- /_nodes/001P.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: theorem 3 | title: Characterization of right fibrations 4 | --- 5 | 6 | A cartesian fibration $E$ over $B$ is a right fibration if and only if 7 | all its vertical maps are isomorphisms. 8 | 9 | **Proof.** Suppose that $E$ is a right fibration over $B$, and fix $b\in B$, 10 | $\bar{b}\in E\Sub{b}$, and a vertical map $f:\bar{b}\to\Sub{1\Sub{b}} \bar{b}$. 11 | Using the hypothesis that $f$ is cartesian, it has a unique section 12 | $g:\bar{b}\to\Sub{1\Sub{b}} \bar{b}$ as follows: 13 | {%tex macrolib: topos%} 14 | \begin{tikzpicture}[diagram] 15 | \SpliceDiagramSquare{ 16 | west/style = lies over, 17 | east/style = lies over, 18 | north/node/style = upright desc, 19 | height = 1.5cm, 20 | nw = \bar{b}, 21 | ne = \bar{b}, 22 | north = f, 23 | sw = b, 24 | se = b, 25 | south/style = double, 26 | nw/style = pullback, 27 | } 28 | \node (u') [above left = 1.5cm of nw,xshift=-.5cm] {$\bar{b}$}; 29 | \node (u) [above left = 1.5cm of sw,xshift=-.5cm] {$b$}; 30 | \draw[lies over] (u') to (u); 31 | \draw[double,bend left=30] (u') to (ne); 32 | \draw[double] (u) to (sw); 33 | \draw[->,exists] (u') to node [desc] {$g$} (nw); 34 | \end{tikzpicture} 35 | {%endtex%} 36 | Likewise, because $g$ is cartesian, $f$ is the unique section of $g$; thus $f$ is an 37 | isomorphism in $E\Sub{b}$. 38 | 39 | Conversely, suppose that $E$ is a cartesian fibration whose vertical maps are 40 | isomorphisms. Fix $f:x\to y \in B$ and an arbitrary displayed morphism 41 | $\bar{g}:\bar{x}\to\Sub{f}\bar{y}$. Then $\bar{g}$ is the precomposition of a 42 | cartesian lift $\bar{f}:\bar{x}\tick\to\Sub{f}\bar{y}$ with a vertical map: 43 | {%tex macrolib: topos%} 44 | \begin{tikzpicture}[diagram] 45 | \SpliceDiagramSquare{ 46 | west/style = lies over, 47 | east/style = lies over, 48 | north/node/style = upright desc, 49 | height = 1.5cm, 50 | nw = \bar{x}', 51 | ne = \bar{y}, 52 | sw = x, 53 | north = \bar{f}, 54 | south = f, 55 | se = y, 56 | nw/style = pullback, 57 | } 58 | \node (u') [above left = 1.5cm of nw,xshift=-.5cm] {$\bar{x}$}; 59 | \node (u) [above left = 1.5cm of sw,xshift=-.5cm] {$x$}; 60 | \draw[lies over] (u') to (u); 61 | \draw[->,bend left=30] (u') to node [sloped,above] {$\bar{g}$} (ne); 62 | \draw[double] (u) to (sw); 63 | \draw[->,exists] (u') to node [desc] {$i$} (nw); 64 | \end{tikzpicture} 65 | {%endtex%} 66 | Because vertical maps are isomorphisms and $\bar{f}$ is cartesian, we can observe 67 | that $\bar{g}$ is cartesian as follows, writing $\bar{m} : \bar{u}\to\Sub{m} 68 | \bar{x}\tick$ for the unique factorization of $\bar{h}$ through $\bar{f}$ over $m$: 69 | {%tex macrolib: topos%} 70 | \begin{tikzpicture}[diagram] 71 | \SpliceDiagramSquare{ 72 | west/style = lies over, 73 | east/style = lies over, 74 | north/node/style = upright desc, 75 | height = 1.5cm, 76 | nw = \bar{x}, 77 | ne = \bar{y}, 78 | sw = x, 79 | north = \bar{g}, 80 | south = f, 81 | se = y, 82 | nw/style = pullback, 83 | } 84 | \node (u') [above left = 1.5cm of nw,xshift=-1cm] {$\bar{u}$}; 85 | \node (u) [above left = 1.5cm of sw,xshift=-1cm] {$u$}; 86 | \draw[lies over] (u') to (u); 87 | \draw[->,bend left=30] (u') to node [sloped,above] {$\bar{h}$} (ne); 88 | \draw[->] (u) to node [sloped,below] {$m$} (sw); 89 | \draw[->,exists] (u') to node [desc] {$\bar{m};i\Sup{-1}$} (nw); 90 | \end{tikzpicture} 91 | {%endtex%} 92 | {%qed%} 93 | -------------------------------------------------------------------------------- /_nodes/001Q.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: definition 3 | title: Small fibration 4 | --- 5 | 6 | A cartesian fibration is called *small* when it is both locally small 7 | {%ref 000I%} and globally small {%ref 000J%}. 8 | -------------------------------------------------------------------------------- /_nodes/001R.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: construction 3 | --- 4 | 5 | Let $C$ be an internal category in $E$. We may define a fibered category $\brk{C}$ over $E$ called the *externalization* of $C$. 6 | 7 | 1. Given $x\in E$, an object of $\brk{C}\Sub{x}$ is defined to be a morphism $x\to C\Sub{0}$ in $E$. 8 | 9 | 2. Given $x,y\in E$ and $f:x\to y$ and $u \in \brk{C}\Sub{x}$ and $v\in 10 | \brk{C}\Sub{y}$, a morphism $u\to\Sub{f} v$ is defined to be a morphism $h : 11 | x\to C\Sub{1}$ in $E$ such that the following diagram commutes: 12 | {%tex macrolib: topos%} 13 | \begin{tikzpicture}[diagram] 14 | \node (x) {$x$}; 15 | \node (y) [below = of x] {$y$}; 16 | \node (C/1) [right = of x] {$C\Sub{1}$}; 17 | \node (C/0) [below = of C/1] {$C\Sub{0}$}; 18 | \node (C/0') [above = of C/1] {$C\Sub{0}$}; 19 | \draw[->] (x) to node [upright desc] {$h$} (C/1); 20 | \draw[->] (C/1) to node [right] {$t$} (C/0); 21 | \draw[->] (C/1) to node [right] {$s$} (C/0'); 22 | \draw[->] (y) to node [below] {$v$} (C/0); 23 | \draw[->] (x) to node [left] {$f$} (y); 24 | \draw[->] (x) to node [sloped,above] {$u$} (C/0'); 25 | \end{tikzpicture} 26 | {%endtex%} 27 | -------------------------------------------------------------------------------- /_nodes/001S.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: theorem 3 | --- 4 | 5 | 6 | The externalization $\brk{\gl{\bar{u}}}$ of the internal category $\gl{\bar{u}}$ is equivalent to $\FullSubfib{\bar{u}}$. 7 | 8 | **Proof.** We will define a fibred equivalence $F : \brk{\gl{\bar{u}}}\to \FullSubfib{\bar{u}}$ over $B$. 9 | 10 | 1. Fix $x\in B$ and $\chi\Sub{x} \in \brk{\gl{\bar{u}}}\Sub{x}$, i.e. $\chi\Sub{x} : x\to u$; we define $F\prn{\chi\Sub{x}}$ to be an arbitrary cartesian map $\phi\Sub{x} : \bar{x}\to\Sub{\chi\Sub{x}} \bar{u}$. (Here we have used the axiom of choice for collections {%ref 000R%}.) 11 | 12 | 2. Fix $f : x\to y\in B$ and $\chi\Sub{x} :x\to u$ and $\chi\Sub{y}:y\to u$ and a diagram representing a displayed morphism $h$ from $\chi\Sub{x}$ to $\chi\Sub{y}$ over $f$ as below: 13 | {%tex macrolib: topos%} 14 | \begin{tikzpicture}[diagram] 15 | \node (x) {$x$}; 16 | \node (y) [below = of x] {$y$}; 17 | \node (C/1) [right = of x] {$\brk{\bar\partial\Sub{1},\bar\partial\Sub{2}}$}; 18 | \node (C/0) [below = of C/1] {$u$}; 19 | \node (C/0') [above = of C/1] {$u$}; 20 | \draw[->,magenta] (x) to node [upright desc] {$h$} (C/1); 21 | \draw[->] (C/1) to node [right] {$t$} (C/0); 22 | \draw[->] (C/1) to node [right] {$s$} (C/0'); 23 | \draw[->] (y) to node [below] {$\chi\Sub{y}$} (C/0); 24 | \draw[->] (x) to node [left] {$f$} (y); 25 | \draw[->] (x) to node [sloped,above] {$\chi\Sub{x}$} (C/0'); 26 | \end{tikzpicture} 27 | {%endtex%} 28 | 29 | We must define $F\prn{h}:\bar{x}\to\Sub{f} \bar{y}$, fixing arbitrary 30 | cartesian maps $\bar\chi\Sub{x}:\bar{x}\to\Sub{\chi\Sub{x}}\bar{u}$ and 31 | $\bar\chi\Sub{y}:\bar{y}\to\Sub{\chi\Sub{y}}\bar{u}$. First we lift $h:x\to \brk{\bar\partial\Sub{1},\bar\partial\Sub{2}}$ 32 | into $E$ using the universal property of the cartesian lift: 33 | {%tex macrolib: topos%} 34 | \begin{tikzpicture}[diagram] 35 | \SpliceDiagramSquare<0/>{ 36 | height = 1.5cm, 37 | west/style = lies over, 38 | east/style = lies over, 39 | width = 2.5cm, 40 | north/node/style = upright desc, 41 | ne/style = pullback, 42 | north/style = {->,exists}, 43 | nw = \bar{x}, 44 | sw = x, 45 | se = \brk{\bar\partial\Sub{1},\bar\partial\Sub{2}}, 46 | ne = \InvImg{\brk{\bar\partial\Sub{1},\bar\partial\Sub{2}}}\bar\partial\Sub{1}, 47 | south = h, 48 | north = \bar{h}, 49 | } 50 | \SpliceDiagramSquare<1/>{ 51 | glue = west, 52 | glue target = 0/, 53 | height = 1.5cm, 54 | width = 2.5cm, 55 | north/node/style = upright desc, 56 | south/node/style = upright desc, 57 | east/style = lies over, 58 | ne/style = pullback, 59 | ne = \bar\partial\Sub{1}, 60 | se = u\times u, 61 | south = p, 62 | north = \bar{p}, 63 | } 64 | \SpliceDiagramSquare<2/>{ 65 | glue = west, 66 | glue target = 1/, 67 | height = 1.5cm, 68 | width = 2.5cm, 69 | north/node/style = upright desc, 70 | south/node/style = upright desc, 71 | east/style = lies over, 72 | ne = \bar{u}, 73 | se = u, 74 | south = \pi\Sub{1}, 75 | north = \bar\pi\Sub{1}, 76 | } 77 | \draw[->,bend left=30] (0/nw) to node [above] {$\bar\chi\Sub{x}$} (2/ne); 78 | \draw[->,bend right=30] (0/se) to node [below] {$s$} (2/se); 79 | \end{tikzpicture} 80 | {%endtex%} 81 | 82 | By composition with the "evaluation map" for our hom object, we have a map $\bar{x}\to\Sub{f;\chi\Sub{y}}\bar{u}$: 83 | {%tex macrolib: topos%} 84 | \begin{tikzpicture}[diagram] 85 | \SpliceDiagramSquare<0/>{ 86 | height = 1.5cm, 87 | west/style = lies over, 88 | east/style = lies over, 89 | south/node/style = upright desc, 90 | width = 2.5cm, 91 | nw = \bar{x}, 92 | sw = x, 93 | se = \brk{\bar\partial\Sub{1},\bar\partial\Sub{2}}, 94 | ne = \InvImg{\brk{\bar\partial\Sub{1},\bar\partial\Sub{2}}}\bar\partial\Sub{1}, 95 | south = h, 96 | north = \bar{h}, 97 | } 98 | \SpliceDiagramSquare<1/>{ 99 | glue = west, 100 | glue target = 0/, 101 | height = 1.5cm, 102 | width = 2.5cm, 103 | south/node/style = upright desc, 104 | east/style = lies over, 105 | ne/style = pullback, 106 | ne = \bar\partial\Sub{2}, 107 | se = u\times u, 108 | south = p, 109 | north = \bar{\epsilon}, 110 | } 111 | \SpliceDiagramSquare<2/>{ 112 | glue = west, 113 | glue target = 1/, 114 | height = 1.5cm, 115 | width = 2.5cm, 116 | south/node/style = upright desc, 117 | east/style = lies over, 118 | ne = \bar{u}, 119 | se = u, 120 | south = \pi\Sub{2}, 121 | north = \bar\pi\Sub{2}, 122 | } 123 | \draw[->,bend right=30] (0/se) to node [upright desc] {$t$} (2/se); 124 | \node (y) [between = 0/sw and 2/se, yshift=-2cm] {$y$}; 125 | \draw[bend right=30,->] (0/sw) to node [sloped,below] {$f$} (y); 126 | \draw[bend right=30,->] (y) to node [sloped,below] {$\chi\Sub{y}$} (2/se); 127 | \end{tikzpicture} 128 | {%endtex%} 129 | 130 | Next we define $F\prn{h}:\bar{x}\to\Sub{f}\bar{y}$ using the universal property of (another) cartesian lift: 131 | {%tex macrolib: topos%} 132 | \begin{tikzpicture}[diagram] 133 | \SpliceDiagramSquare{ 134 | height = 1.5cm, 135 | east/style = lies over, 136 | west/style = lies over, 137 | ne/style = pullback, 138 | north/style = {->,exists}, 139 | north/node/style = upright desc, 140 | ne = \bar{y}, 141 | nw = \bar{x}, 142 | se = y, 143 | sw = x, 144 | south = f, 145 | north = F\prn{h}, 146 | width = 2.5cm, 147 | } 148 | \SpliceDiagramSquare{ 149 | glue = west, 150 | glue target = l/, 151 | height = 1.5cm, 152 | east/style = lies over, 153 | north/node/style = upright desc, 154 | ne = \bar{u}, 155 | se = u, 156 | south = \chi\Sub{y}, 157 | north = \bar\chi\Sub{y}, 158 | } 159 | \draw[->,bend left=30] (l/nw) to node [above] {$\bar{h};\bar{\epsilon};\bar\pi\Sub{2}$} (r/ne); 160 | \end{tikzpicture} 161 | {%endtex%} 162 | {%qed%} 163 | -------------------------------------------------------------------------------- /_nodes/001T.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: exercise 3 | --- 4 | 5 | Prove that the total category $\TotCat{\SelfIx{B}}$ of the fundamental self-indexing {%pref 0003%} is the arrow category $B^{\to}$, and the projection is the codomain functor. 6 | -------------------------------------------------------------------------------- /_nodes/001U.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: exercise 3 | --- 4 | 5 | Suppose that $B$ is an internal category in $\mathbf{Set}$, i.e. 6 | it has a set of objects. Exhibit an equivalence of displayed categories between 7 | $P\Sub{\bullet}$ as described above, and the naïve definition which $E\Sub{x}$ is the 8 | collection of objects $u\in E$ such that $Pu = x$. 9 | 10 | -------------------------------------------------------------------------------- /_nodes/001V.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: exercise 3 | --- 4 | 5 | Explicitly construct the functorial action of $\TotCat{P\Sub{\bullet}}\to E$. 6 | -------------------------------------------------------------------------------- /_nodes/001W.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: exercise 3 | --- 4 | 5 | Verify that $\TotCat{P\Sub{\bullet}}\to E$ is a categorical equivalence. 6 | -------------------------------------------------------------------------------- /_nodes/001X.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The fundamental self-indexing 3 | taxon: construction 4 | --- 5 | 6 | Let $B$ be an ordinary category; there is an important displayed category 7 | $\SelfIx{B}$ over $B$ given fiberwise by the *slices* of $B$. 8 | 1. For $x\in B$, we define $\SelfIx{B}\Sub{x}$ to be the collection $\Sl{B}{x}$ 9 | of pairs $(\bar{x}\in B,p\Sub{x}:\bar{x}\to x)$. 10 | 2. For $f : x\to y\in B$, we define $\SelfIx{B}\Sub{f}$ to be the collection of 11 | commuting squares in the following configuration: 12 | {%tex macrolib: topos%} 13 | \DiagramSquare{ 14 | height = 1.7cm, 15 | nw = \bar{x}, 16 | ne = \bar{y}, 17 | sw = x, 18 | se = y, 19 | west = p\Sub{x}, 20 | east = p\Sub{y}, 21 | south = f, 22 | north = \bar{f}, 23 | west/style = {->,exists}, 24 | east/style = {->,exists}, 25 | north/style = {->,exists}, 26 | } 27 | {%endtex%} 28 | -------------------------------------------------------------------------------- /_nodes/001Y.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: exercise 3 | --- 4 | 5 | Prove that $\SelfIx{B}$ from {%ref 001X%} is a cartesian fibration if and only if $B$ has pullbacks. 6 | 7 | -------------------------------------------------------------------------------- /_nodes/001Z.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: construction 3 | --- 4 | 5 | Let $E$ be fibered over $B$; we may define the *opposite* fibered category 6 | $\OpCat{E}$ over $B$ like so: 7 | 8 | 1. An object of $\OpCat{E}\Sub{x}$ is given by an object of $E\Sub{x}$. 9 | 10 | 2. Given $f : x \to y\in B$, a morphism $\bar{x}\to_f \bar{y}$ in $\OpCat{E}$ 11 | is given in terms of $E$ by a cartesian map $\bar{y}\Sub{f} : \bar{y}\Sub{x} \to\Sub{f} \bar{y}$ together 12 | with a *vertical* map $h : \bar{y}\Sub{x}\to\Sub{\Idn{x}} \bar{y}$ as depicted below: 13 | {%tex macrolib: topos%} 14 | \begin{tikzpicture}[diagram] 15 | \SpliceDiagramSquare{ 16 | height = 1.5cm, 17 | nw/style = pullback, 18 | west/style = lies over, 19 | east/style = lies over, 20 | north = \bar{y}\Sub{f}, 21 | nw = \bar{y}\Sub{x}, 22 | ne = \bar{y}, 23 | sw = x, 24 | se = y 25 | } 26 | \node (x*) [left = of nw] {$\bar{x}$}; 27 | \node (x) [left = of sw] {$x$}; 28 | \draw[->] (nw) to node [above] {$h$} (x*); 29 | \draw[lies over] (x*) to (x); 30 | \draw[double] (x) to (sw); 31 | \end{tikzpicture} 32 | {%endtex%} 33 | such that $\brc{\bar{x} \leftarrow \bar{y}\Sub{x}\Sup{1}\to \bar{y}}$ is 34 | identified with $\brc{\bar{x}\leftarrow\bar{y}\Sub{x}\Sup{2}\to \bar{y}}$ 35 | when they agree up to the unique vertical isomorphism $\bar{y}\Sub{x}\Sup{1}\cong\bar{y}\Sub{x}\Sup{2}$ 36 | induced by the universal property of cartesian maps in the sense that the following diagram commutes: 37 | {%tex macrolib: topos%} 38 | \begin{tikzpicture}[diagram] 39 | \node (x) {$\bar{x}$}; 40 | \node (yx/1) [above right = of x] {$\bar{y}\Sub{x}\Sup{1}$}; 41 | \node (y) [below right = of yx/1] {$\bar{y}$}; 42 | \node (yx/2) [below right = of x] {$\bar{y}\Sub{x}\Sup{2}$}; 43 | \draw[->] (yx/1) to node [sloped,above] {vert.} (x); 44 | \draw[->] (yx/2) to node [sloped,below] {vert.} (x); 45 | \draw[->] (yx/1) to node [sloped,above] {cart.} (y); 46 | \draw[->] (yx/2) to node [sloped,below] {cart.} (y); 47 | \draw[->] (yx/1) to node [upright desc] {$\cong$} (yx/2); 48 | \end{tikzpicture} 49 | {%endtex%} 50 | -------------------------------------------------------------------------------- /_nodes/0020.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: lemma 3 | --- 4 | 5 | A morphism $\bar{f}:\bar{x}\to\Sub{f} \bar{y}\in\OpCat{E}$ is cartesian 6 | over $f:x\to y$ if and only if the vertical leg of $f$ is an isomorphism. 7 | 8 | **Proof.** Suppose that $\bar{f} : \bar{x}\to\Sub{f}\bar{y}$ is represented by a span $\brc{\bar{x}\leftarrow\bar{y}\Sub{x}\to\bar{y}}$ in $E$ in which the vertical leg $\bar{x}\leftarrow\bar{y}\Sub{x}$ is an isomorphism. We must show that $\bar{x}\to_f\bar{y}$ is cartesian in $\OpCat{E}$. We fix a morphism $\bar{h}:\bar{w}\to\Sub{m;f}\bar{y}\in \OpCat{E}$ where $m:w\to x$, depicted below in terms of $\OpCat{E}$: 9 | {%tex macrolib: topos%} 10 | \begin{tikzpicture}[diagram] 11 | \SpliceDiagramSquare{ 12 | west/style = lies over, 13 | east/style = lies over, 14 | north/node/style = upright desc, 15 | height = 1.5cm, 16 | nw = \bar{x}, 17 | ne = \bar{y}, 18 | sw = x, 19 | se = y, 20 | south = f, 21 | north = \bar{f}, 22 | } 23 | \node (w) [left = of sw] {$w$}; 24 | \node (w') [left = of nw] {$\bar{w}$}; 25 | \draw[lies over] (w') to (w); 26 | \draw[->] (w) to node [below] {$m$} (sw); 27 | \draw[bend left=30] (w') to node [above] {$\bar{h}$} (ne); 28 | \end{tikzpicture} 29 | {%endtex%} 30 | 31 | We must define the unique intervening map $\bar{w}\to_m \bar{x}$ in $\OpCat{E}$. 32 | We first translate the above into the language of $E$ by unfolding definitions: 33 | {%tex macrolib: topos%} 34 | \begin{tikzpicture}[diagram] 35 | \SpliceDiagramSquare<0/>{ 36 | west/style = lies over, 37 | east/style = lies over, 38 | north/style = {<-}, 39 | south/style = double, 40 | height = 1.5cm, 41 | nw = \bar{w}, 42 | sw = w, 43 | se = w, 44 | ne = \bar{y}\Sub{w}, 45 | north = \bar{h}, 46 | ne/style = pullback, 47 | } 48 | \SpliceDiagramSquare<1/>{ 49 | glue = west, 50 | glue target = 0/, 51 | east/style = lies over, 52 | height = 1.5cm, 53 | ne/style = pullback, 54 | se = x, 55 | ne = \bar{y}\Sub{x}\cong \bar{x}, 56 | south = m, 57 | } 58 | \SpliceDiagramSquare<2/>{ 59 | glue = west, 60 | glue target = 1/, 61 | east/style = lies over, 62 | height = 1.5cm, 63 | se = y, 64 | ne = \bar{y}, 65 | south = f, 66 | north = \bar{f}, 67 | } 68 | \end{tikzpicture} 69 | {%endtex%} 70 | 71 | The desired intervening map $\bar{w}\to\Sub{m} \bar{x}\in \OpCat{E}$ shakes out in the language of $E$ to be a span $\brc{\bar{w}\leftarrow \bar{x}\Sub{w}\to\Sub{m} \bar{x}}$ in which the left-hand leg is vertical and the right-hand leg is cartesian over $m:w\to x$. But the left-hand span $\brc{\bar{w}\leftarrow\bar{y}\Sub{w}\to \bar{y}\Sub{x}\cong \bar{x}}$ in the diagram above is exactly what we need. 72 | 73 | We leave the converse to the reader. 74 | {%qed%} 75 | -------------------------------------------------------------------------------- /_nodes/0021.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: corollary 3 | --- 4 | 5 | The displayed category $\OpCat{E}$ is a cartesian fibration. 6 | 7 | **Proof.** 8 | Fixing $\bar{y}\in \OpCat{E}\Sub{y}$ and $f:x\to y\in B$, we must 9 | exhibit a cartesian lift $\bar{f} : \bar{x}\to\Sub{f}\bar{y}\in \OpCat{E}$. 10 | By the characterization {%ref 000T%} it suffices to find *any* map over $f$ whose vertical component is an isomorphism. Writing $\bar{y}\Sub{x}\to\Sub{f}\bar{y}$ for the cartesian lift of $f$ in $E$, consider the map in $\OpCat{E}$ presented by the following span in $E$: 11 | {%tex macrolib: topos%} 12 | \begin{tikzpicture}[diagram] 13 | \SpliceDiagramSquare{ 14 | nw = \bar{y}\Sub{x}, 15 | ne = \bar{y}\Sub{x}, 16 | sw = x, 17 | se = x, 18 | north/style = double, 19 | south/style = double, 20 | west/style = lies over, 21 | east/style = lies over, 22 | ne/style = pullback, 23 | height = 1.5cm, 24 | } 25 | \SpliceDiagramSquare{ 26 | glue = west, 27 | glue target = l/, 28 | height = 1.5cm, 29 | east/style = lies over, 30 | ne = \bar{y}, 31 | se = y, 32 | south = f, 33 | } 34 | \end{tikzpicture} 35 | {%endtex%} 36 | {%qed%} 37 | -------------------------------------------------------------------------------- /_nodes/0022.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Geometric universe 3 | taxon: definition 4 | --- 5 | 6 | A *geometric universe* $E$ is defined to be a finitely complete cartesian 7 | closed category with a subobject classifier and a natural numbers object. 8 | -------------------------------------------------------------------------------- /_nodes/0023.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Geometric universes 3 | --- 4 | 5 | @include{0022} 6 | 7 | 8 | @include{0036} 9 | @include{0038} 10 | @include{0037} 11 | 12 | @include{0039} 13 | -------------------------------------------------------------------------------- /_nodes/0024.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Topoi in a geometric universe 3 | --- 4 | 5 | @include{0025} 6 | @include{0026} 7 | @include{0035} 8 | -------------------------------------------------------------------------------- /_nodes/0025.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Topos 3 | taxon: definition 4 | --- 5 | 6 | Let $E$ be a geometric universe. A $E$-*topos* $X$ or a *topos in 7 | $E$* is defined to be a geometric universe $\Sh{X}$ equipped with an algebraic morphism $X:E\to\Sh{X}$ whose gluing fibration $\GL{X}$ has a 8 | small separator {%pref 002H%}. A morphism of $E$-topoi $f:{X}\to{Y}$ is defined by an algebraic 9 | morphism $\Sh{f}:\Sh{Y}\to\Sh{X}$ of geometric universes equipped with 10 | a 2-isomorphism $\varphi_{f}:X \cong Y;\Sh{f}$ in $[E,\Sh{X}]$. 11 | {%tex macrolib: topos%} 12 | \begin{tikzpicture}[diagram] 13 | \node (E) {$E$}; 14 | \node (S/Y) [below left = of E] {$\Sh{Y}$}; 15 | \node (S/X) [below right = of E] {$\Sh{X}$}; 16 | \draw[->] (E) to node [sloped,above] {$Y$} (S/Y); 17 | \draw[->] (S/Y) to node (S/f) [below] {$\Sh{f}$} (S/X); 18 | \draw[->] (E) to node [sloped,above] {$X$} (S/X); 19 | \node [between = E and S/f] {$\varphi_{f}$}; 20 | \end{tikzpicture} 21 | {%endtex%} 22 | 23 | It will often be convenient to display pasting diagrams as *string diagrams*, 24 | which we read in diagrammatic order from top left to bottom right. A string 25 | diagram views 2-cell as a "transformer" through which information passes 26 | along a wire; the input/output interface of such a transformer is written on 27 | the wires. Regions of whitespace denote objects of the ambient 2-category. Our pasting diagram above is depicted as a string diagram in $\AlgGU$ below: 28 | {%tex macrolib: topos%} 29 | \begin{ZX} 30 | \zxN{} &\dar[close]{X}\\ 31 | \zxN{} &\zxX[pilr]{\varphi_f}\dlar[swap,-o,close]{Y}\drar[N,close]{\Sh{f}}\\[3mm] 32 | \zxN{} & \zxN{} & \zxN{} 33 | \end{ZX} 34 | {%endtex%} 35 | 36 | A 2-morphism $\alpha:{f}\to{g}$ in $[X,Y]$ is defined to be a 37 | 2-morphism $\Sh{\alpha}:\Sh{f}\to{\Sh{g}}$ compatible with $\varphi_{f},\varphi_{g}$ 38 | in the sense that the following pasting diagrams are equal: 39 | {%tex macrolib: topos%} 40 | \begin{tikzpicture}[diagram,baseline=(S/X.base)] 41 | \node (E) {$E$}; 42 | \node (S/Y) [below left = of E] {$\Sh{Y}$}; 43 | \node (S/X) [below right = of E] {$\Sh{X}$}; 44 | \draw[->] (E) to node [sloped,above] {$Y$} (S/Y); 45 | \draw[->] (S/Y) to node (S/f) [upright desc] {$\Sh{f}$} (S/X); 46 | \draw[->] (E) to node [sloped,above] {$X$} (S/X); 47 | \draw[->,bend right=60] (S/Y) to node (S/g) [below] {$\Sh{g}$} (S/X); 48 | \node [between = E and S/f] {$\varphi_{f}$}; 49 | \node [between = S/g.north and S/f] {$\Sh{\alpha}$}; 50 | \end{tikzpicture} 51 | = 52 | \begin{tikzpicture}[diagram,baseline=(S/X.base)] 53 | \node (E) {$E$}; 54 | \node (S/Y) [below left = of E] {$\Sh{Y}$}; 55 | \node (S/X) [below right = of E] {$\Sh{X}$}; 56 | \draw[->] (E) to node [sloped,above] {$Y$} (S/Y); 57 | \draw[->] (E) to node [sloped,above] {$X$} (S/X); 58 | \draw[->,bend right=60] (S/Y) to node (S/g) [below] {$\Sh{g}$} (S/X); 59 | \node [between = S/Y and S/X] {$\varphi_g$}; 60 | \end{tikzpicture} 61 | {%endtex%} 62 | 63 | We may likewise represent the equation above in terms of string diagrams. 64 | {%tex macrolib: topos%} 65 | \begin{ZX} 66 | \zxN{} &\dar[close]{X}\\ 67 | \zxN{} & \zxX[pilr]{\varphi_f} \arrow[-N', near end, close, swap]{ddl}{Y} \drar[N, close, pos=.6]{\Sh{f}}\\ 68 | \zxN{} & \zxN{} & \zxX[pilr]{\Sh{\alpha}} \dar{\Sh{g}}\\ 69 | \zxN{} & \zxN{} & \zxN{} 70 | \end{ZX} 71 | = 72 | \begin{ZX} 73 | \zxN{} &\dar[close]{X}\\ 74 | \zxN{} &\zxX[pilr]{\varphi_g}\dlar[swap,-o,close]{Y}\drar[N,close]{\Sh{g}}\\[3mm] 75 | \zxN{} & \zxN{} & \zxN{} 76 | \end{ZX} 77 | {%endtex%} 78 | -------------------------------------------------------------------------------- /_nodes/0026.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: notation 3 | --- 4 | 5 | We will write $\TOP{E}$ for the meta-2-category of $E$-topoi. 6 | -------------------------------------------------------------------------------- /_nodes/0029.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: An alternative definition of fibration 3 | --- 4 | 5 | **Warning.** Some authors including Grothendieck {%cite sga:1 -A%} give an 6 | equivalent definition of cartesian fibration that factors through a 7 | *nonequivalent* definition of cartesian morphisms. Such authors refer to our 8 | notion of cartesian morphism as *hypercartesian* {%cite streicher:2018%}. 9 | 10 | @include{002A} 11 | 12 | Cartesian morphisms are clearly hypocartesian (setting $u=x$ and $m=\Idn{x}$), 13 | but the converse does not hold. The problem is that in an arbitrary displayed 14 | category, hypocartesian morphisms may not be closed under composition. 15 | 16 | @include{002C} 17 | 18 | Grothendieck {%cite sga:1 -A%} defines a fibration in terms of (what we refer 19 | to as) hypocartesian morphisms rather than (what we refer to as) cartesian 20 | morphisms, and therefore imposes the additional constraint that the 21 | hypocartesian morphisms be closed under composition. In {%cref 002B %} below, we 22 | verify that these two definitions of cartesian fibration coincide. 23 | 24 | @include{002B} 25 | @include{002D} 26 | 27 | -------------------------------------------------------------------------------- /_nodes/002A.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Hypocartesian morphisms 3 | taxon: definition 4 | --- 5 | 6 | Let $E$ be displayed over $B$, and let $f:x\to y \in B$; a morphism 7 | $\bar{f}:\bar{x}\to\Sub{f} \bar{y}$ in $E$ is called *hypocartesian* over $f$ when 8 | for any $\bar{u}\in E\Sub{x}$ and $\bar{h}:\bar{u}\to\Sub{f} \bar{y}$ there exists a 9 | unique $i : \bar{u}\to\Sub{\Idn{x}} \bar{x}$ with $i;\bar{f} = \bar{h}$ as follows: 10 | {%tex macrolib: topos%} 11 | \begin{tikzpicture}[diagram] 12 | \SpliceDiagramSquare{ 13 | west/style = lies over, 14 | east/style = lies over, 15 | north/node/style = upright desc, 16 | height = 1.5cm, 17 | nw = \bar{x}, 18 | ne = \bar{y}, 19 | sw = x, 20 | north = \bar{f}, 21 | south = f, 22 | se = y, 23 | } 24 | \node (u') [above left = 1.5cm of nw,xshift=-.5cm] {$\bar{u}$}; 25 | \node (u) [above left = 1.5cm of sw,xshift=-.5cm] {$x$}; 26 | \draw[lies over] (u') to (u); 27 | \draw[->,bend left=30] (u') to node [sloped,above] {$\bar{h}$} (ne); 28 | \draw[double] (u) to (sw); 29 | \draw[->,exists] (u') to node [desc] {$i$} (nw); 30 | \end{tikzpicture} 31 | {%endtex%} 32 | -------------------------------------------------------------------------------- /_nodes/002B.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: lemma 3 | title: "Equivalence with Grothendieck's fibrations" 4 | --- 5 | 6 | Let $E$ be displayed over $B$. Then $E$ is a cartesian fibration in the sense of 7 | {%cref 0002%} if and only if the following two conditions hold: 8 | 9 | 1. *Hypocartesian lifts.* For each $f:x\to y\in B$ and $\bar{y}\in E\Sub{y}$ there 10 | exists a displayed object $\bar{x}\in E\Sub{x}$ and hypocartesian morphism 11 | $\bar{f}:\bar{x}\to\Sub{f}\bar{y}$. 12 | 2. *Closure under composition.* If $\bar{f}:\bar{x}\to\Sub{f}\bar{y}$ and 13 | $\bar{g}:\bar{y}\to\Sub{g}\bar{z}$ are hypocartesian, then $\bar{f};\bar{g}$ 14 | is hypocartesian. 15 | 16 | **Proof.** Suppose first that $E$ is a cartesian fibration in our sense. Then 17 | $E$ has hypocartesian lifts because it has cartesian lifts. For closure under 18 | composition, fix hypocartesian $\bar{f},\bar{g}$; by {%cref 002C%} we know that 19 | $\bar{f},\bar{g}$ are also cartesian and hence by {%cref 001H%} so is the composite $\bar{f};\bar{g}$; therefore it follows 20 | that $\bar{f};\bar{g}$ is also hypocartesian. 21 | 22 | Conversely, suppose that $E$ is a cartesian fibration in the sense of 23 | Grothendieck, and let $\bar{f}:\bar{x}\to\Sub{f}\bar{y}$ be the hypocartesian 24 | lift of $f:x\to y$ at $\bar{y}\in E\Sub{y}$; we shall see that $\bar{f}$ is also 25 | a *cartesian* lift of $f$ at $\bar{y}$ by constructing a unique factorization as 26 | follows: 27 | {%tex macrolib: topos%} 28 | \begin{tikzpicture}[diagram] 29 | \SpliceDiagramSquare{ 30 | west/style = lies over, 31 | east/style = lies over, 32 | north/node/style = upright desc, 33 | height = 1.5cm, 34 | nw = \bar{x}, 35 | ne = \bar{y}, 36 | sw = x, 37 | north = \bar{f}, 38 | south = f, 39 | se = y, 40 | } 41 | \node (u') [above left = 1.5cm of nw,xshift=-.5cm] {$\bar{u}$}; 42 | \node (u) [above left = 1.5cm of sw,xshift=-.5cm] {$u$}; 43 | \draw[lies over] (u') to (u); 44 | \draw[->,bend left=30] (u') to node [sloped,above] {$\bar{h}$} (ne); 45 | \draw[->] (u) to node [sloped,below] {$m$} (sw); 46 | \draw[->,exists] (u') to (nw); 47 | \end{tikzpicture} 48 | {%endtex%} 49 | Let $\bar{m}:\bar{u}\tick\to\Sub{m}\bar{x}$ be the hypocartesian lift of 50 | $m$ at $\bar{x}$, where $\bar{u}\tick\in E\Sub{u}$. By hypothesis, the 51 | composite $\bar{m};\bar{f} : \bar{u}\tick\to\Sub{m;f}\bar{y}$ is 52 | hypocartesian, so $\bar{h}$ factors uniquely through $\bar{m};\bar{f}$ over 53 | $\Idn{u}$: 54 | {%tex macrolib: topos%} 55 | \begin{tikzpicture}[diagram] 56 | \SpliceDiagramSquare{ 57 | west/style = lies over, 58 | east/style = lies over, 59 | north/node/style = upright desc, 60 | height = 1.5cm, 61 | nw = \bar{u}', 62 | ne = \bar{y}, 63 | sw = u, 64 | north = \bar{m};\bar{f}, 65 | south = m;f, 66 | se = y, 67 | } 68 | \node (u') [above left = 1.5cm of nw,xshift=-.5cm] {$\bar{u}$}; 69 | \node (u) [above left = 1.5cm of sw,xshift=-.5cm] {$u$}; 70 | \draw[lies over] (u') to (u); 71 | \draw[->,bend left=30] (u') to node [sloped,above] {$\bar{h}$} (ne); 72 | \draw[double] (u) to (sw); 73 | \draw[->,exists] (u') to node [desc] {$i$} (nw); 74 | \end{tikzpicture} 75 | {%endtex%} 76 | The composite $i;\bar{m} : \bar{u}\to\Sub{m}\bar{x}$ is the required (cartesian) 77 | factorization of $\bar{h}$ through $\bar{f}$ over $m$. To see that $i;\bar{m}$ 78 | is the unique such map, we observe that all morphisms $\bar{u}\to\Sub{m}\bar{x}$ 79 | factor uniquely through $\bar{m}$ over $\Idn{u}$ as a consequence of $\bar{m}$ 80 | being hypocartesian. 81 | {%qed %} 82 | -------------------------------------------------------------------------------- /_nodes/002C.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: lemma 3 | title: Hypocartesian = cartesian in a cartesian fibration 4 | --- 5 | 6 | Let $E$ be a cartesian fibration in the sense of {%cref 0002%}, and let 7 | $\bar{f} : \bar{x}\to\Sub{f}\bar{y}$ be displayed over $f:x\to y$. The 8 | displayed morphism $\bar{f}$ is cartesian if and only if it is hypocartesian. 9 | 10 | **Proof.** 11 | Any cartesian map is clearly hypocartesian. To see that a hypocartesian map 12 | $\bar{f}:\bar{x}\to\Sub{f}\bar{y}$ in a cartesian fibration is cartesian, we 13 | consider the cartesian lift of $f:x\to y$ under $\bar{y}$: 14 | {%tex macrolib: topos%} 15 | \DiagramSquare{ 16 | height = 1.5cm, 17 | west/style = lies over, 18 | east/style = lies over, 19 | nw/style = pullback, 20 | nw = \bar{x}\tick, 21 | ne = \bar{y}, 22 | se = y, 23 | sw = x, 24 | south = f, 25 | north = \bar{f}\tick, 26 | north/style = {->,exists}, 27 | } 28 | {%endtex%} 29 | 30 | As the cartesian lift $\bar{x}\tick\to \bar{y}$ is also hypocartesian, it 31 | follows that there is a unique vertical isomorphism identifying $\bar{x}$ with 32 | $\bar{x}\tick$ factoring $\bar{f} : \bar{x}\to\Sub{f}\bar{y}$ through 33 | $\bar{f}\tick : \bar{x}\tick\to\Sub{f}\bar{y}$. Being cartesian over $f$ is clearly 34 | stable under isomorphism, hence we conclude that $\bar{f}$ is cartesian from 35 | the fact that $\bar{f}\tick$ is cartesian. 36 | {%qed%} 37 | -------------------------------------------------------------------------------- /_nodes/002D.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Two ways to generalize pullbacks 3 | taxon: remark 4 | --- 5 | 6 | Hypocartesian {%ref 002A%} and cartesian {%ref 0001%} morphisms can be thought 7 | of as two distinct ways to generalize the concept of a pullback, depending on 8 | what one considers the essential properties of pullbacks. Hypocartesian 9 | morphisms more directly generalize the "little picture" universal property of 10 | pullbacks as limiting cones, whereas cartesian morphisms generalize the "big 11 | picture" dynamics of the pullback pasting lemma. As we have seen in {%cref 12 | 002C%} these two notions coincide in any cartesian fibration; the instance of 13 | this result for the fundamental self-indexing {%pref 001X%} verifies that 14 | pullbacks can be equivalently presented in terms of cartesian morphisms, as we 15 | have pointed out in {%cref 001Y%}. 16 | -------------------------------------------------------------------------------- /_nodes/002E.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Separators for cartesian fibrations 3 | --- 4 | 5 | Let $E$ be an ordinary category. In general, 6 | to compare two morphisms $f,g:x\to y$ in $E$, it is not enough to see if they 7 | agree on global points $u:1\to x$, because the behavior of $u,v$ may differ 8 | only on generalized elements. In some cases, however, there is a family of 9 | objects $\prn{s\Sub{i}}\Sub{i\in I}\in E$ are together *adequate* for comparing 10 | morphisms of $E$ in the sense of {%cref 002G%} below. 11 | 12 | @include{002G} 13 | 14 | The intuition of {%cref 002G%} is that to compare two morphisms $f,g:x\to y\in E$, 15 | it suffices to check that they behave the same on all $s\Sub{i}$-shaped figures 16 | when $\prn{s\Sub{i}}\Sub{i\in I}$ is a separating family for $E$. 17 | 18 | @include{002F} 19 | 20 | We will now generalize {%cref 002G%} to the case of a cartesian fibration. 21 | 22 | @include{002I} 23 | @include{002H} 24 | -------------------------------------------------------------------------------- /_nodes/002F.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Well-pointedness of the category of sets 3 | taxon: example 4 | --- 5 | 6 | In the category of sets, to compare two morphisms it is enough to check 7 | that they agree on global points. This means that the unary family 8 | $\brc{\ObjTerm{\SET}}$ is a separator for $\SET$, a property referred to more generally as *well-pointedness*. 9 | 10 | -------------------------------------------------------------------------------- /_nodes/002G.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Separating family for a category 3 | taxon: definition 4 | --- 5 | 6 | Given an ordinary category $E$, a set-indexed family 7 | $\prn{s\Sub{i}}\Sub{i\in I}$ of $E$-objects is called a *small separating 8 | family* for $E$ when, assuming that for all $i\in I$ and all $u:s_i\to x$ we have 9 | $u;f=u;g$, we then have $f=g$. 10 | -------------------------------------------------------------------------------- /_nodes/002H.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Small separator for a fibration 3 | taxon: definition 4 | --- 5 | 6 | Let $E$ be a cartesian fibration over $B$ such that $B$ has 7 | binary products. A displayed object $\bar{s}\in E\Sub{s}$ is said to be a 8 | *small separator* for $E$ when any two vertical maps $f,g:\bar{u}\to\Sub{\Idn{x}}\bar{v}\in E\Sub{x}$ are equal when they are agree on $\bar{s}$-figures in the sense of {%cref 002I%}. 9 | -------------------------------------------------------------------------------- /_nodes/002I.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Agreement on a class of figure shapes 3 | taxon: definition 4 | --- 5 | 6 | Let $\bar{s}$ be a displayed object in a cartesian fibration $E$ over $B$. 7 | A pair of displayed morphisms $f,g:\bar{x}\to \bar{y}\in E$ are said to 8 | *agree on $\bar{s}$-figures* when for any $\bar{s}$-figure 9 | $h : \bar{z}\to \bar{x}$ in the sense of {%cref 002K%}, we have $h;f = h;g : \bar{z}\to \bar{y}$. 10 | -------------------------------------------------------------------------------- /_nodes/002J.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Full subfibrations and figure shapes 3 | --- 4 | 5 | In a category $E$, a morphism $f : x\to y$ can be thought of as a "figure" 6 | of shape $x$ drawn in $y$. For instance, if $x$ is the point (i.e. 7 | $x=\ObjTerm{E}$) then a morphism $x\to y$ is a "point" of the "space" $y$. 8 | We refer to $x$ as the figure-shape in any such scenario. 9 | The perspective of morphisms as figures is developed in more detail by Lawvere and Schanuel {%cite lawvere-schanuel:2009 -A%}. 10 | 11 | It often happens that a useful class of figure shapes can be arranged 12 | into a *set*-indexed family $\prn{u\Sub{i}}\Sub{i\in I}$; viewed from the 13 | perspective of the family fibration $\FAM{E}$ {%pref 0006%}, this family is just a 14 | displayed object $\bar{u}$ over $I$ and then a figure shape "in" 15 | this family is given by any cartesian morphism $\bar{z}\to\bar{u}$. We will 16 | generalize this situation to the case of an arbitrary fibration, by 17 | constructing the full subfibration spanned by displayed objects equipped 18 | with a cartesian morphism into $\bar{u}$ in {%cref 0010%} below. 19 | 20 | @include{0010} 21 | @include{002K} 22 | -------------------------------------------------------------------------------- /_nodes/002K.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Figures and figure shapes in the full subfibration 3 | taxon: definition 4 | --- 5 | 6 | Let $E$ be a cartesian fibration and let $\FullSubfib{\bar{s}}\subseteq E$ be the full subfibration determined by a displayed object $\bar{s}\in E$ as in {%cref 0010%}. We now develop the following vocabulary: 7 | 8 | 1. We will refer to each object of $\FullSubfib{\bar{s}}$ as a $\bar{s}$-figure 9 | shape. 10 | 11 | 2. A displayed morphism $\bar{z}\to \bar{x}$ is called a $\bar{s}$-figure 12 | whenever $\bar{z}\in\FullSubfib{\bar{s}}$. 13 | 14 | -------------------------------------------------------------------------------- /_nodes/002L.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Definable classes à la Bénabou 3 | --- 4 | 5 | A class of sets $\mathfrak{C}$ is sometimes said to be *formally 6 | definable* when there is a formula $\prn{x \mid 7 | \phi\Sub{\mathfrak{C}}\prn{x}}$ in the language of set theory such that a 8 | set $S$ lies in $\mathfrak{C}$ if and only if 9 | $\phi\Sub{\mathfrak{C}}\prn{S}$ holds. This concept is a bit sensitive, as 10 | it presupposes that we have a notion of "class" whose constituents are not 11 | all definable in this sense. 12 | 13 | A better behaved notion of definability for sets than the formal one is 14 | given *model-theoretically*, i.e. relative to a model $\mathscr{M}$ of set 15 | theory in some ambient set theory {%cite benabou:1985%}. We will refer to 16 | an element of $\mathscr{M}$ as a set, and a subcollection of $\mathscr{M}$ 17 | as a class. 18 | 19 | @include{002U} 20 | @include{002V} 21 | 22 | Bénabou then generalizes the definitions above to an arbitrary fibration, 23 | in such a way that the general fibered notion of definable class is 24 | equivalent in the fundamental self-indexing $\SelfIx{\mathscr{M}}$ to that of 25 | definable classes in the sense of {%cref 002V%}. 26 | 27 | @include{002Q} 28 | @include{002S} 29 | -------------------------------------------------------------------------------- /_nodes/002M.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: construction 3 | title: Closure of a class of sets under base change 4 | --- 5 | 6 | Let $\mathfrak{C}\subseteq\mathscr{M}$ be a class of sets; there exists a class $\bar{\mathfrak{C}}$ of *families* 7 | of sets that contains $\prn{S\Sub{i}}\Sub{i\in I}$ exactly when each 8 | $S\Sub{i}$ lies in $\mathfrak{C}$. We will refer to $\bar{\mathfrak{C}}$ as the *closure under base change* of $\mathfrak{C}$, a name motivated by the fact that when $\prn{S\Sub{i}}\Sub{i\in I}$ lies in $\bar{\mathfrak{C}}$, 9 | then for any $u:J\to I$, the base change $\prn{S\Sub{uj}}\Sub{j\in J}$ also lies in $\bar{\mathfrak{C}}$. 10 | -------------------------------------------------------------------------------- /_nodes/002N.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: construction 3 | title: From classes of families to classes of sets 4 | --- 5 | 6 | Conversely to {%cref 002M%} we may take a class of families of sets $\mathfrak{F}$ to the the class of sets $\mathfrak{F}\Sub{1}\subseteq{\mathscr{M}}$ spanned by sets $S$ such that the singleton family $\brc{S}$ lies in $\mathfrak{C}$. 7 | 8 | -------------------------------------------------------------------------------- /_nodes/002O.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: remark 3 | --- 4 | 5 | Let $\mathscr{M}$ be a model of {%nlab ETCS%}; and let $\mathfrak{C}$ be a 6 | class of families of sets in $\mathscr{M}$. Then $\mathfrak{C}$ is a class of 7 | objects in the fundamental self-indexing $\SelfIx{\mathscr{M}}$ over 8 | $\mathscr{M}$. Furthermore, $\mathscr{M}$ a definable class in 9 | $\SelfIx{\mathscr{M}}$ in the sense of {%cref 002W%} if and only if it is a 10 | definable class of families of sets in the sense of {%cref 002P%}. 11 | -------------------------------------------------------------------------------- /_nodes/002P.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: definition 3 | title: Definable class of families of sets 4 | --- 5 | 6 | A class of families of sets $\mathfrak{F}$ is said to be *definable* when it is stable and moreover, for any family of sets $\prn{S\Sub{i}}\Sub{i\in I}$, there exists a subset $J\subseteq I$ such that the base change $\prn{S\Sub{j}}\Sub{j\in J}$ lies in $\mathfrak{F}$, and moreover, such that $u:K\to I$ factors through $J\subseteq I$ whenever the base change $\prn{S\Sub{uk}}\Sub{k\in K}$ lies in $\mathfrak{F}$. 7 | -------------------------------------------------------------------------------- /_nodes/002Q.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Set-theoretic intuition for Bénabou's definability 3 | --- 4 | 5 | To motivate Bénabou's general notion of definability, we will first develop an alternative 6 | perspective on definability for classes of sets in terms of *families* of 7 | sets. 8 | 9 | @include{002M} 10 | @include{002N} 11 | @include{002P} 12 | @include{002R} 13 | @include{002T} 14 | -------------------------------------------------------------------------------- /_nodes/002R.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: intuition 3 | --- 4 | 5 | In other words, a stable class of families of sets is definable when any family of sets can be restricted to a "biggest" subfamily that lies in the class. 6 | -------------------------------------------------------------------------------- /_nodes/002S.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Bénabou's notion of definability 3 | --- 4 | 5 | We will now construe {%cref 002Q%} as the instantiation at the fundamental 6 | self-indexing $\SelfIx{\mathscr{M}}$ of a more general notion of 7 | definability for classes of objects in a cartesian fibration, defined 8 | forthwith. The following definition of definability in a cartesian fibration is due to Bénabou, but is discussed in print by Borceux {%cite borceux:1994:vol2 -A%}, Jacobs {%cite jacobs:1999 -A%}, Streicher {%cite streicher:2018 -A%}. 9 | 10 | @include{002W} 11 | @include{002O} 12 | -------------------------------------------------------------------------------- /_nodes/002T.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: lemma 3 | title: Characterization of definable classes of families 4 | --- 5 | 6 | Let $\mathfrak{C}\subseteq\mathscr{M}$ be a class of sets; then $\bar{\mathfrak{C}}$ is a definable class of families of sets if and only if $\mathfrak{C}$ is a definable class of sets. 7 | 8 | 9 | **Proof.** Suppose that $\mathfrak{C}$ is a definable class of sets. To 10 | check that $\bar{\mathfrak{C}}$ is a definable class of families of sets, 11 | we fix a family $\prn{S\Sub{i}}\Sub{i\in I}$ not necessarily lying in $\bar{\mathfrak{C}}$. Because $\mathfrak{C}$ is definable, the intersection $\mathfrak{C}\cap \bigcup\Sub{i\in I}S\Sub{i}$ is represented by a set $U$. We therefore take the subset $J = \brc{i \in I\mid S_i\in U}\subseteq I$, and verify that the base change $\prn{S\Sub{j}}\Sub{j\in J}$ is the largest approximation of $\prn{S\Sub{i}}\Sub{i\in I}$ by a family lying in $\bar{\mathfrak{C}}$. 12 | 13 | Conversely suppose that $\bar{\mathfrak{C}}$ is a definable class of families of sets. To see that $\mathfrak{C}$ is definable, we fix a class $\mathfrak{U}$ represented by a set $U\in\mathscr{M}$ to check that $\mathfrak{C}\cap\mathfrak{U}$ is representable. We consider the family of sets $\prn{u}\Sub{u\in U}$; because $\bar{\mathfrak{C}}$ is definable, there is a largest subset $V\subseteq U$ such that the change of base $\prn{v}\Sub{v\in V}$ lies in $\bar{\mathfrak{C}}$, i.e. such that each $v\in V$ lies in $\mathfrak{C}$. Therefore $\mathfrak{C}\cap\mathfrak{U}$ is represented by the set $V$. 14 | {%qed%} 15 | -------------------------------------------------------------------------------- /_nodes/002U.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: definition 3 | title: Representable class of sets 4 | --- 5 | 6 | A class of sets $\mathfrak{C}\subseteq\mathscr{M}$ is called *representable* when there is a set $C\in\mathscr{M}$ such that $U\in C$ if and only if $U\in\mathfrak{C}$. 7 | 8 | -------------------------------------------------------------------------------- /_nodes/002V.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: definition 3 | title: Definable class of sets 4 | --- 5 | 6 | A class of sets $\mathfrak{C}\subseteq\mathscr{M}$ is called *definable* when for any representable class $\mathfrak{S}$, the class $\mathfrak{C}\cap\mathfrak{S}$ is representable. 7 | 8 | -------------------------------------------------------------------------------- /_nodes/002W.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Definable class in a fibration 3 | taxon: definition 4 | --- 5 | 6 | Let $E$ be a cartesian fibration over $B$. A *definable class* 7 | $\mathfrak{F}$ in $E$ is a stable subcollection of the displayed objects of $E$ 8 | such that for any $\bar{u}\in E\Sub{u}$, there exists a cartesian map $\bar{v}\to \bar{u}$ lying over a monomorphism $v\rightarrowtail u$ such that $\bar{v}\in \mathfrak{F}$ and, moreover, any cartesian morphism $\bar{w}\to\bar{u}$ such that $\bar{w}\in\mathfrak{F}$ factors through $\bar{v}\to\bar{u}$. 9 | {%tex macrolib: topos%} 10 | \DiagramSquare{ 11 | height = 1.5cm, 12 | west/style = lies over, 13 | east/style = lies over, 14 | nw/style = pullback, 15 | south/style = {exists,>->}, 16 | north/style = {->,exists}, 17 | nw = \bar{v}\in\mathfrak{F}, 18 | ne = \bar{u}, 19 | se = u, 20 | sw = v, 21 | } 22 | \qquad 23 | \begin{tikzpicture}[diagram,baseline=(l/sw.base)] 24 | \SpliceDiagramSquare{ 25 | height = 1.5cm, 26 | width = 2.25cm, 27 | west/style = lies over, 28 | east/style = lies over, 29 | ne/style = pullback, 30 | nw = \bar{w}\in\mathfrak{F}, 31 | sw = w, 32 | ne = \bar{v}, 33 | se = v, 34 | south/style = {->,exists}, 35 | north/style = {->,exists}, 36 | south = \exists!, 37 | north = \exists!, 38 | north/node/style = upright desc, 39 | } 40 | \SpliceDiagramSquare{ 41 | height = 1.5cm, 42 | glue = west, 43 | glue target = l/, 44 | east/style = lies over, 45 | south/style = >->, 46 | ne = \bar{u}, 47 | se = u, 48 | } 49 | \draw[->,bend left=30] (l/nw) to node [above] {cart.} (r/ne); 50 | \end{tikzpicture} 51 | {%endtex%} 52 | -------------------------------------------------------------------------------- /_nodes/002X.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Example: Revisiting the fundamental self-indexing" 3 | --- 4 | 5 | Recall that the fundamental self-indexing $\SelfIx{B}$ {%pref 001X %} of a category $B$ 6 | is a displayed category with $\SelfIx{B}\Sub{x} = \Sl{B}{x}$. 7 | As discussed in {%cref 001Y %}, $\SelfIx{B}$ is a cartesian fibration over $B$ if and 8 | only if $B$ has pullbacks. However, $\SelfIx{B}$ is unconditionally a *cocartesian* 9 | fibration. 10 | 11 | @include{002Y} 12 | -------------------------------------------------------------------------------- /_nodes/002Y.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: exercise 3 | --- 4 | 5 | Prove that $\SelfIx{B}$ from {%ref 001X%} is a cocartesian fibration for any category $B$. 6 | -------------------------------------------------------------------------------- /_nodes/002Z.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: construction 3 | --- 4 | 5 | Let $B$ be a category. Define the displayed category $\overline{B}$ over $B$ as 6 | follows: 7 | 8 | 1. For $x\in B$, define $\overline{B}\Sub{x}$ as the collection of pairs 9 | $(\bar{x}\in B,p\Sub{x}:x\to\bar{x})$. 10 | 2. For $f : x\to y\in B$, define $\overline{B}\Sub{f}$ to be the collection of 11 | commuting squares in the following configuration: 12 | {%tex macrolib: topos%} 13 | \DiagramSquare{ 14 | height = 1.7cm, 15 | sw = \bar{x}, 16 | se = \bar{y}, 17 | nw = x, 18 | ne = y, 19 | west = p\Sub{x}, 20 | east = p\Sub{y}, 21 | south = \bar{f}, 22 | north = f, 23 | west/style = {->,exists}, 24 | east/style = {->,exists}, 25 | south/style = {->,exists}, 26 | } 27 | {%endtex%} 28 | -------------------------------------------------------------------------------- /_nodes/0030.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: exercise 3 | --- 4 | 5 | Prove that $\overline{B}$ is a cartesian fibration for any category $B$. 6 | -------------------------------------------------------------------------------- /_nodes/0031.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The identity morphism of a topos 3 | taxon: computation 4 | --- 5 | 6 | Let $X$ be a topos over a geometric universe $E$; we will compute the identity morphism $\Idn{X}:X\to X$ in $\TOP{E}$ as a diagram in the meta-2-category $\AlgGU$ of geometric universes and algebraic morphisms. We will let $\Sh{\Idn{X}} : \Sh{X}\to \Sh{X}$ be the identity map $\Idn{\Sh{X}}$. The coherence $\varphi\Sub{\Idn{X}}$ is given by the identity 2-cell, as we have the equation $X; \Sh{\Idn{X}} = X$ in $[E,\Sh{X}]$: 7 | {%tex macrolib: topos%} 8 | \begin{ZX} 9 | \zxN{} &\dar[close]{X}\\ 10 | \zxN{} &\zxX[pilr]{\varphi\Sub{\Idn{X}}=\Idn{X}}\dlar[swap,-o,close]{X}\drar[N,close,near end]{\Sh{\Idn{X}} = \Idn{\Sh{X}}}\\[3mm] 11 | \zxN{} & \zxN{} & \zxN{} 12 | \end{ZX} 13 | {%endtex%} 14 | {%qed%} 15 | -------------------------------------------------------------------------------- /_nodes/0032.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Composing morphisms of topoi 3 | taxon: computation 4 | --- 5 | 6 | Let $X,Y,Z$ be topoi over a geometric universe $E$ and let $f:X\to Y$ and $g:Y\to Z$ be morphisms of topoi; we will construct the composite morphism $f;g:X\to Z$. 7 | 8 | First of all, let us unfold assumptions into the language of $\AlgGU$. In particular, we have morphisms $\Sh{f}:\Sh{Y}\to \Sh{X}$ and $\Sh{g} : \Sh{Z}\to \Sh{Y}$, together with invertible 2-cells $\varphi_f,\varphi_g$ as depicted below: 9 | {%tex macrolib: topos%} 10 | \begin{ZX} 11 | \zxN{} &\dar[close]{X}\\ 12 | \zxN{} &\zxX[pilr]{\varphi_f}\dlar[swap,-o,close]{Y}\drar[N,close]{\Sh{f}}\\[3mm] 13 | \zxN{} & \zxN{} & \zxN{} 14 | \end{ZX} 15 | \qquad 16 | \begin{ZX} 17 | \zxN{} &\dar[close]{Y}\\ 18 | \zxN{} &\zxX[pilr]{\varphi_g}\dlar[swap,-o,close]{Z}\drar[N,close]{\Sh{g}}\\[3mm] 19 | \zxN{} & \zxN{} & \zxN{} 20 | \end{ZX} 21 | {%endtex%} 22 | 23 | We define $\Sh{f;g}$ to be the composite $\Sh{g};\Sh{f} : \Sh{Z}\to \Sh{Y}$; then we define the coherence isomorphism $\varphi\Sub{f;g}$ to be the 2-cell depicted below: 24 | {%tex macrolib: topos%} 25 | \begin{ZX} 26 | \zxN{} &\dar[close]{X}\\ 27 | \zxN{} &\zxX[pilr]{\varphi\Sub{f;g}}\dlar[swap,-o,close]{Z}\drar[N,close]{\Sh{f;g}}\\[3mm] 28 | \zxN{} & \zxN{} & \zxN{} 29 | \end{ZX} 30 | := 31 | \begin{ZX} 32 | \zxN{} & \zxN{} &\dar[close]{X}\\ 33 | \zxN{} & \zxN{} &\zxX[pilr]{\varphi_f} \dlar[swap,-N,close]{Y} \drar[N,close,near end]{\Sh{f}}\\ 34 | \zxN{} & \zxX[pilr]{\varphi_g}\dlar[swap,-o,close]{Z} \drar[N,close,near end]{\Sh{g}} & \zxN{} & \zxN{} \\[3mm] 35 | \zxN{} & \zxN{} & \zxN{} & \zxN{} 36 | \end{ZX} 37 | {%endtex%} 38 | {%qed%} 39 | -------------------------------------------------------------------------------- /_nodes/0033.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The identity 2-cell of a morphism of topoi 3 | taxon: computation 4 | --- 5 | 6 | Let $X,Y$ be a pair of topoi over a geometric universe $E$, and let $f : X \to Y$ be a morphism of $E$-topoi; we will construct the identity 2-cell $\Idn{f} : f \to f$ in the hom category $[X,Y]$. First of all, we unfold the data that we are given into the language of $\AlgGU$: 7 | {%tex macrolib: topos%} 8 | \begin{ZX} 9 | \zxN{} &\dar[close]{X}\\ 10 | \zxN{} &\zxX[pilr]{\varphi_f}\dlar[swap,-o,close]{Y}\drar[N,close]{\Sh{f}}\\[3mm] 11 | \zxN{} & \zxN{} & \zxN{} 12 | \end{ZX} 13 | {%endtex%} 14 | 15 | We define $\Sh{\Idn{f}}$ to be the identity 2-cell $\Idn{\Sh{f}} : \Sh{f}\to \Sh{f}$; it remains to observe the following equation of 2-cells: 16 | {%tex macrolib: topos%} 17 | \begin{ZX} 18 | \zxN{} &\dar[close]{X}\\ 19 | \zxN{} & \zxX[pilr]{\varphi_f} \arrow[-N', near end, close, swap]{ddl}{Y} \drar[N, close, pos=.6]{\Sh{f}}\\ 20 | \zxN{} & \zxN{} & \zxX[pilr]{\Sh{\Idn{f}}=\Idn{\Sh{f}}} \dar{\Sh{f}}\\ 21 | \zxN{} & \zxN{} & \zxN{} 22 | \end{ZX} 23 | = 24 | \begin{ZX} 25 | \zxN{} &\dar[close]{X}\\ 26 | \zxN{} &\zxX[pilr]{\varphi_g}\dlar[swap,-o,close]{Y}\drar[N,close]{\Sh{f}}\\[3mm] 27 | \zxN{} & \zxN{} & \zxN{} 28 | \end{ZX} 29 | {%endtex%} 30 | {%qed%} 31 | -------------------------------------------------------------------------------- /_nodes/0034.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Composition of 2-cells between morphisms of topoi 3 | taxon: computation 4 | --- 5 | 6 | Let $X,Y$ be a pair of topoi over a geometric morphism $E$ and let $f,g,h : X\to Y$ be morphisms of topoi; given 2-cells $\alpha : f \to g$ and $\beta : g \to h$, we will define the composite 2-cell $\alpha;\beta : f \to h$. 7 | 8 | First we unfold what we are given into the language of geometric universes; the morphisms of topoi unravel to the following morphisms and 2-cells of geometric universes: 9 | {%tex macrolib: topos%} 10 | \begin{ZX} 11 | \zxN{} &\dar[close]{X}\\ 12 | \zxN{} &\zxX[pilr]{\varphi_f}\dlar[swap,-o,close]{Y}\drar[N,close]{\Sh{f}}\\[3mm] 13 | \zxN{} & \zxN{} & \zxN{} 14 | \end{ZX} 15 | \qquad 16 | \begin{ZX} 17 | \zxN{} &\dar[close]{X}\\ 18 | \zxN{} &\zxX[pilr]{\varphi_g}\dlar[swap,-o,close]{Y}\drar[N,close]{\Sh{g}}\\[3mm] 19 | \zxN{} & \zxN{} & \zxN{} 20 | \end{ZX} 21 | \qquad 22 | \begin{ZX} 23 | \zxN{} &\dar[close]{X}\\ 24 | \zxN{} &\zxX[pilr]{\varphi_h}\dlar[swap,-o,close]{Y}\drar[N,close]{\Sh{h}}\\[3mm] 25 | \zxN{} & \zxN{} & \zxN{} 26 | \end{ZX} 27 | {%endtex%} 28 | 29 | The given 2-cells of topoi $\alpha:f\to g$ and $\beta : g \to h$ unravel into 2-cells between morphisms of geometric universe $\Sh{\alpha} : \Sh{f}\to \Sh{g}$ and $\Sh{\beta}:\Sh{g}\to\Sh{f}$ satisfying the following equations: 30 | {%tex macrolib: topos%} 31 | \begin{aligned} 32 | \begin{ZX}[ampersand replacement=\&] 33 | \zxN{} \&\dar[close]{X}\\ 34 | \zxN{} \& \zxX[pilr]{\varphi_f} \arrow[-N', near end, close, swap]{ddl}{Y} \drar[N, close, pos=.6]{\Sh{f}}\\ 35 | \zxN{} \& \zxN{} \& \zxX[pilr]{\Sh{\alpha}} \dar{\Sh{g}}\\ 36 | \zxN{} \& \zxN{} \& \zxN{} 37 | \end{ZX} 38 | &= 39 | \begin{ZX}[ampersand replacement=\&] 40 | \zxN{} \&\dar[close]{X}\\ 41 | \zxN{} \&\zxX[pilr]{\varphi_g}\dlar[swap,-o,close]{Y}\drar[N,close]{\Sh{g}}\\[3mm] 42 | \zxN{} \& \zxN{} \& \zxN{} 43 | \end{ZX} 44 | \\ 45 | \begin{ZX}[ampersand replacement=\&] 46 | \zxN{} \&\dar[close]{X}\\ 47 | \zxN{} \& \zxX[pilr]{\varphi_g} \arrow[-N', near end, close, swap]{ddl}{Y} \drar[N, close, pos=.6]{\Sh{g}}\\ 48 | \zxN{} \& \zxN{} \& \zxX[pilr]{\Sh{\beta}} \dar{\Sh{h}}\\ 49 | \zxN{} \& \zxN{} \& \zxN{} 50 | \end{ZX} 51 | &= 52 | \begin{ZX}[ampersand replacement=\&] 53 | \zxN{} \&\dar[close]{X}\\ 54 | \zxN{} \&\zxX[pilr]{\varphi_h}\dlar[swap,-o,close]{Y}\drar[N,close]{\Sh{h}}\\[3mm] 55 | \zxN{} \& \zxN{} \& \zxN{} 56 | \end{ZX} 57 | \end{aligned} 58 | {%endtex%} 59 | 60 | We choose $\Sh{\alpha;\beta}$ to be the composite 2-cell depicted below: 61 | {%tex macrolib: topos%} 62 | \begin{ZX} 63 | \dar[close]{\Sh{f}}\\ 64 | \zxX[pilr]{\Sh{\alpha;\beta}}\dar[close]{\Sh{h}}\\ 65 | \zxN{} 66 | \end{ZX} 67 | := 68 | \begin{ZX} 69 | \dar[close]{\Sh{f}}\\ 70 | \zxX[pilr]{\Sh{\alpha}} \dar[close]{\Sh{g}}\\ 71 | \zxX[pilr]{\Sh{\beta}} \dar[close]{\Sh{h}}\\ 72 | \zxN{} 73 | \end{ZX} 74 | {%endtex%} 75 | 76 | We must check the following equation of 2-cells: 77 | {%tex macrolib: topos%} 78 | \begin{ZX} 79 | \zxN{} &\dar[close]{X}\\ 80 | \zxN{} & \zxX[pilr]{\varphi_f} \arrow[-N', near end, close, swap]{ddl}{Y} \drar[N, close, pos=.6]{\Sh{f}}\\ 81 | \zxN{} & \zxN{} & \zxX[pilr]{\Sh{\alpha;\beta}} \dar{\Sh{h}}\\ 82 | \zxN{} & \zxN{} & \zxN{} 83 | \end{ZX} 84 | = 85 | \begin{ZX} 86 | \zxN{} &\dar[close]{X}\\ 87 | \zxN{} &\zxX[pilr]{\varphi_h}\dlar[swap,-o,close]{Y}\drar[N,close]{\Sh{h}}\\[3mm] 88 | \zxN{} & \zxN{} & \zxN{} 89 | \end{ZX} 90 | {%endtex%} 91 | 92 | The above follows by unfolding the definition of $\Sh{\alpha;\beta}$ and using the assumed equations concerning $\Sh{\alpha}$ and $\Sh{\beta}$: 93 | {%tex macrolib: topos%} 94 | \begin{aligned} 95 | \begin{ZX}[ampersand replacement = \&] 96 | \zxN{} \&\dar[close]{X}\\ 97 | \zxN{} \& \zxX[pilr]{\varphi_f} \arrow[-N', near end, close, swap]{ddl}{Y} \drar[N, close, pos=.6]{\Sh{f}}\\ 98 | \zxN{} \& \zxN{} \& \zxX[pilr]{\Sh{\alpha;\beta}} \dar{\Sh{h}}\\ 99 | \zxN{} \& \zxN{} \& \zxN{} 100 | \end{ZX} 101 | &= 102 | \begin{ZX}[ampersand replacement = \&] 103 | \zxN{} \&\dar[close]{X}\\ 104 | \zxN{} \& \zxX[pilr]{\varphi_f} \arrow[-N', near end, close, swap]{ddl}{Y} \drar[N, close, pos=.6]{\Sh{f}}\\ 105 | \zxN{} \& \zxN{} \& \zxX[pilr]{\Sh{\alpha}} \dar{\Sh{g}}\\ 106 | \zxN{} \& \zxN{} \& \zxX[pilr]{\Sh{\beta}} \dar{\Sh{h}}\\ 107 | \zxN{} \& \zxN{} \& \zxN{} 108 | \end{ZX} 109 | \\ 110 | &= 111 | \begin{ZX}[ampersand replacement = \&] 112 | \zxN{} \&\dar[close]{X}\\ 113 | \zxN{} \& \zxX[pilr]{\varphi_g} \arrow[-N', near end, close, swap]{ddl}{Y} \drar[N, close, pos=.6]{\Sh{g}}\\ 114 | \zxN{} \& \zxN{} \& \zxX[pilr]{\Sh{\beta}} \dar{\Sh{h}}\\ 115 | \zxN{} \& \zxN{} \& \zxN{} 116 | \end{ZX} 117 | \\ 118 | &= 119 | \begin{ZX}[ampersand replacement = \&] 120 | \zxN{} \&\dar[close]{X}\\ 121 | \zxN{} \& \zxX[pilr]{\varphi_h} \arrow[-N', near end, close, swap]{dl}{Y} \drar[N, close]{\Sh{h}}\\[3mm] 122 | \zxN{} \& \zxN{} \& \zxN{} 123 | \end{ZX} 124 | \end{aligned} 125 | {%endtex%} 126 | {%qed%} 127 | -------------------------------------------------------------------------------- /_nodes/0035.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Explicit computations in the 2-category of topoi 3 | --- 4 | 5 | In what follows, we will give explicit computations of the 2-categorical structure of $\TOP{E}$ in the language of $\AlgGU$. 6 | 7 | @include{0031} 8 | @include{0032} 9 | @include{0033} 10 | @include{0034} 11 | -------------------------------------------------------------------------------- /_nodes/0036.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Morphisms of geometric universes 3 | taxon: definition 4 | --- 5 | 6 | We describe three different kinds of morphism between geometric universes. 7 | 8 | 1. A *partial cartesian morphism* $f : E \to F$ is a pullback preserving functor $f:E\to F$. 9 | 2. A *cartesian morphism* $f : E \to F$ is a partial cartesian morphism $f : E\to F$ that preserves the terminal object. 10 | 4. A *logical morphism* $f : E \to F$ is a cartesian morphism $f : E \to F$ that additionally preserves the subobject classifier. 11 | 3. An *algebraic morphism* $f : E \to F$ is a pair $f = (\InvImg{f}\dashv \DirImg{f})$ such that $\InvImg{f} : E \to F$ a cartesian morphism of geometric universes. The left adjoint $\InvImg{f}$ is called the *inverse image* and the right adjoint $\DirImg{f}$ is called the *direct image*. 12 | -------------------------------------------------------------------------------- /_nodes/0037.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2-categories of geometric universes 3 | taxon: definition 4 | --- 5 | 6 | Each of the different notions of geometric universe above gives rise to a 2-category. We will fix our conventions below: 7 | 8 | 1. $\PCartGU$ is the 2-category of geometric universes, partial cartesian morphisms, and natural transformations between them. 9 | 2. $\CartGU$ is the 2-category of geometric universes, cartesian morphisms, and natural transformations between them. 10 | 3. $\LogGU$ is the locally groupoidal 2-category of geometric universes, logical morphisms, and natural isomorphisms between them. 11 | 4. $\AlgGU$ is the 2-category of geometric universes and algebraic morphisms $f = (\InvImg{f}\dashv\DirImg{f})$, such that a 2-morphism $f \to g$ is given by a natural transformation $\InvImg{f}\to\InvImg{g}$. 12 | -------------------------------------------------------------------------------- /_nodes/0038.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Finite colimits, natural numbers objects, and logical functors 3 | taxon: remark 4 | --- 5 | 6 | Note that any geometric universe has finite colimits, which can be constructed using the subobject classifier. A logical morphism between geometric universes necessarily preserves finite colimits for this reasons. Using Freyd's characterization of natural numbers objects in terms of a coequalization property, it follows that logical morphisms also preserve the natural numbers object. 7 | -------------------------------------------------------------------------------- /_nodes/0039.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Fibrations of geometric universes 3 | --- 4 | 5 | Logical morphisms play an important role in the study of geometric universes; in particular, the most important notion of *fibered* geometric universe involves logical morphisms rather than algebraic morphisms. 6 | 7 | @include{003A} 8 | @include{003C} 9 | @include{003D} 10 | @include{003E} 11 | 12 | It will follow in the scenario of {%cref 003E%}, the total category $\TotCat{E}$ is a geometric universe and the projection $\TotCat{E}\to B$ is both a logical morphism of geometric universes and an algebraic morphism of geometric universes. Moreover, the Artin gluing theory of geometric universes will reveal that there exists a subterminal object $U\rightarrowtail \ObjTerm{\TotCat{E}}$ such that $\TotCat{E}\to B$ factors as $\TotCat{E}\to \Sl{\TotCat{E}}{U} \simeq B$; indeed, $U$ is the initial object of the fiber category $E\Sub{\ObjTerm{B}}$. Then $F = E\Sub{\ObjTerm{B}}$ will be revealed to be equivalent to the full subcategory of $\TotCat{E}$ spanned by objects $X$ such that the projection $X\times U\to U$ is an isomorphism. 13 | -------------------------------------------------------------------------------- /_nodes/003A.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Logical fibrations of geometric universes 3 | taxon: definition 4 | --- 5 | 6 | Let $B$ be a geometric universes; a *logical fibration of geometric universes* over $B$ is given by a fibered category $E$ over $B$ such that each that fiber category $E_u$ is a geometric universe and each restriction map $E_v\to E_u$ is a logical morphism. 7 | -------------------------------------------------------------------------------- /_nodes/003C.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Moens' Theorem 3 | taxon: theorem 4 | --- 5 | 6 | Let $E$ be a logical fibration of geometric universes over a geometric universe $B$. Then the following are equivalent: 7 | 8 | 1. $E$ has stable and disjoint sums over $B$. 9 | 2. $E$ is the *gluing fibration* for a cartesian morphism $B\to F$ of geometric universes. 10 | 11 | Indeed, in the situation described above we may define $F$ to be the fiber $E\Sub{\ObjTerm{B}}$ over the terminal object. The functor $B\to E\Sub{\ObjTerm{B}}$ sends each $b\in B$ to the sum $\coprod_{b}\ObjTerm{E}$. 12 | -------------------------------------------------------------------------------- /_nodes/003D.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Jibladze's Theorem 3 | taxon: theorem 4 | --- 5 | 6 | Let $E$ be a logical fibration of geometric universes over $B$; if $E$ has small sums over $B$, then these sums are stable and disjoint. 7 | -------------------------------------------------------------------------------- /_nodes/003E.md: -------------------------------------------------------------------------------- 1 | --- 2 | taxon: corollary 3 | --- 4 | 5 | Combining {%cref 003C%} and {%cref 003D%}, the following are equivalent for a logical fibration $E$ of geometric universes over $B$: 6 | 7 | 1. $E$ has small sums over $B$. 8 | 2. $E$ is the gluing fibration for a cartesian morphism $B \to F$ of geometric universes. 9 | -------------------------------------------------------------------------------- /_plugins/changelog.rb: -------------------------------------------------------------------------------- 1 | require 'open3' 2 | require 'date' 3 | 4 | module Changelog 5 | class Generator < Jekyll::Generator 6 | NODES_COLLECTIONS_NAMES = ["nodes", "lectures"] 7 | NODES_COLLECTION_PATHS = ["_lectures/", "_nodes/"] 8 | CHANGELOG_PAGE_PATH = "changelog.md" 9 | 10 | def generate(site) 11 | nodes = site.collections.values_at(*NODES_COLLECTIONS_NAMES).flat_map(&:docs) 12 | changelog = site.pages.find { |page| page.relative_path == CHANGELOG_PAGE_PATH } 13 | authors = site.config.fetch("changelog", {}).fetch("authors", {}) 14 | commits = parse_git_data(get_git_data, authors) 15 | commits.each do |commit| 16 | commit["diffs"].each do |diff| 17 | diff["node"] = nodes.find do |node| 18 | node.relative_path == diff["path"] 19 | end 20 | end 21 | end 22 | changelog.data['commits'] = commits 23 | end 24 | 25 | def get_git_data 26 | stdout, stderr, status = Open3.capture3( 27 | [ 28 | "git log", 29 | "--pretty='format:#{%w{%H %at %aN %aE %s}.join('%x00')}'", 30 | # we're interested in ADM of files (not Rs or Cs) 31 | "--name-status", 32 | "--no-renames", 33 | "--diff-filter=ADM", 34 | # we match folders to get deleted objects too 35 | "--", 36 | *NODES_COLLECTION_PATHS, 37 | ].join(" "), 38 | ) 39 | stdout 40 | end 41 | 42 | def parse_git_data(data, authors) 43 | [].tap do |changelog| 44 | data.split("\n\n").each do |block| 45 | commit, *diff = block.split("\n") 46 | hash, timestamp, name, mail, subject = commit.split("\u0000") 47 | changelog << { 48 | "hash" => hash, 49 | "timestamp" => Time.at(timestamp.to_i), 50 | "subject" => subject, 51 | "diffs" => [], 52 | "author" => { 53 | "name" => name, 54 | "mail" => mail, 55 | }.merge(authors.fetch(mail, {})), 56 | } 57 | diff.each do |line| 58 | status, path = line.split("\t") 59 | changelog.last.fetch("diffs") << { 60 | "status" => status, 61 | "path" => path, 62 | } 63 | end 64 | end 65 | end 66 | end 67 | end 68 | end 69 | -------------------------------------------------------------------------------- /_plugins/display_title_filter.rb: -------------------------------------------------------------------------------- 1 | module DisplayTitleFilter 2 | extend self 3 | 4 | def display_numbering(resource) 5 | info = NodeInfo.new resource 6 | info.display_numbering 7 | end 8 | 9 | def display_title(resource) 10 | info = NodeInfo.new resource 11 | info.display_title 12 | end 13 | 14 | def display_title_parenthetical(resource) 15 | info = NodeInfo.new resource 16 | info.display_title_parenthetical 17 | end 18 | 19 | end 20 | 21 | Liquid::Template.register_filter(DisplayTitleFilter) 22 | 23 | -------------------------------------------------------------------------------- /_plugins/nlab_tag.rb: -------------------------------------------------------------------------------- 1 | class NLabTag < Liquid::Tag 2 | def initialize(tag_name, title, tokens) 3 | super 4 | @title = title.strip 5 | end 6 | 7 | def render(context) 8 | page = @title.gsub(/\s/, '+') 9 | "#{@title}" 10 | end 11 | end 12 | 13 | Liquid::Template.register_tag('nlab', NLabTag) 14 | -------------------------------------------------------------------------------- /_plugins/node_info.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | require 'cgi' 3 | 4 | class NodeInfo 5 | def initialize(resource) 6 | @node = resource 7 | end 8 | 9 | def title 10 | @node["title"] 11 | end 12 | 13 | def slug 14 | @node["slug"] 15 | end 16 | 17 | # This is a very strange routine, but at least the logic is factored out here. 18 | def has_title? 19 | title != slug.downcase 20 | end 21 | 22 | def taxon 23 | @node["taxon"] 24 | end 25 | 26 | def numbering 27 | ToNumberingFilter.to_numbering @node["clicks"] 28 | end 29 | 30 | def genus 31 | @node["genus"] || "Result" 32 | end 33 | 34 | def display_numbering 35 | @node["genus"].nil? ? "#{numbering}" : "#{genus} #{numbering}" 36 | end 37 | 38 | def has_numbering? 39 | @node["depth"] != 0 && !taxon.nil? 40 | end 41 | 42 | def display_title 43 | has_numbering? ? (display_numbering + (has_title? ? ". #{title}" : "")) : title 44 | end 45 | 46 | def display_title_parenthetical 47 | has_numbering? ? (display_numbering + (has_title? ? " (#{title})" : "")) : title 48 | end 49 | 50 | def aria_label 51 | label = has_numbering? ? ("#{genus} #{numbering}." + (has_title? ? " #{title}" : "")) : title 52 | CGI.escapeHTML label 53 | end 54 | end 55 | -------------------------------------------------------------------------------- /_plugins/patch-antex.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | module Antex 4 | class Job 5 | include LiquidHelpers 6 | 7 | def prepare_code 8 | @code = liquid_render @options['template'], 9 | 'preamble' => @options['preamble'], 10 | 'append' => @options['append'], 11 | 'prepend' => @options['prepend'], 12 | 'macrolib' => @options['macrolib'], 13 | 'snippet' => @snippet 14 | end 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /_plugins/qed_tag.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | # A tag to generate a [XXXXX] reference link to a node 4 | class QedTag < Liquid::Tag 5 | def render(context) 6 | "" 7 | end 8 | end 9 | 10 | Liquid::Template.register_tag('qed', QedTag) 11 | 12 | -------------------------------------------------------------------------------- /_plugins/ref_tag.rb: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | # 3 | class RefTag < Liquid::Tag 4 | def initialize(tag_name, slug, tokens) 5 | super 6 | @slug = slug.strip 7 | end 8 | 9 | def render_node(node, info, url) 10 | "[#{@slug}]" 11 | end 12 | 13 | def render(context) 14 | registers = context.registers 15 | site = registers[:site] 16 | node = site.collections['nodes'].docs.detect { |doc| doc.data['slug'] == @slug } 17 | info = NodeInfo.new node.data 18 | url = "#{site.baseurl}#{node.url}" 19 | render_node(node, info, url) 20 | end 21 | end 22 | 23 | class CleverRefTag < RefTag 24 | def render_node(node, info, url) 25 | "#{info.display_numbering} [#{@slug}]" 26 | end 27 | end 28 | 29 | class ParenCleverRefTag < CleverRefTag 30 | def render_node(node, info, url) 31 | "(#{super})" 32 | end 33 | end 34 | 35 | 36 | Liquid::Template.register_tag('ref', RefTag) 37 | Liquid::Template.register_tag('cref', CleverRefTag) 38 | Liquid::Template.register_tag('pref', ParenCleverRefTag) 39 | -------------------------------------------------------------------------------- /_plugins/to_numbering_filter.rb: -------------------------------------------------------------------------------- 1 | module ToNumberingFilter 2 | extend self 3 | 4 | def to_numbering(clicks) 5 | label = "" 6 | # NOTE: we skip the first one because it's the lesson 7 | clicks[1..].each do |tick| 8 | label << case tick["clicker"] 9 | when "section" then ".#{tick["value"] + 1}" 10 | when "result" then "·#{(tick["value"] + 97).chr}" 11 | else ".#{tick["value"]}" 12 | end 13 | end 14 | label[1..] 15 | end 16 | end 17 | 18 | Liquid::Template.register_filter(ToNumberingFilter) 19 | -------------------------------------------------------------------------------- /assets/macros/jon-tikz.sty: -------------------------------------------------------------------------------- 1 | \RequirePackage{xparse} 2 | \RequirePackage{tikz} 3 | \RequirePackage{zx-calculus} 4 | \RequirePackage{tikz-cd} 5 | \usetikzlibrary{matrix,arrows} 6 | \usetikzlibrary{fit,positioning,calc,shapes} 7 | \usetikzlibrary{decorations.pathreplacing} 8 | \usetikzlibrary{decorations.pathmorphing} 9 | \usetikzlibrary{decorations.markings} 10 | 11 | 12 | \renewcommand{\zxDefaultRowSep}{5mm} 13 | \renewcommand{\zxDefaultColumnSep}{2mm} 14 | 15 | \tikzset{ 16 | /zx/styles/rounded style/.append style={ 17 | zxShort/.append style={ 18 | font={\fontsize{8}{10}\selectfont}, 19 | }, 20 | stylePhaseInLabel/.append style={ 21 | font={\fontsize{8}{10}\selectfont}, 22 | }, 23 | }, 24 | close/.style = { 25 | outer sep = -1.7pt 26 | } 27 | } 28 | 29 | 30 | 31 | \tikzset{ 32 | desc/.style={sloped, fill=white,inner sep=2pt}, 33 | upright desc/.style={fill=white,inner sep=2pt}, 34 | pullback/.style = { 35 | append after command={ 36 | \pgfextra{ 37 | \draw ($(\tikzlastnode) + (.2cm,-.5cm)$) -- ++(0.3cm,0) -- ++(0,0.3cm); 38 | } 39 | } 40 | }, 41 | pullback 45/.style = { 42 | append after command={ 43 | \pgfextra{ 44 | \draw[rotate = 45] ($(\tikzlastnode) + (.2cm,-.5cm)$) -- ++(0.3cm,0) -- ++(0,0.3cm); 45 | } 46 | } 47 | }, 48 | ne pullback/.style = { 49 | append after command={ 50 | \pgfextra{ 51 | \draw ($(\tikzlastnode) + (-.2cm,-.5cm)$) -- ++(-0.3cm,0) -- ++(0,0.3cm); 52 | } 53 | } 54 | }, 55 | sw pullback/.style = { 56 | append after command={ 57 | \pgfextra{ 58 | \draw ($(\tikzlastnode) + (.2cm,.5cm)$) -- ++(0.3cm,0) -- ++(0,-0.3cm); 59 | } 60 | } 61 | }, 62 | dotted pullback/.style = { 63 | append after command={ 64 | \pgfextra{ 65 | \draw [densely dotted] ($(\tikzlastnode) + (.2cm,-.5cm)$) -- ++(0.3cm,0) -- ++(0,0.3cm); 66 | } 67 | } 68 | }, 69 | muted pullback/.style = { 70 | append after command={ 71 | \pgfextra{ 72 | \draw [gray] ($(\tikzlastnode) + (.2cm,-.5cm)$) -- ++(0.3cm,0) -- ++(0,0.3cm); 73 | } 74 | } 75 | }, 76 | pushout/.style = { 77 | append after command={ 78 | \pgfextra{ 79 | \draw ($(\tikzlastnode) + (-.2cm,.5cm)$) -- ++(-0.3cm,0) -- ++(0,-0.3cm); 80 | } 81 | } 82 | }, 83 | between/.style args={#1 and #2}{ 84 | at = ($(#1)!0.5!(#2)$) 85 | }, 86 | diagram/.style = { 87 | on grid, 88 | node distance=2cm, 89 | commutative diagrams/every diagram, 90 | line width = .5pt, 91 | every node/.append style = { 92 | commutative diagrams/every cell, 93 | } 94 | }, 95 | fibration/.style = { 96 | -{Triangle[open]} 97 | }, 98 | etale/.style = { 99 | -{Triangle[open]} 100 | }, 101 | etale cover/.style= { 102 | >={Triangle[open]},->.> 103 | }, 104 | opfibration/.style = { 105 | -{Triangle} 106 | }, 107 | lies over/.style = { 108 | |-{Triangle[open]} 109 | }, 110 | op lies over/.style = { 111 | |-{Triangle} 112 | }, 113 | embedding/.style = { 114 | {right hook}-> 115 | }, 116 | open immersion/.style = { 117 | {right hook}-{Triangle[open]} 118 | }, 119 | closed immersion/.style = { 120 | {right hook}-{Triangle} 121 | }, 122 | closed immersion*/.style = { 123 | {left hook}-{Triangle} 124 | }, 125 | embedding*/.style = { 126 | {left hook}-> 127 | }, 128 | open immersion*/.style = { 129 | {left hook}-{Triangle[open]} 130 | }, 131 | exists/.style = { 132 | densely dashed 133 | }, 134 | } 135 | 136 | \newlength{\dontworryaboutit} 137 | 138 | \tikzset{ 139 | inline diagram/.style = { 140 | commutative diagrams/every diagram, 141 | commutative diagrams/cramped, 142 | line width = .5pt, 143 | every node/.append style = { 144 | commutative diagrams/every cell, 145 | anchor = base, 146 | inner sep = 0pt 147 | }, 148 | every path/.append style = { 149 | outer xsep = 2pt 150 | } 151 | } 152 | } 153 | 154 | \ExplSyntaxOn 155 | 156 | \cs_new:Npn \jms_tikz_morphism:nnn #1 #2 #3 { 157 | \tikz[inline~diagram, baseline = (Y.base)]{ 158 | \node (X) {$#2$}; 159 | \node (Y) [right = 3ex~of~X] {$#3$}; 160 | \path[#1] (X) edge (Y); 161 | } 162 | } 163 | 164 | \ExplSyntaxOff 165 | 166 | 167 | 168 | 169 | \tikzset{ 170 | square/nw/.style = {}, 171 | square/ne/.style = {}, 172 | square/se/.style = {}, 173 | square/sw/.style = {}, 174 | square/north/.style = {->}, 175 | square/south/.style = {->}, 176 | square/west/.style = {->}, 177 | square/east/.style = {->}, 178 | square/north/node/.style = {above}, 179 | square/south/node/.style = {below}, 180 | square/west/node/.style = {left}, 181 | square/east/node/.style = {right}, 182 | } 183 | 184 | \ExplSyntaxOn 185 | 186 | \bool_new:N \l_jon_glue_west 187 | 188 | \keys_define:nn { jon-tikz/diagram } { 189 | nw .tl_set:N = \l_jon_tikz_diagram_nw, 190 | sw .tl_set:N = \l_jon_tikz_diagram_sw, 191 | ne .tl_set:N = \l_jon_tikz_diagram_ne, 192 | se .tl_set:N = \l_jon_tikz_diagram_se, 193 | 194 | width .tl_set:N = \l_jon_tikz_diagram_width, 195 | height .tl_set:N = \l_jon_tikz_diagram_height, 196 | 197 | north .tl_set:N = \l_jon_tikz_diagram_north, 198 | south .tl_set:N = \l_jon_tikz_diagram_south, 199 | west .tl_set:N = \l_jon_tikz_diagram_west, 200 | east .tl_set:N = \l_jon_tikz_diagram_east, 201 | 202 | nw/style .code:n = {\tikzset{square/nw/.style = {#1}}}, 203 | sw/style .code:n = {\tikzset{square/sw/.style = {#1}}}, 204 | ne/style .code:n = {\tikzset{square/ne/.style = {#1}}}, 205 | se/style .code:n = {\tikzset{square/se/.style = {#1}}}, 206 | 207 | glue .choice:, 208 | glue / west .code:n = {\bool_set:Nn \l_jon_glue_west \c_true_bool}, 209 | 210 | glue~target .tl_set:N = \l_jon_tikz_glue_target, 211 | 212 | north/style .code:n = {\tikzset{square/north/.style = {#1}}}, 213 | north/node/style .code:n = {\tikzset{square/north/node/.style = {#1}}}, 214 | south/style .code:n = {\tikzset{square/south/.style = {#1}}}, 215 | south/node/style .code:n = {\tikzset{square/south/node/.style = {#1}}}, 216 | west/style .code:n = {\tikzset{square/west/.style = {#1}}}, 217 | west/node/style .code:n = {\tikzset{square/west/node/.style = {#1}}}, 218 | east/style .code:n = {\tikzset{square/east/.style = {#1}}}, 219 | east/node/style .code:n = {\tikzset{square/east/node/.style = {#1}}}, 220 | 221 | draft .meta:n = { 222 | nw = {\__jon_tikz_diagram_fmt_placeholder:n {nw}}, 223 | sw = {\__jon_tikz_diagram_fmt_placeholder:n {sw}}, 224 | se = {\__jon_tikz_diagram_fmt_placeholder:n {se}}, 225 | ne = {\__jon_tikz_diagram_fmt_placeholder:n {ne}}, 226 | north = {\__jon_tikz_diagram_fmt_placeholder:n {north}}, 227 | south = {\__jon_tikz_diagram_fmt_placeholder:n {south}}, 228 | west = {\__jon_tikz_diagram_fmt_placeholder:n {west}}, 229 | east = {\__jon_tikz_diagram_fmt_placeholder:n {east}}, 230 | } 231 | } 232 | 233 | \tl_set:Nn \l_jon_tikz_diagram_width { 2cm } 234 | \tl_set:Nn \l_jon_tikz_diagram_height { 2cm } 235 | 236 | 237 | \cs_new:Npn \__jon_tikz_diagram_fmt_placeholder:n #1 { 238 | \texttt{\textcolor{red}{#1}} 239 | } 240 | 241 | \keys_set:nn { jon-tikz/diagram } { 242 | glue~target = {}, 243 | } 244 | 245 | 246 | \cs_new:Nn \__jon_tikz_render_square:nn { 247 | \group_begin: 248 | \keys_set:nn {jon-tikz/diagram} {#2} 249 | \bool_if:nTF \l_jon_glue_west { 250 | \node (#1ne) [right = \l_jon_tikz_diagram_width~of~\l_jon_tikz_glue_target ne,square/ne] {$\l_jon_tikz_diagram_ne$}; 251 | \node (#1se) [below = \l_jon_tikz_diagram_height~of~#1ne,square/se] {$\l_jon_tikz_diagram_se$}; 252 | \draw[square/north] (\l_jon_tikz_glue_target ne) to node [square/north/node] {$\l_jon_tikz_diagram_north$} (#1ne); 253 | \draw[square/east] (#1ne) to node [square/east/node] {$\l_jon_tikz_diagram_east$} (#1se); 254 | \draw[square/south] (\l_jon_tikz_glue_target se) to node [square/south/node] {$\l_jon_tikz_diagram_south$} (#1se); 255 | } { 256 | \node (#1nw) [square/nw] {$\l_jon_tikz_diagram_nw$}; 257 | \node (#1sw) [below = \l_jon_tikz_diagram_height~of~#1nw,square/sw] {$\l_jon_tikz_diagram_sw$}; 258 | \draw[square/west] (#1nw) to node [square/west/node] {$\l_jon_tikz_diagram_west$} (#1sw); 259 | 260 | \node (#1ne) [right = \l_jon_tikz_diagram_width~of~#1nw,square/ne] {$\l_jon_tikz_diagram_ne$}; 261 | \node (#1se) [below = \l_jon_tikz_diagram_height~of~#1ne,square/se] {$\l_jon_tikz_diagram_se$}; 262 | \draw[square/north] (#1nw) to node [square/north/node] {$\l_jon_tikz_diagram_north$} (#1ne); 263 | \draw[square/east] (#1ne) to node [square/east/node] {$\l_jon_tikz_diagram_east$} (#1se); 264 | \draw[square/south] (#1sw) to node [square/south/node] {$\l_jon_tikz_diagram_south$} (#1se); 265 | } 266 | \group_end: 267 | } 268 | 269 | \NewDocumentCommand\SpliceDiagramSquare{D<>{}m}{ 270 | \__jon_tikz_render_square:nn {#1} {#2} 271 | } 272 | 273 | 274 | \NewDocumentCommand\DiagramSquare{D<>{}O{}m}{ 275 | \begin{tikzpicture}[diagram,#2,baseline=(#1sw.base)] 276 | \__jon_tikz_render_square:nn {#1} {#3} 277 | \end{tikzpicture} 278 | } 279 | 280 | 281 | \ExplSyntaxOff 282 | -------------------------------------------------------------------------------- /assets/macros/topos.katex.json: -------------------------------------------------------------------------------- 1 | {"\\AlgGU":"\\mathbf{GU}_{\\textit{alg}}","\\BoldSymbol":"\\pmb{#1}","\\CandHom":"\\mathbf{H}_{#1}(#2,#3)","\\CartGU":"\\mathbf{GU}_{\\textit{cart}}","\\CoSl":"#2^{\\setminus #1}","\\Cod":"\\mathsf{cod}_{#1}","\\Con":"\\mathsf{#1}","\\DirImg":"#1_{*}","\\FAM":"\\pmb{\\mathcal{F}}_{#1}","\\FullSubfib":"\\mathbf{Full}(#1)","\\GL":"\\pmb{\\mathcal{G}}_{#1}","\\Gl":"\\mathsf{gl}_{#1}","\\Idn":"1_{#1}","\\InvImg":"#1^{*}","\\LogGU":"\\mathbf{GU}_{\\textit{log}}","\\ObjTerm":"\\mathbf{1}_{#1}","\\OpCat":"#1^{\\mathsf{o}}","\\OpGL":"\\overline{\\pmb{\\mathcal{G}}}_{#1}","\\OpGl":"\\overline{\\mathsf{gl}}_{#1}","\\PCartGU":"\\mathbf{GU}_{\\textit{pcart}}","\\SET":"\\mathbf{Set}","\\SelfIx":"\\underline{#1}","\\Sh":"\\pmb{\\mathcal{S}}_{#1}","\\Sl":"#1_{/#2}","\\Sub":"_{#1}","\\Sup":"^{#1}","\\TOP":"\\mathbf{Top}_{#1}","\\TotCat":"\\widetilde{#1}","\\TotOpCat":"#1^{\\tilde{\\mathsf{o}}}","\\brc":"\\{ #1 \\}","\\brk":"[#1]","\\gl":"\\langle #1 \\rangle","\\prn":"(#1)","\\tick":"'"} -------------------------------------------------------------------------------- /assets/macros/topos.mathjax.json: -------------------------------------------------------------------------------- 1 | {"AlgGU":["\\mathbf{GU}_{\\textit{alg}}",0],"BoldSymbol":["\\boldsymbol{#1}",1],"CandHom":["\\mathbf{H}_{#1}(#2,#3)",3],"CartGU":["\\mathbf{GU}_{\\textit{cart}}",0],"CoSl":["#2^{\\setminus #1}",2],"Cod":["\\mathsf{cod}_{#1}",1],"Con":["\\mathsf{#1}",1],"DirImg":["#1_{*}",1],"FAM":["\\boldsymbol{\\mathcal{F}}_{#1}",1],"FullSubfib":["\\mathbf{Full}(#1)",1],"GL":["\\boldsymbol{\\mathcal{G}}_{#1}",1],"Gl":["\\mathsf{gl}_{#1}",1],"Idn":["1_{#1}",1],"InvImg":["#1^{*}",1],"LogGU":["\\mathbf{GU}_{\\textit{log}}",0],"ObjTerm":["\\mathbf{1}_{#1}",1],"OpCat":["#1^{\\mathsf{o}}",1],"OpGL":["\\overline{\\boldsymbol{\\mathcal{G}}}_{#1}",1],"OpGl":["\\overline{\\mathsf{gl}}_{#1}",1],"PCartGU":["\\mathbf{GU}_{\\textit{pcart}}",0],"SET":["\\mathbf{Set}",0],"SelfIx":["\\underline{#1}",1],"Sh":["\\boldsymbol{\\mathcal{S}}_{#1}",1],"Sl":["#1_{/#2}",2],"Sub":["_{#1}",1],"Sup":["^{#1}",1],"TOP":["\\mathbf{Top}_{#1}",1],"TotCat":["\\widetilde{#1}",1],"TotOpCat":["#1^{\\tilde{\\mathsf{o}}}",1],"brc":["\\{ #1 \\}",1],"brk":["[#1]",1],"gl":["\\langle #1 \\rangle",1],"prn":["(#1)",1],"tick":["'",0]} -------------------------------------------------------------------------------- /assets/macros/topos.sty: -------------------------------------------------------------------------------- 1 | \newcommand\AlgGU{\mathbf{GU}_{\textit{alg}}} 2 | \newcommand\BoldSymbol[1]{\boldsymbol{#1}} 3 | \newcommand\brc[1]{\{ #1 \}} 4 | \newcommand\brk[1]{[#1]} 5 | \newcommand\CandHom[3]{\mathbf{H}_{#1}(#2,#3)} 6 | \newcommand\CartGU{\mathbf{GU}_{\textit{cart}}} 7 | \newcommand\Cod[1]{\mathsf{cod}_{#1}} 8 | \newcommand\Con[1]{\mathsf{#1}} 9 | \newcommand\CoSl[2]{#2^{\setminus #1}} 10 | \newcommand\DirImg[1]{#1_{*}} 11 | \newcommand\FAM[1]{\boldsymbol{\mathcal{F}}_{#1}} 12 | \newcommand\FullSubfib[1]{\mathbf{Full}(#1)} 13 | \newcommand\Gl[1]{\mathsf{gl}_{#1}} 14 | \newcommand\gl[1]{\langle #1 \rangle} 15 | \newcommand\GL[1]{\boldsymbol{\mathcal{G}}_{#1}} 16 | \newcommand\Idn[1]{1_{#1}} 17 | \newcommand\InvImg[1]{#1^{*}} 18 | \newcommand\LogGU{\mathbf{GU}_{\textit{log}}} 19 | \newcommand\ObjTerm[1]{\mathbf{1}_{#1}} 20 | \newcommand\OpCat[1]{#1^{\mathsf{o}}} 21 | \newcommand\OpGL[1]{\overline{\boldsymbol{\mathcal{G}}}_{#1}} 22 | \newcommand\OpGl[1]{\overline{\mathsf{gl}}_{#1}} 23 | \newcommand\PCartGU{\mathbf{GU}_{\textit{pcart}}} 24 | \newcommand\prn[1]{(#1)} 25 | \newcommand\SelfIx[1]{\underline{#1}} 26 | \newcommand\SET{\mathbf{Set}} 27 | \newcommand\Sh[1]{\boldsymbol{\mathcal{S}}_{#1}} 28 | \newcommand\Sl[2]{#1_{/#2}} 29 | \newcommand\Sub[1]{_{#1}} 30 | \newcommand\Sup[1]{^{#1}} 31 | \newcommand\tick{'} 32 | \newcommand\TOP[1]{\mathbf{Top}_{#1}} 33 | \newcommand\TotCat[1]{\widetilde{#1}} 34 | \newcommand\TotOpCat[1]{#1^{\tilde{\mathsf{o}}}} 35 | -------------------------------------------------------------------------------- /assets/search.js: -------------------------------------------------------------------------------- 1 | class Search { 2 | constructor() { 3 | this.NODE_TAG = "SECTION"; // MUST be uppercase to be both selector and nodeName 4 | this.FOLDED_CLASS = "ellipsis"; 5 | this.MARKJS_EXCLUSIONS = [ 6 | `.${this.FOLDED_CLASS} *`, // folded nodes 7 | "nav *", // toc, next/prev, etc. 8 | ]; 9 | this.INPUT_NAME = "q"; 10 | this.URL_PARAM = "q"; 11 | this.DOC_REF_KEY = "slug"; 12 | this.DOC_VAL_KEY = "text"; 13 | 14 | this.form = document.getElementById("search-form"); 15 | this.fieldset = this.form.querySelector("fieldset"); 16 | this.input = document.getElementById("search-query"); 17 | this.toggle = document.getElementById("search-toggle"); 18 | this.bindEvents(); 19 | 20 | this.tocItems = {}; 21 | this.nodeDocuments = []; 22 | this.nodeElements = {}; 23 | this.nodeVisibilities = {}; 24 | this.initialized = false; 25 | 26 | this.checkURL(); 27 | } 28 | 29 | //=[ Initialization ]========================================================= 30 | 31 | async lazyInit() { 32 | if (this.initialized) return; 33 | this.initBookkeeping(); 34 | this.initIndex(this.nodeDocuments); 35 | this.initialized = true; 36 | } 37 | 38 | initBookkeeping() { 39 | document.querySelectorAll(this.NODE_TAG).forEach((element) => { 40 | this.tocItems[element.id] = document 41 | .querySelector(".toc") 42 | .querySelector(`a[href="#${element.id}"]`) 43 | ?.closest("li"); 44 | this.nodeElements[element.id] = element; 45 | this.nodeVisibilities[element.id] = true; 46 | this.nodeDocuments.push({ 47 | [this.DOC_REF_KEY]: element.id, 48 | [this.DOC_VAL_KEY]: this.extractSearchableText(element), 49 | }); 50 | }); 51 | } 52 | 53 | extractSearchableText(element) { 54 | return [...element.children] 55 | .filter((e) => e.nodeName != this.NODE_TAG) 56 | .map((e) => e.innerText) 57 | .join("\n"); 58 | } 59 | 60 | //=[ URI ]==================================================================== 61 | 62 | checkURL() { 63 | const q = this.getURLQuery(); 64 | if (q) { 65 | this.handleToggle(); 66 | this.input.value = q; 67 | this.run(q); 68 | } 69 | } 70 | 71 | getURLQuery() { 72 | var url = new URL(window.location.href); 73 | return url.searchParams.get(this.URL_PARAM); 74 | } 75 | 76 | setURLQuery(q) { 77 | if (!history.replaceState) return; 78 | var url = new URL(window.location.href); 79 | url.searchParams.set(this.URL_PARAM, q); 80 | window.history.replaceState(null, null, url); 81 | } 82 | 83 | deleteURLQuery() { 84 | if (!history.replaceState) return; 85 | var url = new URL(window.location.href); 86 | url.searchParams.delete(this.URL_PARAM); 87 | window.history.replaceState(null, null, url); 88 | } 89 | 90 | //=[ Operation ]============================================================== 91 | 92 | async run(q) { 93 | this.lazyInit(); 94 | 95 | await this.setFormLock(true); 96 | 97 | const results = this.searchIndex(q); 98 | 99 | this.setVisibilities(false); 100 | this.setVisibilitiesFromResults(results); 101 | this.applyVisibilities(); 102 | 103 | await this.promiseToUnmarkTree(); 104 | await this.promiseToMarkTree(results); 105 | 106 | await this.setFormLock(false); 107 | 108 | this.setURLQuery(q); 109 | } 110 | 111 | async clear() { 112 | await this.setFormLock(true); 113 | 114 | await this.promiseToUnmarkTree(); 115 | 116 | this.setVisibilities(true); 117 | this.applyVisibilities(); 118 | 119 | await this.setFormLock(false); 120 | 121 | this.deleteURLQuery(); 122 | } 123 | 124 | //=[ Indexing ]=============================================================== 125 | 126 | initIndex(documents) { 127 | const that = this; // sigh. 128 | this.index = lunr(function () { 129 | this.ref(that.DOC_REF_KEY); 130 | this.field(that.DOC_VAL_KEY); 131 | documents.forEach(this.add.bind(this)); 132 | }); 133 | } 134 | 135 | searchIndex(query) { 136 | return this.index.search(query); 137 | } 138 | 139 | //=[ (Un)folding ]============================================================ 140 | 141 | setVisibilities(status) { 142 | Object.keys(this.nodeVisibilities).forEach( 143 | this.setVisibility.bind(this, status) 144 | ); 145 | } 146 | 147 | setVisibility(status, slug) { 148 | this.nodeVisibilities[slug] = status; 149 | } 150 | 151 | showSectionAndAncestors(nodeEl) { 152 | if (nodeEl.nodeName != this.NODE_TAG) return; 153 | if (this.nodeVisibilities[nodeEl.id]) return; 154 | this.nodeVisibilities[nodeEl.id] = true; 155 | this.showSectionAndAncestors(nodeEl.parentNode); 156 | } 157 | 158 | setVisibilitiesFromResults(results) { 159 | results.map(({ ref }) => 160 | this.showSectionAndAncestors(this.nodeElements[ref]) 161 | ); 162 | } 163 | 164 | applyVisibilities() { 165 | Object.keys(this.nodeVisibilities).forEach(this.applyVisibility.bind(this)); 166 | } 167 | 168 | applyVisibility(slug) { 169 | if (this.nodeVisibilities[slug]) { 170 | this.tocItems[slug]?.classList?.remove(this.FOLDED_CLASS); 171 | this.nodeElements[slug].classList.remove(this.FOLDED_CLASS); 172 | } else { 173 | this.tocItems[slug]?.classList?.add(this.FOLDED_CLASS); 174 | this.nodeElements[slug].classList.add(this.FOLDED_CLASS); 175 | } 176 | } 177 | 178 | //=[ Highlighting ]=========================================================== 179 | 180 | promiseToMarkNode(slug, terms) { 181 | return new Promise((resolve, reject) => { 182 | new Mark(this.nodeElements[slug]).mark(terms, { 183 | exclude: this.MARKJS_EXCLUSIONS, 184 | accuracy: "complementary", 185 | done: resolve, 186 | }); 187 | }); 188 | } 189 | 190 | promiseToMarkTree(results) { 191 | const promisesToMarkNodes = results.map( 192 | ({ ref, matchData: { metadata } }) => { 193 | this.promiseToMarkNode(ref, Object.keys(metadata)); 194 | } 195 | ); 196 | return Promise.allSettled(promisesToMarkNodes); 197 | } 198 | 199 | promiseToUnmarkTree() { 200 | return new Promise((resolve, reject) => { 201 | new Mark(document).unmark({ done: resolve }); 202 | }); 203 | } 204 | 205 | //=[ (Un)locking ]============================================================ 206 | 207 | async setFormLock(locked) { 208 | this.fieldset.disabled = locked; 209 | // we need to give slow machines some time to redraw 210 | await this.sleep(1); 211 | } 212 | 213 | sleep(ms) { 214 | return new Promise((resolve) => setTimeout(resolve, ms)); 215 | } 216 | 217 | //=[ Events ]================================================================= 218 | 219 | async handleReset(event) { 220 | await this.clear(); 221 | } 222 | 223 | async handleSubmit(event) { 224 | event.preventDefault(); 225 | var formData = new FormData(event.target); 226 | var query = formData.get(this.INPUT_NAME); 227 | await this.run(query); 228 | } 229 | 230 | handleClick(event) { 231 | if (!this.initialized) return; 232 | const section = event.target.closest(this.NODE_TAG); 233 | if (!section) return; 234 | const slug = section.id; 235 | if (this.nodeVisibilities[slug]) return; 236 | this.setVisibility(true, slug); 237 | this.applyVisibility(slug); 238 | } 239 | 240 | handleToggle() { 241 | this.form.hidden = !this.form.hidden; 242 | if (!this.form.hidden) this.input.focus(); 243 | } 244 | 245 | bindEvents() { 246 | this.toggle.addEventListener("click", this.handleToggle.bind(this), false); 247 | document.addEventListener("click", this.handleClick.bind(this), false); 248 | this.form.addEventListener("submit", this.handleSubmit.bind(this), false); 249 | this.form.addEventListener("reset", this.handleReset.bind(this), false); 250 | } 251 | } 252 | 253 | document.addEventListener("DOMContentLoaded", function () { 254 | window.search = new Search(); 255 | }); 256 | -------------------------------------------------------------------------------- /assets/simple.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Inria+Sans:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&display=swap'); 2 | 3 | /* Global variables. */ 4 | :root { 5 | /* Set sans-serif & mono fonts */ 6 | --sans-font: "Inria Sans", -apple-system, BlinkMacSystemFont, "Avenir Next", Avenir, 7 | "Nimbus Sans L", Roboto, "Noto Sans", "Segoe UI", Arial, Helvetica, 8 | "Helvetica Neue", sans-serif; 9 | --mono-font: Consolas, Menlo, Monaco, "Andale Mono", "Ubuntu Mono", monospace; 10 | 11 | /* Default (light) theme */ 12 | --bg: #fff; 13 | --accent-bg: #f5f7ff; 14 | --text: #212121; 15 | --text-light: #585858; 16 | --border: #d8dae1; 17 | --accent: #1756a9; 18 | --code: #d81b60; 19 | --preformatted: #444; 20 | --marked: #ffdd33; 21 | --disabled: #efefef; 22 | } 23 | 24 | /* Reset box-sizing */ 25 | *, *::before, *::after { 26 | box-sizing: border-box; 27 | } 28 | 29 | /* Reset default appearance */ 30 | 31 | html { 32 | /* Set the font globally */ 33 | font-family: var(--sans-font); 34 | scroll-behavior: smooth; 35 | } 36 | 37 | /* Make the body a nice central block */ 38 | body { 39 | color: var(--text); 40 | background: var(--bg); 41 | font-size: 1rem; 42 | line-height: 1.5; 43 | display: grid; 44 | grid-template-columns: 1fr min(42rem, 90%) 1fr; 45 | margin: 0; 46 | } 47 | 48 | body > * { 49 | grid-column: 2; 50 | } 51 | 52 | body > p { 53 | margin-top: .25rem; 54 | margin-bottom: .25rem; 55 | } 56 | 57 | /* Add a little padding to ensure spacing is correct between content and header > nav */ 58 | main { 59 | padding-top: 1.5rem; 60 | } 61 | 62 | body > footer { 63 | margin-top: 4rem; 64 | padding: 2rem 1rem 1.5rem 1rem; 65 | color: var(--text-light); 66 | font-size: 0.9rem; 67 | text-align: center; 68 | } 69 | 70 | /* Format headers */ 71 | h1 { 72 | font-size: 3rem; 73 | margin-bottom: 1rem; 74 | } 75 | 76 | h2 { 77 | font-size: 2.6rem; 78 | margin-top: 3rem; 79 | } 80 | 81 | h3 { 82 | font-size: 2rem; 83 | margin-top: 3rem; 84 | } 85 | 86 | h4 { 87 | font-size: 1.44rem; 88 | } 89 | 90 | h5 { 91 | font-size: 1.15rem; 92 | } 93 | 94 | h6 { 95 | font-size: 0.96rem; 96 | } 97 | 98 | /* Prevent long strings from overflowing container */ 99 | p, h1, h2, h3, h4, h5, h6 { 100 | overflow-wrap: break-word; 101 | } 102 | 103 | /* Fix line height when title wraps */ 104 | h1, 105 | h2, 106 | h3 { 107 | line-height: 1.1; 108 | } 109 | 110 | /* Reduce header size on mobile */ 111 | @media only screen and (max-width: 720px) { 112 | h1 { 113 | font-size: 2.5rem; 114 | } 115 | 116 | h2 { 117 | font-size: 2.1rem; 118 | } 119 | 120 | h3 { 121 | font-size: 1.75rem; 122 | } 123 | 124 | h4 { 125 | font-size: 1.25rem; 126 | } 127 | } 128 | 129 | /* Format links & buttons */ 130 | 131 | a { 132 | text-decoration: none; 133 | color: var(--accent); 134 | } 135 | 136 | a:hover { 137 | text-decoration: underline; 138 | } 139 | 140 | 141 | 142 | /* Set the cursor to '?' while hovering over an abbreviation */ 143 | abbr { 144 | cursor: help; 145 | } 146 | /* Format navigation */ 147 | header > nav { 148 | font-size: 1rem; 149 | line-height: 1.25; 150 | padding: 1rem 0 0 0; 151 | display: flex; 152 | justify-content: space-between; 153 | } 154 | 155 | header > nav h2 { 156 | margin: 0 0 0 0 ; 157 | padding: 0.1rem 1rem; 158 | font-family: var(--sans-font); 159 | font-size: 1rem; 160 | } 161 | 162 | /* Use flexbox to allow items to wrap, as needed */ 163 | header > nav ul, 164 | header > nav ol { 165 | align-items: center; 166 | list-style-type: none; 167 | display: flex; 168 | margin: 0; 169 | padding: 0; 170 | } 171 | 172 | /* List items are inline elements, make them behave more like blocks */ 173 | header > nav ul li, 174 | header > nav ol li { 175 | padding-left: 1rem; 176 | display: inline-block; 177 | } 178 | 179 | body > header { 180 | margin-bottom: .6rem; 181 | padding-bottom: .6em; 182 | border-bottom: 1px solid var(--border); 183 | } 184 | 185 | .page-link { 186 | color: black; 187 | } 188 | 189 | aside { 190 | font-size: 1rem; 191 | width: 30%; 192 | padding: 0 15px; 193 | margin-left: 15px; 194 | float: right; 195 | } 196 | 197 | /* Make aside full-width on mobile */ 198 | @media only screen and (max-width: 720px) { 199 | aside { 200 | width: 100%; 201 | float: none; 202 | margin-left: 0; 203 | } 204 | } 205 | 206 | article, fieldset { 207 | margin-bottom: 1rem; 208 | } 209 | 210 | article h2:first-child, 211 | section h2:first-child { 212 | margin-top: 1rem; 213 | } 214 | 215 | section { 216 | margin-bottom: 1.5rem; 217 | } 218 | 219 | summary { 220 | cursor: pointer; 221 | font-weight: bold; 222 | padding: 0.6rem 1rem; 223 | } 224 | 225 | 226 | /* Format tables */ 227 | table { 228 | border-collapse: collapse; 229 | display: block; 230 | margin: 1.5rem 0; 231 | overflow: auto; 232 | width: 100%; 233 | } 234 | 235 | td, 236 | th { 237 | border: 1px solid var(--border); 238 | text-align: left; 239 | padding: 0.5rem; 240 | } 241 | 242 | table caption { 243 | font-weight: bold; 244 | margin-bottom: 0.5rem; 245 | } 246 | /* Misc body elements */ 247 | hr { 248 | color: var(--border); 249 | border-top: 1px; 250 | margin: 1rem auto; 251 | } 252 | 253 | mark { 254 | padding: 2px 5px; 255 | border-radius: 4px; 256 | background: var(--marked); 257 | } 258 | 259 | img, 260 | video { 261 | max-width: 100%; 262 | height: auto; 263 | border-radius: 5px; 264 | } 265 | 266 | figure { 267 | margin: 0; 268 | text-align: center; 269 | } 270 | 271 | figcaption { 272 | font-size: 0.9rem; 273 | color: var(--text-light); 274 | margin-bottom: 1rem; 275 | } 276 | 277 | blockquote { 278 | margin: 2rem 0 2rem 2rem; 279 | padding: 0.4rem 0.8rem; 280 | border-left: 0.35rem solid var(--accent); 281 | color: var(--text-light); 282 | font-style: italic; 283 | } 284 | 285 | cite { 286 | font-size: 0.9rem; 287 | color: var(--text-light); 288 | font-style: normal; 289 | } 290 | /* Use mono font for code elements */ 291 | code, 292 | pre, 293 | pre span, 294 | kbd, 295 | samp { 296 | font-family: var(--mono-font); 297 | color: var(--code); 298 | } 299 | 300 | kbd { 301 | color: var(--preformatted); 302 | border: 1px solid var(--preformatted); 303 | border-bottom: 3px solid var(--preformatted); 304 | border-radius: 5px; 305 | padding: 0.1rem 0.4rem; 306 | } 307 | 308 | pre { 309 | padding: 1rem 1.4rem; 310 | max-width: 100%; 311 | overflow: auto; 312 | color: var(--preformatted); 313 | } 314 | 315 | /* Fix embedded code within pre */ 316 | pre code { 317 | color: var(--preformatted); 318 | background: none; 319 | margin: 0; 320 | padding: 0; 321 | } 322 | 323 | /* Progress bars */ 324 | /* Declarations are repeated because you */ 325 | /* cannot combine vendor-specific selectors */ 326 | progress { 327 | width: 100%; 328 | } 329 | 330 | progress:indeterminate { 331 | background-color: var(--accent-bg); 332 | } 333 | 334 | progress::-webkit-progress-bar { 335 | border-radius: 5px; 336 | background-color: var(--accent-bg); 337 | } 338 | 339 | progress::-webkit-progress-value { 340 | border-radius: 5px; 341 | background-color: var(--accent); 342 | } 343 | 344 | progress::-moz-progress-bar { 345 | border-radius: 5px; 346 | background-color: var(--accent); 347 | transition-property: width; 348 | transition-duration: 0.3s; 349 | } 350 | 351 | progress:indeterminate::-moz-progress-bar { 352 | background-color: var(--accent-bg); 353 | } 354 | -------------------------------------------------------------------------------- /assets/style.css: -------------------------------------------------------------------------------- 1 | @import "simple.css"; 2 | 3 | h1, 4 | h2, 5 | h3, 6 | h4, 7 | h5, 8 | h6 { 9 | font-family: "Palatino", "Inria Sans" !important; 10 | font-weight: bold !important; 11 | } 12 | 13 | h1 { 14 | font-size: 2em !important; 15 | } 16 | 17 | h2 { 18 | font-size: 1.5em !important; 19 | margin-block-end: .4em; 20 | margin-top: 1.5em; 21 | } 22 | 23 | h3 { 24 | font-size: 1.2em !important; 25 | margin-block-end: .4em; 26 | margin-top: .3em; 27 | } 28 | 29 | h4 { 30 | font-size: 1.1em !important; 31 | margin-top: .3em; 32 | margin-block-end: .4em; 33 | } 34 | 35 | h5 { 36 | font-size: 1em !important; 37 | } 38 | 39 | h6 { 40 | font-size: 1em !important; 41 | font-style: italic; 42 | } 43 | 44 | .trans-note { 45 | color: gray; 46 | } 47 | 48 | 49 | .site-title { 50 | color: black; 51 | font-weight: bold; 52 | } 53 | 54 | .slug { 55 | font-family: "Inria Sans"; 56 | font-weight: 200; 57 | color: gray !important; 58 | } 59 | 60 | ul.toc { 61 | list-style-type: none; 62 | padding: 0; 63 | margin-left: 10pt; 64 | } 65 | 66 | div.bibtex-code { 67 | margin-top: 1em; 68 | } 69 | 70 | header.post-header { 71 | margin-bottom: 1em !important; 72 | } 73 | 74 | header.inline { 75 | display: inline; 76 | margin-right: .5ex; 77 | } 78 | 79 | header.inline+p { 80 | display: inline; 81 | } 82 | 83 | header.inline+p+* { 84 | margin-top: 10px; 85 | } 86 | 87 | header.inline .numbering { 88 | font-weight: bold; 89 | } 90 | 91 | .katex { 92 | line-height: 1 !important; 93 | } 94 | 95 | .antex.display { 96 | display: flex; 97 | padding: 1em; 98 | } 99 | 100 | .antex.display>svg, 101 | .antex.display>img { 102 | margin: 0 auto !important; 103 | } 104 | 105 | ul.toc { 106 | margin-top: 0; 107 | } 108 | -------------------------------------------------------------------------------- /changelog.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: Recent changes 4 | limit: 50 5 | --- 6 | 7 | 52 | 53 | {% if page.commits.size > page.limit %} 54 | These are the last {{ page.limit }} of the {{ page.commits.size }} commits involving nodes. 55 | {% endif %} 56 | 57 |
58 | 59 | {% for commit in page.commits limit: page.limit %} 60 | 61 |
62 | 63 | {{ commit.timestamp | date_to_string }} 64 | 65 | 66 | {{ commit.hash | truncate: 7, "" }} 67 | 68 | 69 | {{ commit.subject }} 70 | 71 | {% unless commit.author.hide -%} 72 | by 73 | {% if commit.author.link -%} 74 | {{ commit.author.name }} 75 | {%- else -%} 76 | {{ commit.author.name }} 77 | {%- endif -%} 78 | 79 | {%- endunless %} 80 | 81 |
82 | 83 |
84 | 85 | {% capture commit_list %} 86 | 87 | 105 | 106 | {% endcapture %} 107 | 108 |
109 | Click to (un)fold the list of all {{ commit.diffs.size }} affected nodes. 110 | {{ commit_list }} 111 |
112 | 113 |
114 | 115 | {% endfor %} 116 | 117 |
118 | -------------------------------------------------------------------------------- /deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | bundle exec jekyll build 4 | ./setup-worktree.sh 5 | 6 | rm -rf _deploy/* 7 | cp -rf _site/* _deploy/ 8 | 9 | cd _deploy 10 | git add . 11 | git commit -am "Deploy" 12 | git push -u origin gh-pages 13 | cd .. 14 | 15 | -------------------------------------------------------------------------------- /index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Lectures 4 | --- 5 | 6 | {% for lecture in site.lectures %} 7 | {{lecture.title}} 8 | {% endfor %} 9 | -------------------------------------------------------------------------------- /macros/macro-kit.rkt: -------------------------------------------------------------------------------- 1 | #lang at-exp racket 2 | 3 | (require json) 4 | 5 | (provide raw define-global define-local publish-macro-library target) 6 | (struct macro-repr (name arity inst) #:transparent) 7 | 8 | (define target (make-parameter null)) 9 | 10 | (define (macro-reprs->mathjax-jsexpr reprs) 11 | (parameterize ([target 'mathjax]) 12 | (make-hash 13 | (for/list ([repr reprs]) 14 | (cons 15 | (string->symbol (macro-repr-name repr)) 16 | (list 17 | ((macro-repr-inst repr)) 18 | (macro-repr-arity repr))))))) 19 | 20 | (define (macro-reprs->katex-jsexpr reprs) 21 | (parameterize ([target 'katex]) 22 | (make-hash 23 | (for/list ([repr reprs]) 24 | (cons 25 | (string->symbol (string-append "\\" (macro-repr-name repr))) 26 | ((macro-repr-inst repr))))))) 27 | 28 | (define (write-macro-repr-latex repr port) 29 | (parameterize ([target 'latex]) 30 | (display "\\newcommand\\" port) 31 | (display (macro-repr-name repr) port) 32 | (when (> (macro-repr-arity repr) 0) 33 | (display "[" port) 34 | (display (macro-repr-arity repr) port) 35 | (display "]" port)) 36 | (display "{" port) 37 | (display ((macro-repr-inst repr)) port) 38 | (displayln "}" port))) 39 | 40 | (define macro-set (make-parameter (mutable-set))) 41 | 42 | (define (macro-list) 43 | (define (lt? repr1 repr2) 44 | (string-cilist (macro-set)) lt?)) 47 | 48 | (define (render-macros-to-tex filename) 49 | (call-with-output-file filename #:exists 'replace 50 | (λ (port) 51 | (for ([repr (in-list (macro-list))]) 52 | (write-macro-repr-latex repr port))))) 53 | 54 | (define (render-macros-to-mathjax filename) 55 | (define macros (macro-list)) 56 | (call-with-output-file filename #:exists 'replace 57 | (λ (port) 58 | (write-json (macro-reprs->mathjax-jsexpr macros) port)))) 59 | 60 | (define (render-macros-to-katex filename) 61 | (define macros (macro-list)) 62 | (call-with-output-file filename #:exists 'replace 63 | (λ (port) 64 | (write-json (macro-reprs->katex-jsexpr macros) port)))) 65 | 66 | (define (publish-macro-library sym) 67 | (define (filename ext) 68 | (string-append "../assets/macros/" (symbol->string sym) "." ext)) 69 | (render-macros-to-tex (filename "sty")) 70 | (render-macros-to-mathjax (filename "mathjax.json")) 71 | (render-macros-to-katex (filename "katex.json"))) 72 | 73 | (define (index a b) 74 | (let [(tail (member a (reverse b)))] 75 | (and tail (length (cdr tail))))) 76 | 77 | (define-syntax id->string 78 | (lambda (stx) 79 | (syntax-case stx () 80 | ((_ id) 81 | (identifier? #'id) 82 | (datum->syntax #'id (symbol->string (syntax->datum #'id))))))) 83 | 84 | 85 | (define (name-arg arg args) 86 | (string-append 87 | "#" 88 | (number->string (+ 1 (index arg args))))) 89 | 90 | (define (raw . args) 91 | (string-append* args)) 92 | 93 | (define-syntax-rule (define-local (id arg ...) bdy ...) 94 | (begin 95 | (define (id arg ...) (raw bdy ...)))) 96 | 97 | (define-syntax-rule (define-global (id arg ...) bdy ...) 98 | (begin 99 | (define (id arg ...) (raw bdy ...)) 100 | (let* 101 | ([name (id->string id)] 102 | [args (list (syntax->datum #'arg) ...)] 103 | [arity (length args)] 104 | [inst 105 | (let ([arg (name-arg (syntax->datum #'arg) args)] ...) 106 | (thunk (raw bdy ...)))]) 107 | (set-add! (macro-set) (macro-repr name arity inst))))) 108 | -------------------------------------------------------------------------------- /macros/topos.rkt: -------------------------------------------------------------------------------- 1 | #lang at-exp racket 2 | 3 | (require "macro-kit.rkt") 4 | 5 | (define-global (Sub x) 6 | "_{" x "}") 7 | (define-global (Sup x) 8 | "^{" x "}") 9 | 10 | (define-global (BoldSymbol x) 11 | (match (target) 12 | ['katex @raw{\pmb{@x}}] 13 | [_ @raw{\boldsymbol{@x}}])) 14 | 15 | (define-local (ShSymbol) 16 | (BoldSymbol @raw{\mathcal{S}})) 17 | 18 | (define-local (GlSymbol) 19 | (BoldSymbol @raw{\mathcal{G}})) 20 | 21 | (define-local (FamSymbol) 22 | (BoldSymbol @raw{\mathcal{F}})) 23 | 24 | (define-global (Con x) 25 | @raw{\mathsf{@x}}) 26 | 27 | (define-global (Sh X) 28 | (ShSymbol) 29 | (Sub X)) 30 | 31 | (define-global (GL X) 32 | (GlSymbol) 33 | (Sub X)) 34 | 35 | (define-global (Gl x) 36 | (Con "gl") 37 | (Sub x)) 38 | 39 | (define-local (overline x) 40 | @raw{\overline{@x}}) 41 | 42 | (define-global (OpGL x) 43 | (overline (GlSymbol)) 44 | (Sub x)) 45 | 46 | (define-global (OpGl x) 47 | (overline (Con "gl")) 48 | (Sub x)) 49 | 50 | (define-global (OpCat C) 51 | C (Sup (Con "o"))) 52 | 53 | (define-global (TotOpCat C) 54 | C (Sup @raw{\tilde{@(Con "o")}})) 55 | 56 | (define-global (Cod C) 57 | (Con "cod") 58 | (Sub C)) 59 | 60 | (define-local (bold kwd) 61 | @raw{\mathbf{@kwd}}) 62 | 63 | (define-global (PCartGU) 64 | (bold "GU") 65 | (Sub @raw{\textit{pcart}})) 66 | 67 | (define-global (CartGU) 68 | (bold "GU") 69 | (Sub @raw{\textit{cart}})) 70 | 71 | (define-global (AlgGU) 72 | (bold "GU") 73 | (Sub @raw{\textit{alg}})) 74 | 75 | (define-global (LogGU) 76 | (bold "GU") 77 | (Sub @raw{\textit{log}})) 78 | 79 | 80 | 81 | (define-global (TOP E) 82 | (bold "Top") 83 | (Sub E)) 84 | 85 | (define-global (Idn x) 86 | "1" (Sub x)) 87 | 88 | (define-global (TotCat E) 89 | @raw{\widetilde{@E}}) 90 | 91 | (define-global (SelfIx B) 92 | @raw{\underline{@B}}) 93 | 94 | (define-global (Sl E e) 95 | E (Sub @raw{/@e})) 96 | 97 | (define-global (CoSl e E) 98 | E (Sup @raw{\setminus @e})) 99 | 100 | 101 | (define-global (InvImg f) 102 | f (Sup @raw{*})) 103 | (define-global (DirImg f) 104 | f (Sub @raw{*})) 105 | 106 | (define-global (SET) 107 | (bold "Set")) 108 | 109 | (define-global (FAM cat) 110 | (FamSymbol) (Sub cat)) 111 | 112 | (define-global (CandHom i u v) 113 | (bold "H") (Sub i) "(" u "," v ")") 114 | 115 | (define-global (brc x) 116 | @raw{\{ @x \}}) 117 | 118 | (define-global (gl x) 119 | @raw{\langle @x \rangle}) 120 | 121 | (define-global (brk x) 122 | @raw{[@x]}) 123 | 124 | (define-global (prn x) 125 | @raw{(@x)}) 126 | 127 | (define-global (FullSubfib u) 128 | (bold "Full") (prn u)) 129 | 130 | (define-global (tick) 131 | @raw{'}) 132 | 133 | (define-global (ObjTerm E) 134 | (bold "1") (Sub E)) 135 | 136 | (publish-macro-library 'topos) 137 | -------------------------------------------------------------------------------- /mint-node.rkt: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env racket 2 | #lang racket 3 | 4 | (require racket/runtime-path) 5 | (require left-pad) 6 | 7 | (define-runtime-path NODE_DIR "_nodes/") 8 | 9 | (define (path-remove-extension path) 10 | (path-replace-extension path #"")) 11 | 12 | (define (node-path->uid-string path) 13 | (path->string (path-remove-extension path))) 14 | 15 | (define DIGIT_TABLE 16 | (string->list "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")) 17 | 18 | (define BASE 19 | (length DIGIT_TABLE)) 20 | 21 | (define (uid-string->int uid) 22 | (define digits (string->list uid)) 23 | (for/fold ([sum 0] 24 | [place 1] 25 | #:result sum) 26 | ([x (in-list (reverse digits))]) 27 | (values 28 | (+ sum (* place (index-of DIGIT_TABLE x))) 29 | (* BASE place)))) 30 | 31 | (define (int->uid-string ix) 32 | (do ([digits 33 | (list) 34 | (cons (list-ref DIGIT_TABLE (modulo n BASE)) digits)] 35 | [n ix (quotient n BASE)]) 36 | ((<= n 0) 37 | (left-pad (list->string digits) 4 "0")))) 38 | 39 | (define (node-path->int path) 40 | (uid-string->int (node-path->uid-string path))) 41 | 42 | (define (uid-committed? uid-string) 43 | (not (string-prefix? uid-string "_"))) 44 | 45 | (define all-committed-uids 46 | (filter 47 | uid-committed? 48 | (map 49 | node-path->uid-string 50 | (directory-list NODE_DIR)))) 51 | 52 | (define next-uid-string 53 | (int->uid-string 54 | (+ 1 55 | (apply max (map uid-string->int all-committed-uids))))) 56 | 57 | (printf "Next node: ~a\n" next-uid-string) 58 | -------------------------------------------------------------------------------- /setup-worktree.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | rm -rf _deploy 4 | git worktree prune 5 | git worktree add -B gh-pages _deploy origin/gh-pages 6 | --------------------------------------------------------------------------------