Equations
- «term_~>sn_» = Lean.ParserDescr.trailingNode `«term_~>sn_» 80 81 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ~>sn ") (Lean.ParserDescr.cat `term 81))
Instances For
theorem
SN.subterm_app
{f a : Term}
:
LeanSubst.SN Red (f :@ a) → LeanSubst.SN Red f ∧ LeanSubst.SN Red a
theorem
SN.neutral_app
{f a : Term}
:
Neutral f → LeanSubst.SN Red f → LeanSubst.SN Red a → LeanSubst.SN Red (f :@ a)
theorem
SN.weak_head_expansion
{t b : Term}
{A : Ty}
:
LeanSubst.SN Red t → LeanSubst.SN Red (b[%t::LeanSubst.I]) → LeanSubst.SN Red ((:λ[A] b) :@ t)
theorem
SN.red_app_preservation
{f f' a : Term}
:
f ~>sn f' → LeanSubst.SN Red f → LeanSubst.SN Red a → LeanSubst.SN Red (f' :@ a) → LeanSubst.SN Red (f :@ a)
- var {x : Nat} : SNi SnVariant.neu #x
- app {s : SnIndices SnVariant.neu} {t : SnIndices SnVariant.nor} : SNi SnVariant.neu s → SNi SnVariant.nor t → SNi SnVariant.neu (s :@ t)
- lam {t : SnIndices SnVariant.nor} {A : Ty} : SNi SnVariant.nor t → SNi SnVariant.nor (:λ[A] t)
- neu {t : SnIndices SnVariant.neu} : SNi SnVariant.neu t → SNi SnVariant.nor t
- red {t t' : Term} : SNi SnVariant.red (t, t') → SNi SnVariant.nor t' → SNi SnVariant.nor t
- beta {t : SnIndices SnVariant.nor} {A : Ty} {b : Term} : SNi SnVariant.nor t → SNi SnVariant.red ((:λ[A] b) :@ t, b[%t::LeanSubst.I])
- step {s s' t : Term} : SNi SnVariant.red (s, s') → SNi SnVariant.red (s :@ t, s' :@ t)
Instances For
@[reducible, inline]
abbrev
SNi.SnRenameLemmaType
(σ : LeanSubst.Subst Term)
:
LeanSubst.IsRen σ → (v : SnVariant) → (i : SnIndices v) → Prop
Equations
- SNi.SnRenameLemmaType σ x✝ SnVariant.neu t = SNi SnVariant.neu (t[σ])
- SNi.SnRenameLemmaType σ x✝ SnVariant.nor t = SNi SnVariant.nor (t[σ])
- SNi.SnRenameLemmaType σ x✝ SnVariant.red (t, t') = SNi SnVariant.red (t[σ], t'[σ])
Instances For
theorem
SNi.rename
{v : SnVariant}
{i : SnIndices v}
(σ : LeanSubst.Subst Term)
(h : LeanSubst.IsRen σ)
:
SNi v i → SnRenameLemmaType σ h v i
@[reducible, inline]
abbrev
SNi.SnAntiRenameLemmaType
(σ : LeanSubst.Subst Term)
:
LeanSubst.IsRen σ → (v : SnVariant) → (i : SnIndices v) → Prop
Equations
- SNi.SnAntiRenameLemmaType σ x✝ SnVariant.neu t = ∀ (z : Term), t = z[σ] → SNi SnVariant.neu z
- SNi.SnAntiRenameLemmaType σ x✝ SnVariant.nor t = ∀ (z : Term), t = z[σ] → SNi SnVariant.nor z
- SNi.SnAntiRenameLemmaType σ x✝ SnVariant.red (t, t') = ∀ (z : Term), t = z[σ] → ∃ (z' : Term), t' = z'[σ] ∧ SNi SnVariant.red (z, z')
Instances For
theorem
SNi.antirename
{v : SnVariant}
{i : SnIndices v}
(σ : LeanSubst.Subst Term)
(h : LeanSubst.IsRen σ)
:
SNi v i → SnAntiRenameLemmaType σ h v i
@[reducible, inline]
Equations
- SNi.SnBetaVarLemmaType SnVariant.neu s = ∀ (t : Term) (x : Nat), s = t :@ #x → SNi SnVariant.neu t
- SNi.SnBetaVarLemmaType SnVariant.nor s = ∀ (t : Term) (x : Nat), s = t :@ #x → SNi SnVariant.nor t
- SNi.SnBetaVarLemmaType SnVariant.red x_2 = True
Instances For
@[reducible, inline]
Equations
Instances For
theorem
SNi.property_weaken
{v : SnVariant}
{i : SnIndices v}
:
SNi v i → SnPropertyWeakenLemmaType v i
@[reducible, inline]
Equations
Instances For
Equations
- StrongNormalizaton.LR ⊤ = fun (t : Term) => SNi SnVariant.nor t
- StrongNormalizaton.LR (A -t> B) = fun (t : Term) => ∀ (σ : LeanSubst.Subst Term) (v : Term), LeanSubst.IsRen σ → StrongNormalizaton.LR A v → StrongNormalizaton.LR B (t[σ] :@ v)
Instances For
Equations
Instances For
Equations
- Γ ⊨s t : A = ∀ (σ : LeanSubst.Subst Term), StrongNormalizaton.GR Γ σ → StrongNormalizaton.LR A (t[σ])
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
StrongNormalizaton.monotone
{A : Ty}
{t : Term}
(σ : LeanSubst.Subst Term)
:
LeanSubst.IsRen σ → LR A t → LR A (t[σ])
theorem
StrongNormalizaton.cr
{A : Ty}
:
(∀ (t : Term), LR A t → SNi SnVariant.nor t) ∧ (∀ (t : SnIndices SnVariant.neu), SNi SnVariant.neu t → LR A t) ∧ ∀ (t t' : Term), SNi SnVariant.red (t, t') → LR A t' → LR A t
theorem
strong_normalization_inductive
{Γ : List Ty}
{t : Term}
{A : Ty}
:
Γ ⊢ t : A → SNi SnVariant.nor t