In this thesis I lift the Curry-Howard-Lambek correspondence between the simply-typed lambda calculus and cartesian closed categories to the bicategorical setting, then use the resulting type theory to prove a coherence result for cartesian closed bicategories. Cartesian closed bicategories-2-categories 'up to isomorphism' equipped with similarly weak products and exponentials-arise in logic, categorical algebra, and game semantics. However, calculations in such bicategories quickly fall into a quagmire of coherence data. I show that there is at most one 2-cell between any parallel pair of 1-cells in the free cartesian closed bicategory on a set and hence-in terms of the difficulty of calculating-bring the data of cartesian closed bicategories down to the familiar level of cartesian closed categories. viii corresponding categories. Broadly speaking, this is the what I do in this thesis: I construct a type theory, show it corresponds to a special class of categories, and then-by proving something about the type theory-solve a problem about the class of categories.The problem is called coherence. The special categories I work with-the 'cartesian closed bicategories' of the title-have uses in other areas of category theory, as well as in algebra and in the study of programming languages, but they are intricate. As well as the ways of getting from A to B, they include the routes between these routes. Imagine A and B are Cambridge and Oxford. Then the routes between them might be walking directions for the various routes, and the routes-between-routes might be the ways you can change one set of directions into the other: change 'left' for 'right' at this junction, replace '100 yards' with '2 miles', and so on. Or you can imagine studying programs, and the ways of transforming them stage-by-stage into something that you can run in 0s and 1s on your hardware. In this example, you might have two programs with the same input type and the same output type-such as those in (1) above-and think about the ways of transforming one into another: replacing yˆ6 3 by y ˆ2, and x 2 ˆ2 by just x, and so on. Precisely describing these two levels, and the ways they must interact, requires many axioms and many checks at every stage of a calculation. This quickly becomes tedious, and leads to proofs that are so long it is hard to check they are correct, let alone fit them onto a page so that they can be verified by the community. In this thesis I show that cartesian closed bicategories have the property that any equation you can write down for any cartesian closed bicategory (not relying on any special properties of a specific one) must hold. This means that those long tedious calculations are dramatically simplified: all those things that you had to check before are now guaranteed to hold by the theorem.In Part I, then, I construct a type theory for describing cartesian closed bicategories. If a type theory is a logic for programs, this is a logic for programs and ways of transforming programs into one another. I show that expressions i...