Add definitional transport and congruence combinators derived from Id so equality programming isnt all raw idElim
This commit is contained in:
@@ -74,6 +74,44 @@ def idElimNat : Raw :=
|
||||
(.idElim "y" "p" .nat .zero .zero reflZero)
|
||||
.nat
|
||||
|
||||
def transportNatTy : Raw :=
|
||||
.pi "x" .nat
|
||||
(.pi "y" .nat
|
||||
(.pi "p" (.id .nat (.var "x") (.var "y"))
|
||||
(.pi "z" .nat .nat)))
|
||||
|
||||
def transportNatTm : Raw :=
|
||||
.lam "x" (.lam "y" (.lam "p" (.lam "z"
|
||||
(.idElim "y'" "p'" .nat (.var "z") (.var "y") (.var "p")))))
|
||||
|
||||
def transportNat : Raw := .ann transportNatTm transportNatTy
|
||||
|
||||
def transportNatRefl : Raw :=
|
||||
.ann
|
||||
(.app (.app (.app (.app transportNat .zero) .zero) reflZero) natTwo)
|
||||
.nat
|
||||
|
||||
def congSuccTy : Raw :=
|
||||
.pi "x" .nat
|
||||
(.pi "y" .nat
|
||||
(.pi "p" (.id .nat (.var "x") (.var "y"))
|
||||
(.id .nat (.succ (.var "x")) (.succ (.var "y")))))
|
||||
|
||||
def congSuccTm : Raw :=
|
||||
.lam "x" (.lam "y" (.lam "p"
|
||||
(.idElim "y'" "p'"
|
||||
(.id .nat (.succ (.var "x")) (.succ (.var "y'")))
|
||||
.refl
|
||||
(.var "y")
|
||||
(.var "p"))))
|
||||
|
||||
def congSucc : Raw := .ann congSuccTm congSuccTy
|
||||
|
||||
def congSuccRefl : Raw :=
|
||||
.ann
|
||||
(.app (.app (.app congSucc .zero) .zero) reflZero)
|
||||
(.id .nat (.succ .zero) (.succ .zero))
|
||||
|
||||
def omegaTy : Raw :=
|
||||
.pi "A" (.univ 0) (.var "A")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user