TheHoTTGame/0Trinitarianism/Quest3.md
2021-08-16 18:30:34 +01:00

3.3 KiB
Raw Blame History

Pi Types

We will try to formulate and prove the statement

The sum of two even naturals is even.

Defining Addition 

To do so we must define + on the naturals. Addition takes in two naturals and spits out a natural, so it should have type .

_+_ :     
n + m = ?

Try coming up with a sensible definition. It may not look 'the same' as ours.

Hint

n + 0 should be n and n + (m + 1) should be (n + m) + 1

The Statement

Now we can make the statement:

SumOfEven : (x : Σ  isEven)  (y : Σ  isEven)  isEven (x .fst + y .fst)
SumOfEven x y = ?

Tip: x .fst is another notation for fst x. This works for all sigma types. There are three ways to interpret this:

  • For all even naturals x and y, their sum is even.
  • isEven (x .fst + y .fst) is a construction depending on two recipes x and y. Given two recipes x and y of Σ isEven, we break them down into their first components, apply the conversion _+_, and form a recipe for isEven of the result.
  • isEven (_ .fst + _ .fst) is a bundle over the categorical product Σ isEven × Σ isEven and SumOfEven is a section of the bundle.

More generally given A : Type and B : A → Type we can form the pi type (x : A) → B x : Type (in other languages Π (x : ), isEven n). The notation suggests that these behave like functions, and indeed in the special case where the fiber is constant with respect to the base space a section is just a term of type A → B, i.e. a function. Hence pi types are also known as dependent function types.

We are now in a position to prove the statement. Have fun!

Remarks

Important: Once you have proven the statement, check out our two ways of defining addition _+_ and _+'_ (in the solutions).

  • Use C-c C-n to check that they compute the same values on different examples.
  • Uncomment the code for Sum'OfEven in the solutions. It is just SumOfEven but with +s changed for +'s.
  • Load the file. Does the proof still work?

Our proof SumOfEven relied on the explicit definition of _+_, which means if we wanted to use our proof on someone else's definition of addition, it might not work anymore.

But _+_ and _+'_ compute the same values. Are _+_ and _+'_ 'the same'? What is 'the same'?

Another Task : Decidability of isEven

As the final task of the Quest, try to express and prove in agda the statement

For any natural number it is even or is is not even. We will make a summary of what is needed:

  • a definition of the type A ⊕ B (input \oplus), which has three interpretations
    • the proposition 'A or B'
    • the construction with two ways of making recipes left : A → A ⊕ B and right : B → A ⊕ B.
    • the coproduct of two objects A and B. The type needs to take in parameters A : Type and B : Type
    data _⊕_ (A : Type) (B : Type) : Type where
      ???
    
  • a definition of negation. One can motivate it by the following
    • Define A ↔ B : Type for two types A : Type and B : Type.
    • Show that for any A : Type we have (A ↔ ⊥) ↔ (A → ⊥)
    • Define ¬ : Type → Type to be λ A → (A → ⊥).
  • a formulation and proof of the statement above