1.5. Examples
The usual lambda-calculus constants are represented directly as L0 terms.
The examples after the definitions are checked reduction derivations.
def I : L0 := L0[λ 0]def T : L0 := L0[λ λ 1]def F : L0 := L0[λ λ 0]def N : L0 := L0[λ 0 {F} {T}]def N' : L0 := L0[λ λ λ 2 0 1]def A : L0 := L0[λ λ 1 0 {F}]def M : L0 := L0[λ λ λ 0 2 1]example : NormalForm I := ⊢ I.NormalForm All goals completed! 🐙example : NormalForm T := ⊢ T.NormalForm All goals completed! 🐙example : NormalForm F := ⊢ F.NormalForm All goals completed! 🐙example : NormalForm N := ⊢ N.NormalForm All goals completed! 🐙example : NormalForm N' := ⊢ N'.NormalForm All goals completed! 🐙example : NormalForm A := ⊢ A.NormalForm All goals completed! 🐙example : NormalForm M := ⊢ M.NormalForm All goals completed! 🐙example : L0[{I} 3] →β₀ L0[3] := ⊢ I.app (var 3) →β₀ var 3 All goals completed! 🐙example : L0[{I} 3] →β₀* L0[3] := ⊢ I.app (var 3) →β₀* var 3 rt_step { All goals completed! 🐙 }example : L0[{T} 3 4] →β₀* L0[3] := ⊢ (T.app (var 3)).app (var 4) →β₀* var 3 All goals completed! 🐙example : L0[{F} 3 4] →β₀* L0[4] := ⊢ (F.app (var 3)).app (var 4) →β₀* var 4 All goals completed! 🐙example : L0[{N} {T}] →β₀* L0[{F}] := ⊢ N.app T →β₀* F calc
_ = L0[{N} {T}] := ⊢ N.app T = N.app T All goals completed! 🐙
_ = L0[(λ 0 {F} {T}) {T}] := ⊢ N.app T = (((var 0).app F).app T).lam.app T All goals completed! 🐙
_ →β₀ L0[{T} {F} {T}] := ⊢ (((var 0).app F).app T).lam.app T →β₀ (T.app F).app T All goals completed! 🐙
_ = L0[(λ λ 1) {F} {T}] := ⊢ (T.app F).app T = ((var 1).lam.lam.app F).app T All goals completed! 🐙
_ →β₀ L0[(λ {F}) {T}] := ⊢ ((var 1).lam.lam.app F).app T →β₀ F.lam.app T All goals completed! 🐙
_ →β₀ L0[{F}] := ⊢ F.lam.app T →β₀ F All goals completed! 🐙example : L0[{N} {F}] →β₀* L0[{T}] := ⊢ N.app F →β₀* T calc
_ = L0[{N} {F}] := ⊢ N.app F = N.app F All goals completed! 🐙
_ = L0[(λ 0 {F} {T}) {F}] := ⊢ N.app F = (((var 0).app F).app T).lam.app F All goals completed! 🐙
_ →β₀ L0[{F} {F} {T}] := ⊢ (((var 0).app F).app T).lam.app F →β₀ (F.app F).app T All goals completed! 🐙
_ = L0[(λ λ 0) {F} {T}] := ⊢ (F.app F).app T = ((var 0).lam.lam.app F).app T All goals completed! 🐙
_ →β₀ L0[(λ 0) {T}] := ⊢ ((var 0).lam.lam.app F).app T →β₀ (var 0).lam.app T All goals completed! 🐙
_ →β₀ L0[{T}] := ⊢ (var 0).lam.app T →β₀ T All goals completed! 🐙example : L0[{N'} {T}] →β₀* L0[{F}] := ⊢ N'.app T →β₀* F All goals completed! 🐙example : L0[{N'} {F}] →β₀* L0[{T}] := ⊢ N'.app F →β₀* T All goals completed! 🐙example : L0[{N} {T}] →β₀* L0[{F}] := ⊢ N.app T →β₀* F All goals completed! 🐙example : L0[{N} {F}] →β₀* L0[{T}] := ⊢ N.app F →β₀* T All goals completed! 🐙example : L0[{N'} {T}] →β₀* L0[{F}] := ⊢ N'.app T →β₀* F All goals completed! 🐙example : L0[{N'} {F}] →β₀* L0[{T}] := ⊢ N'.app F →β₀* T All goals completed! 🐙example : L0[{A} {T} {T}] →β₀* L0[{T}] := ⊢ (A.app T).app T →β₀* T All goals completed! 🐙example : L0[{A} {T} {F}] →β₀* L0[{F}] := ⊢ (A.app T).app F →β₀* F All goals completed! 🐙example : L0[{A} {F} {T}] →β₀* L0[{F}] := ⊢ (A.app F).app T →β₀* F All goals completed! 🐙example : L0[{A} {F} {F}] →β₀* L0[{F}] := ⊢ (A.app F).app F →β₀* F All goals completed! 🐙def Z : L0 := L0[λ λ 0]def S : L0 := L0[λ λ λ 1 (2 1 0)]def Plus : L0 := L0[λ λ 1 {S} 0]end L0