module checksize where
{-
Lecture 5: how big is the derivation that the deduction theorem builds?
A closed element of nil ⊢ X is a finite TREE of var/axK/axS/mp, so
we can simply count its nodes with a function size defined by
structural recursion. Evaluating size d normalises d first, so
this measures the NORMAL FORM of the derivation.
Each theorem below is proved twice: once via the deduction theorem
(dedcor2, dedW, dedcor4, dedcor5, dedcor6) and once directly, placing
S and K by hand (flipImp, wImp, compImp, constImp, applyImp).
theorem direct via dedthm nestings
--------------------------- ------ ---------- --------
flip (X=>Y=>Z)=>Y=>X=>Z 19 161 3
W (X=>X=>Y)=>X=>Y 11 59 2
comp (A=>B)=>(B=>C)=>A=>C 27 161 3
const A=>B=>C=>A 7 29 3
apply A=>(A=>B)=>B 25 35 2
The table is checked by the ten equations at the end of this file:
they typecheck only if the numbers are right.
-}
open import deduction
{-# BUILTIN NATURAL Nat #-}
size : {G : context} -> {X : Form} -> G ⊢ X -> Nat
size (var x) = 1
size axK = 1
size axS = 1
size (mp d1 d2) = suc (size d1 + size d2)
A0 A1 A2 : Form
A0 = atom 0
A1 = atom 1
A2 = atom 2
-- flip
t1 : Id Nat (size (flipImp {nil} {A0} {A1} {A2})) 19
t1 = refl 19
t2 : Id Nat (size (dedcor2 {nil} {A0} {A1} {A2})) 161
t2 = refl 161
-- W (contraction)
t3 : Id Nat (size (wImp {nil} {A0} {A1})) 11
t3 = refl 11
t4 : Id Nat (size (dedW {nil} {A0} {A1})) 59
t4 = refl 59
-- composition
t5 : Id Nat (size (compImp {nil} {A0} {A1} {A2})) 27
t5 = refl 27
t6 : Id Nat (size (dedcor4 {nil} {A0} {A1} {A2})) 161
t6 = refl 161
-- constant
t7 : Id Nat (size (constImp {nil} {A0} {A1} {A2})) 7
t7 = refl 7
t8 : Id Nat (size (dedcor5 {nil} {A0} {A1} {A2})) 29
t8 = refl 29
-- apply
t9 : Id Nat (size (applyImp {nil} {A0} {A1})) 25
t9 = refl 25
t10 : Id Nat (size (dedcor6 {nil} {A0} {A1})) 35
t10 = refl 35