User:Michiexile/MATH198/Lecture 10
From HaskellWiki
Michiexile (Talk | contribs) |
Michiexile (Talk | contribs) |
||
Line 35: | Line 35: | ||
Since a topos is closed, we can take exponentials. Specifically, we can consider <math>[A\to\Omega]</math>. This is an object such that <math>hom(B,[A\to\Omega]) = hom(A\times B, \Omega) = Sub(A\times B)</math>. Hence, we get an internal version of the subobject functor. (pick <math>B</math> to be the terminal object to get a sense for how global elements of <math>[A\to\Omega]</math> correspond to subobjects of <math>A</math>) |
Since a topos is closed, we can take exponentials. Specifically, we can consider <math>[A\to\Omega]</math>. This is an object such that <math>hom(B,[A\to\Omega]) = hom(A\times B, \Omega) = Sub(A\times B)</math>. Hence, we get an internal version of the subobject functor. (pick <math>B</math> to be the terminal object to get a sense for how global elements of <math>[A\to\Omega]</math> correspond to subobjects of <math>A</math>) |
||
− | |||
− | ((universal property of power object?)) |
||
====Internal logic==== |
====Internal logic==== |
||
Line 57: | Line 55: | ||
:<math>\{x : (P \vee Q)(x)\} = \{x : P(x)\} \cup \{x : Q(x)\}</math> |
:<math>\{x : (P \vee Q)(x)\} = \{x : P(x)\} \cup \{x : Q(x)\}</math> |
||
:<math>\{x\in A : (\neg P)(x) \} = A \setminus \{x\in A : P(x)\}</math> |
:<math>\{x\in A : (\neg P)(x) \} = A \setminus \{x\in A : P(x)\}</math> |
||
− | :<math>\{x : \exists y. P(x,y) \}</math> is given by the construction (...) |
||
− | :<math>\{x : \forall y. P(x,y) \}</math> is given by the construction (...) |
||
− | |||
We could then start to define primitive logic connectives as set operations; the intersection of two sets is the set on which '''both''' the corresponding predicates hold true, so <math>\wedge = \cap</math>. Similarily, the union of two sets is the set on which either of the corresponding predicates holds true, so <math>\vee = \cup</math>. The complement of a set, in the universe, is the negation of the predicate, and all other propositional connectives (implication, equivalence, ...) can be built with conjunction (and), disjunction (or) and negation (not). |
We could then start to define primitive logic connectives as set operations; the intersection of two sets is the set on which '''both''' the corresponding predicates hold true, so <math>\wedge = \cap</math>. Similarily, the union of two sets is the set on which either of the corresponding predicates holds true, so <math>\vee = \cup</math>. The complement of a set, in the universe, is the negation of the predicate, and all other propositional connectives (implication, equivalence, ...) can be built with conjunction (and), disjunction (or) and negation (not). |
||
Line 69: | Line 64: | ||
A ''predicate'' is a subobject of the universe. |
A ''predicate'' is a subobject of the universe. |
||
− | Given predicates <math>P, Q</math>, we define the ''conjunction'' <math>P\wedge Q</math> to be the pullback (pushout?) |
||
− | :[[Image:ToposConjunction.png]] |
||
− | This mimics, closely, the idea of the conjunction as an intersection. |
+ | '''Conjunction''': |
+ | Given predicates <math>P, Q</math>, we need to define the ''conjunction'' <math>P\wedge Q</math> as some <math>P\wedge Q: U\to\Omega</math> that corresponds to both <math>P</math> and <math>Q</math> simultaneously. |
||
+ | |||
+ | We can construct pullback diagrams |
||
+ | :[[Image:ToposConjunctionPart1.png]] [[Image:ToposConjunctionPart2.png]] |
||
+ | in which <math>u = \chi_P\times\chi_Q</math>. Furthermore, the arrow <math>true\times\true: 1\to\Omega\times\Omega</math> is monic, and thus has a classifier <math>\wedge:\Omega\times\Omega\to\Omega</math>. |
||
+ | |||
+ | Now, we define <math>P\wedge Q</math> as the composition <math>\wedge\circ\chi_P\times\chi_Q</math>, and observe that <math>P\wedge Q</math> classifies the intersection <math>P\cap Q</math>. |
||
+ | |||
+ | '''Implication''': |
||
+ | Next we define <math>\leq_1</math> to be the equalizer of <math>\wedge</math> and <math>proj_1</math>. Given <math>v\times w: T\to\Omega\times\Omega</math>, we write <math>v\leq_1 w</math> if <math>v\times w</math> factors through <math>\leq_1</math>. |
||
+ | |||
+ | Using the definition of an equalizer we arrive at <math>v\leq_1 w</math> iff <math>v = v\wedge w</math>. From this, we can deduce |
||
+ | :<math>u\leq_1 true</math> |
||
+ | :<math>u\leq_1 u</math> |
||
+ | :If <math>u\leq_1 v</math> and <math>v\leq_1 w</math> then <math>u\leq_1 w</math>. |
||
+ | :If <math>u\leq_1 v</math> and <math>v\leq_1 u</math> then <math>u=v</math> |
||
+ | and thus, <math>\leq_1</math> is a partial order on <math>[T\to\Omega]</math>. Intuitively, <math>u\leq_1 v</math> if <math>v</math> is at least as true as <math>u</math>. |
||
+ | |||
+ | This relation corresponds to inclusion on subobjects. Note that <math>\leq_1:\Omega_1\to\Omega\times\Omega</math>, given from the equalizer, gives us <math>\Omega_1</math> as a ''relation'' on <math>\Omega</math> - a subobject of <math>\Omega\times\Omega</math>. Specifically, it has a classifying arrow <math>\Rightarrow:\Omega\times\Omega\to\Omega</math>. We write <math>h\Rightarrow k = \Rightarrow\circ h\times k</math>. And for subobjects <math>P,Q\subseteq A</math>, we write <math>P\Rightarrow Q</math> for the subobject classified by <math>\chi_P\Rightarrow\chi_Q</math>. |
||
+ | |||
+ | It turns out, without much work, that this <math>P\Rightarrow Q</math> behaves just like classical implication in its relationship to <math>\wedge</math>. |
||
+ | |||
+ | '''Membership''': |
||
+ | We can internalize the notion of ''membership'' as a subobject <math>\in^A\subseteq A\times\Omega^A</math>, and thus get the membership relation from a pullback: |
||
+ | :[[Image:ToposMembershipPullback.png]] |
||
+ | |||
+ | For generalized elements <math>x\times h: T\to A\times\Omega^A</math>, we write <math>x\in^A h<math> for <math>x\times h\in\in^A</math>. Both notations indicate <math>ev_A\circ h\times x = true</math>. |
||
+ | |||
+ | '''Universal quantification''': |
||
+ | For any object <math>A</math>, the maximal subobject of <math>A</math> is <math>A</math> itself, embedded with <math>1_A</math> into itself. Thus, we have an arrow <math>t_A:1\to\Omega^A</math> representing this subobject. Being a map from <math>1</math>, it is specifically monic, so it has a classifying arrow <math>\forall_A:\Omega^A\to\Omega</math> that takes a given subobject of <math>A</math> to <math>true</math> precisely if it is in fact the maximal subobject. |
||
+ | |||
+ | Now, with a relation <math>r:R\to B\times A</math>, we define <math>\forall a. R</math> by the following pullback: |
||
+ | :[[Image:ToposForallPullback.png]] |
||
+ | where <math>\lambda\chi_r</math> comes from the universal property of the exponential. |
||
+ | |||
+ | '''Theorem''' For any <math>s:S\to B</math> monic, <math>S\subseteq \forall a.R</math> iff <math>S\times A\subseteq R</math>. |
||
+ | |||
+ | This theorem tells us that the subobject given by <math>\forall a.R</math> is the largest subobject of <math>B</math> that is related by <math>R</math> to all of <math>A</math>. |
||
+ | |||
+ | '''Falsum''': |
||
+ | We can define the ''false'' truth value using these tools as <math>\forall w\in\Omega.w</math>. This might be familiar to the more advanced Haskell type hackers - as the type |
||
+ | <haskell> |
||
+ | x :: forall a. a |
||
+ | </haskell> |
||
+ | which has to be able to give us an element of any type, regardless of the type itself. And in Haskell, the only element that inhabits all types is <hask>undefined</hask>. |
||
+ | |||
+ | From a logical perspective, we use a few basic inference rules: |
||
+ | :[[Image:ToposTrivialSequent.png]] [[Image:ToposForallConnective.png]] [[Image:ToposSubstitution.png]] |
||
+ | and connect them up to derive |
||
+ | :<math>*</math> |
||
+ | :<math>\forall w.w : \forall w.w</math> |
||
+ | :<math>\forall w.w : w</math> |
||
+ | :<math>\forall w.w : \phi</math> |
||
+ | for any <math>\phi</math> not involving <math>w</math> - and we can always adjust any <math>\phi</math> to avoid <math>w</math>. |
||
+ | |||
+ | Thus, the formula <math>\forall w.w</math> has the property that it implies everything - and thus is a good candidate for the ''false'' truth value; since the inference |
||
+ | :[[Image:ToposExFalsoQuodlibet.png]] |
||
+ | is the defining introduction rule for false. |
||
+ | |||
+ | |||
+ | '''Negation''': |
||
+ | We define negation the same way as in classical logic: <math>\neg \phi = \phi \Rightarrow false</math>. |
||
− | We further define the ''disjunction'' <math>P\vee Q</math> to be the pushout (pullback?) |
||
− | :[[Image:ToposDisjunction.png]] |
||
− | And we define ''negation'' <math>\neg P</math> by (...) |
+ | '''Disjunction''': |
+ | We can define |
||
+ | :<math>P\vee Q = \forall w. ((\phi\Rightarrow w)\wedge(\psi\Rightarrow w))\Rightarrow w</math> |
||
− | We can expand this language further - and introduce predicative connectives. |
+ | Note that this definition uses one of our primary inference rules: |
+ | :[[Image:ToposDisjunctionConnective.png]] |
||
+ | as the defining property for the disjunction, and we may derive any properties we like from these. |
||
− | Now, a statement on the form <math>\forall x. P(x)</math> is usually taken to mean that on all <math>x\in U</math>, the predicate <math>P</math> holds true. Thus, translating to the operations-on-subsets paradigm, <math>\forall x. P(x)</math> corresponds to the statement <math>P = U</math>. |
+ | '''Existential quantifier''': |
+ | Finally, the existential quantifier is derived similarly to the disjunction - by figuring out a rule we want it to obey, and using that as a definition for it: |
||
+ | :<math>\exists x.\phi = \forall w. (\forall x. \phi \Rightarrow w)\Rightarrow w</math> |
||
− | ((double check in Awodey & Barr-Wells!!!!)) |
+ | Here, the rule we use as defining property is |
+ | :[[Image:ToposExistentsConnective.png]] |
||
− | So we can define a topoidal <math>\forall x. P(x)</math> by ((diagrams)) |
+ | Before we leave this exploration of logic, some properties worth knowing about: |
+ | While we can prove <math>\neg(\phi\wedge\neg\phi)</math> and <math>\phi\Rightarrow\neg\neg\phi</math>, we cannot, in just topos logic, prove things like |
||
+ | :<math>\neg(\phi\wedge\psi)\Rightarrow(\neg\phi\vee\neg\psi)</math> |
||
+ | :<math>\neg\neg\phi\Rightarrow\phi</math> |
||
+ | nor any statements like |
||
+ | :<math>\neg(\forall x.\neg\phi)\Rightarrow(\exists x.\phi)</math> |
||
+ | :<math>\neg(\forall x.\phi)\Rightarrow(\exists x.\neg\phi)</math> |
||
+ | :<math>\neg(\exists x.\neg\phi)\Rightarrow(\forall x.\phi)</math> |
||
+ | We can, though, prove |
||
+ | :<math>\neg(\exists x.\phi)\Rightarrow(\forall x.\neg\phi)</math> |
||
− | And similarily, the statement <math>\exists x. P(x)</math> means that <math>P</math> is non-empty. |
+ | If we include, extra, an additional inference rule (called the ''Boolean negation rule'') given by |
+ | :[[Image:BooleanNegation.png]] |
||
+ | then suddenly we're back in classical logic, and can prove <math>\neg\neg\phi\Rightarrow\phi</math> and <math>\phi\or\neg\phi</math>. |
||
====Examples==== |
====Examples==== |
Revision as of 17:05, 24 November 2009
IMPORTANT NOTE: THESE NOTES ARE STILL UNDER DEVELOPMENT. PLEASE WAIT UNTIL AFTER THE LECTURE WITH HANDING ANYTHING IN, OR TREATING THE NOTES AS READY TO READ.
This lecture will be shallow, and leave many things undefined, hinted at, and is mostly meant as an appetizer, enticing the audience to go forth and seek out the literature on topos theory for further studies.
Contents |
1 Subobject classifier
One very useful property of the category Set is that the powerset of a given set is still a set; we have an internal concept of object of all subobjects. Certainly, for any category (small enough) C, we have a contravariant functor taking an object to the set of all equivalence classes of monomorphisms into that object; with the image Sub(f) given by the pullback diagram
If the functor Sub( − ) is representable - meaning that there is some object such that Sub( − ) = hom( − ,X) - then the theory surrounding representable functors, connected to the Yoneda lemma - give us a number of good properties.
One of them is that every representable functor has a universal element; a generalization of the kind of universal mapping properties we've seen in definitions over and over again during this course; all the definitions that posit the unique existence of some arrow in some diagram given all other arrows.
Thus, in a category with a representable subobject functor, we can pick a representing object , such that Sub(X) = hom(X,Ω). Furthermore, picking a universal element corresponds to picking a subobject such that for any object A and subobject , there is a unique arrow such that there is a pullback diagram
One can prove that Ω_{0} is terminal in C, and we shall call Ω the subobject classifier, and this arrow true. The arrow χ is called the characteristic arrow of the subobject.
In Set, all this takes on a familiar tone: the subobject classifier is a 2-element set, with a true element distinguished; and a characteristic function of a subset takes on the true value for every element in the subset, and the other (false) value for every element not in the subset.
2 Defining topoi
Definition A topos is a cartesian closed category with all finite limits and with a subobject classifier.
It is worth noting that this is a far stronger condition than anything we can even hope to fulfill for the category of Haskell types and functions. The functional proogramming relevance will take a back seat in this lecture, in favour of usefulness in logic and set theory replacements.
3 Properties of topoi
The meat is in the properties we can prove about topoi, and in the things that turn out to be topoi.
Theorem Let E be a topos.
- E has finite colimits.
3.1 Power object
Since a topos is closed, we can take exponentials. Specifically, we can consider . This is an object such that . Hence, we get an internal version of the subobject functor. (pick B to be the terminal object to get a sense for how global elements of correspond to subobjects of A)
3.2 Internal logic
We can use the properties of a topos to develop a logic theory - mimicking the development of logic by considering operations on subsets in a given universe:
Classically, in Set, and predicate logic, we would say that a predicate is some function from a universe to a set of truth values. So a predicate takes some sort of objects, and returns either True or False.
Furthermore, we allow the definition of sets using predicates:
Looking back, though, there is no essential difference between this, and defining the predicate as the subset of the universe directly; the predicate-as-function appears, then, as the characteristic function of the subset. And types are added as easily - we specify each variable, each object, to have a set it belongs to.
This way, predicates really are subsets. Type annotations decide which set the predicate lives in. And we have everything set up in a way that open sup for the topos language above.
We'd define, for predicates P,Q acting on the same type:
We could then start to define primitive logic connectives as set operations; the intersection of two sets is the set on which both the corresponding predicates hold true, so . Similarily, the union of two sets is the set on which either of the corresponding predicates holds true, so . The complement of a set, in the universe, is the negation of the predicate, and all other propositional connectives (implication, equivalence, ...) can be built with conjunction (and), disjunction (or) and negation (not).
So we can mimic all these in a given topos:
We say that a universe U is just an object in a given topos.
A predicate is a subobject of the universe.
Conjunction:
Given predicates P,Q, we need to define the conjunction as some that corresponds to both P and Q simultaneously.
We can construct pullback diagrams
in which . Furthermore, the arrow Failed to parse (unknown function\true): true\times\true: 1\to\Omega\times\Omega
is monic, and thus has a classifier .
Now, we define as the composition , and observe that classifies the intersection .
Implication: Next we define to be the equalizer of and proj_{1}. Given , we write if factors through .
Using the definition of an equalizer we arrive at iff . From this, we can deduce
- If and then .
- If and then u = v
and thus, is a partial order on . Intuitively, if v is at least as true as u.
This relation corresponds to inclusion on subobjects. Note that , given from the equalizer, gives us Ω_{1} as a relation on Ω - a subobject of . Specifically, it has a classifying arrow . We write . And for subobjects , we write for the subobject classified by .
It turns out, without much work, that this behaves just like classical implication in its relationship to .
Membership: We can internalize the notion of membership as a subobject , and thus get the membership relation from a pullback:
For generalized elements , we write . Both notations indicate .
Universal quantification: For any object A, the maximal subobject of A is A itself, embedded with 1_{A} into itself. Thus, we have an arrow representing this subobject. Being a map from 1, it is specifically monic, so it has a classifying arrow that takes a given subobject of A to true precisely if it is in fact the maximal subobject.
Now, with a relation , we define by the following pullback:
where λχ_{r} comes from the universal property of the exponential.
Theorem For any monic, iff .
This theorem tells us that the subobject given by is the largest subobject of B that is related by R to all of A.
Falsum: We can define the false truth value using these tools as . This might be familiar to the more advanced Haskell type hackers - as the type
x :: forall a. a
From a logical perspective, we use a few basic inference rules:
and connect them up to derive
- *
for any φ not involving w - and we can always adjust any φ to avoid w.
Thus, the formula has the property that it implies everything - and thus is a good candidate for the false truth value; since the inference
is the defining introduction rule for false.
Negation:
We define negation the same way as in classical logic: .
Disjunction:
We can define
Note that this definition uses one of our primary inference rules:
as the defining property for the disjunction, and we may derive any properties we like from these.
Existential quantifier: Finally, the existential quantifier is derived similarly to the disjunction - by figuring out a rule we want it to obey, and using that as a definition for it:
Here, the rule we use as defining property is
Before we leave this exploration of logic, some properties worth knowing about: While we can prove and , we cannot, in just topos logic, prove things like
nor any statements like
We can, though, prove
If we include, extra, an additional inference rule (called the Boolean negation rule) given by
then suddenly we're back in classical logic, and can prove and .
3.3 Examples
3.4 Sheaves, topology and time sheaves
4 Exercises
No homework at this point. However, if you want something to think about, a few questions and exercises:
- blah