TheHoTTGame/Trinitarianism/Quest0.md
2021-07-30 12:22:22 +01:00

5.8 KiB
Raw Blame History

Terms and Types

There are three ways of looking at A : Type.

  • proof theoretically, 'A is a proposition'
  • type theoretically, 'A is a construction'
  • categorically, 'A is an object in category Type'

A first example of a type construction is the function type. Given types A : Type and B : Type, we have another type A → B : Type which can be seen as

  • the proposition 'A implies B'
  • the construction 'ways to convert A recipes to B recipes'
  • internal hom of the category Type

To give examples of this, let's make some types first! Here is how we define 'true'.

data  : Type where
  tt : 

It reads ' is an inductive type with a constructor tt', with three interpretations

  • is a proposition and there is a proof of it, called tt.
  • is a construction with a recipe called tt
  • is a terminal object: every object has a morphism into given by · ↦ tt

In general, the expression a : A is read 'a is a term of type A', and has three interpretations,

  • a is a proof of the proposition A
  • a is a recipe for the construction A
  • a is a generalised element of the object A in the category Type.

The above tells you how we make a term of type . Let's see an example of using a term of type :

TrueToTrue :   
TrueToTrue = {!!}
  • enter C-c C-l (this means Ctrl-c Ctrl-l) to load the document, and now you can fill the hole { }
  • navigate to the hole { } using C-c C-f (forward) or C-c C-b (backward)
  • enter C-c C-r and agda will try to help you (r stands for refine)
  • you should see λ x → { }. This is agda's notation for x ↦ { } and is called λ abstraction, λ for 'let'.
  • navigate to the new hole
  • enter C-c C-, to check the goal (C-c C-comma)
  • the Goal area ('agda information' window) should look like
Goal: 
—————————————————————————
x : 
  • you have a proof/recipe/generalized element x : and you need to give a proof/recipe/generalized element of
  • you can give it a proof/recipe/generalized element of and press C-c C-SPC to fill the hole (SPC means the space button)

There is more than one proof (see solutions) - are they 'the same'? What is 'the same'?

Here is an important solution:

TrueToTrue' :   
TrueToTrue' x = {!!}
  • Naviagate to the hole and check the goal.
  • Note x is already taken out for you.
  • You can try type x in the hole and C-c C-c
  • c stands for 'cases'. Doing C-c C-c with x in the hole tells agda to 'do cases on x'. The only case is tt.

Built into the definition of is agda's way of making a map out of into another type A, which we have just used. It says 'to map out of it suffices to do the case when x is tt', or

  • the only proof of is tt
  • the only recipe for is tt
  • the only one generalized element tt in

Let's define another type.


data  : Type u where

It reads ' is an inductive type with no constructors', with three interepretations

  • is a proposition with no proofs
  • is a construction with no recipes
  • There are no generalized elements of (it is a strict initial object)

Let's try mapping out of .

explosion :   
explosion x = {!!}
  • Navigate to the hole and do cases on x.

Agda knows that there are no cases so there is nothing to do! This has three interpretations:

  • false implies anything (principle of explosion)
  • One can convert recipes of to recipes of any other construction since there are no recipes of .
  • is initial in the category Type

We can also encode "natural numbers" as a type.

data  : Type where
  zero : 
  suc :   

As a construction, this reads :

  • is a type of construction
  • zero is a recipe for
  • suc takes an existing recipe for and gives another recipe for .

We can also see categorically : is a natural numbers object in the category Type. This means it is equipped with morphisms zero : and suc : such that given any → A → A there exist a unique morphism → A such that the diagram commutes: nno

has no interpretation as a proposition since there are 'too many proofs' - mathematicians classically don't distinguish between proofs of a single proposition. (ZFC doesn't even mention logic internally, unlike Type Theory!)

To see how to use terms of type , i.e. induction on , go to Quest1!

Universes

You may have noticed the notational similarities between zero : and : Type. This may have lead you to the question, Type : ?. In type theory, we simply assert Type : Type₁. But then we are chasing our tail, asking Type₁ : Type₂. Type theorists make sure that every type (i.e. anything the right side of :) itself is a term (i.e. anything on the left of :), and every term has a type. So what we really need is

Type : Type₁, Type₁ : Type₂, Type₂ : Type₃, ⋯

These are called universes. The numberings of universes are called levels. We will start using universes in the next quest.