Add definitional transport and congruence combinators derived from Id so equality programming isnt all raw idElim

This commit is contained in:
2026-04-19 18:06:54 +00:00
parent 03eedd855d
commit 114747bb3d
3 changed files with 50 additions and 0 deletions
+38
View File
@@ -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")