§ Simple Type Theory via Fibrations

• Objects are contexts, so sequence of (term:type)
• Morphisms between contents Γ = (v1:s1, v2:s2) and Δ = (w1:t1, w2:t2)are terms M1, M2 such that we have Γ |- M1 : t1 and Γ |- M2 : t2.
• More cleaned up, for a context Γ, and a context Δ with sequence of types (_:t1, _:t2, ..., _:tn), a morphism is a sequence of terms Γ|- M1: t1, Γ|- M2:t2, ..., Γ|-Mn:tn.
• For concreteness, let us suppose Δ = (w1:t1, w2: t2)
• The identity morphism is Δ -(d1, d2)-> Δ, since we have d1 := w1:t1, w2:t2|-w1:t1 and d2 := w1:t1, w2:t2|-w2:t2. Thus, starting from Δ on the context, we can derive terms of types t1, t2, which are given by the derivations d1, d2.
• Let us meditate on composition Γ -(d1, d2)-> Δ -(d1', d2')-> Θ. First off, let us write this more explicitly as:
Γ

(d1 := Γ|-M1:s1, d2 := Γ|-M2:s2)

Δ := (x1:s1, x2:s2)

(d'1 := Δ|-N1:t1, d2 := Δ|-N2:t2)

Θ := (_:t1, _:t2)

• See that have (x1:s1, x2:s2)|- N1 : t1
• If we substitute N1[x1 := M1, x2 := M2], then under context Γ, we know that M1:s1, and M2:s2, so they have the correct types to be substituted for x1 and x2. Thus, in context Γ, N1[x1 := M1, x2 := M2]has the same type it used to have (t1).
• Thus we have that Γ |- N1[x1 := M1, x2 := M2] : t1.
• This gives us the composite of the section of the morhphisms, by telling us how to compose d'1 with d1.
• Do the same for d2.
• What the hell is going on anyway?
• Given any well typed term in a context, Γ|-M:t, we can think of this as a morphism Γ --M--> (Δ:=M:t).
• This relative point of view (ala grothendieck) lets us extend to larger contexts.
• The empty context is the terminal object, since there is precisely one morphism, consisting of the empty sequence (). Can be written as Γ-()-> 0.
• The categorical product of contexts is given by sequencing (see that this needs exchange), and the projections are the "obvious" rules: Γ <--Γ-- (Γ;Δ)---Δ--> Δ.