The existing untyped beta-conversion term model
System F
AbbreviationUntyped locally closed term model#✓fully proved
Locally closed terms in the pinned CSLib untyped calculus.
abbrev Model : Type := {t : Term Nat // t.LcAt 0}
Used by 53
AbbreviationBeta equivalence in the untyped term model#✓fully proved
Equivalence closure of the existing full-beta reduction.
abbrev BetaEq (f g : Model) : Prop :=
Relation.EqvGen Term.FullBeta f.val g.val
abbrev Model : Type := {t : Term Nat // t.LcAt 0}
CSLibExt/Languages/LambdaCalculus/SystemF/Model.lean:27
Uses 1 · Used by 22
Model
DefinitionApplication in the untyped term model#✓fully proved
Application in the existing untyped term model preserves local closure.
def app (f a : Model) : Model :=
⟨.app f.val a.val, by
simpa only [Term.LcAt, Bool.and_eq_true] using
And.intro f.property a.property⟩
abbrev Model : Type := {t : Term Nat // t.LcAt 0}
CSLibExt/Languages/LambdaCalculus/SystemF/Model.lean:27
Uses 1 · Used by 16
TheoremModel terms are locally closed#✓fully proved
The Boolean carrier invariant implies CSLib's cofinite local closure.
theorem lc (t : Model) : t.val.LC
abbrev Model : Type := {t : Term Nat // t.LcAt 0}
CSLibExt/Languages/LambdaCalculus/SystemF/Model.lean:27
DefinitionSymbolic atoms of the untyped term model#✓fully proved
A symbolic atom is locally closed; it is not a new System F constant.
def atom (i : Nat) : Model := ⟨.fvar i, rfl⟩
abbrev Model : Type := {t : Term Nat // t.LcAt 0}
CSLibExt/Languages/LambdaCalculus/SystemF/Model.lean:27
Uses 1
Beta Eq
TheoremReflexivity of beta equivalence#✓fully proved
Upstream beta equivalence is reflexive.
@[refl] theorem refl (f : Model) : BetaEq f f
abbrev Model : Type := {t : Term Nat // t.LcAt 0}
CSLibExt/Languages/LambdaCalculus/SystemF/Model.lean:27
abbrev BetaEq (f g : Model) : Prop :=
Relation.EqvGen Term.FullBeta f.val g.val
CSLibExt/Languages/LambdaCalculus/SystemF/Model.lean:30
Uses 2 · Used by 6
TheoremSymmetry of beta equivalence#✓fully proved
Upstream beta equivalence is symmetric.
@[symm] theorem symm {f g : Model} (h : BetaEq f g) : BetaEq g f
abbrev Model : Type := {t : Term Nat // t.LcAt 0}
CSLibExt/Languages/LambdaCalculus/SystemF/Model.lean:27
abbrev BetaEq (f g : Model) : Prop :=
Relation.EqvGen Term.FullBeta f.val g.val
CSLibExt/Languages/LambdaCalculus/SystemF/Model.lean:30
Uses 2 · Used by 1
TheoremTransitivity of beta equivalence#✓fully proved
Upstream beta equivalence is transitive.
@[trans] theorem trans {f g h : Model} (hfg : BetaEq f g)
(hgh : BetaEq g h) : BetaEq f h
abbrev Model : Type := {t : Term Nat // t.LcAt 0}
CSLibExt/Languages/LambdaCalculus/SystemF/Model.lean:27
abbrev BetaEq (f g : Model) : Prop :=
Relation.EqvGen Term.FullBeta f.val g.val
CSLibExt/Languages/LambdaCalculus/SystemF/Model.lean:30
TheoremBeta equivalence is a congruence in function position#✓fully proved
Application preserves beta equivalence in its function position.
theorem appFun {f g : Model} (h : BetaEq f g) (a : Model) :
BetaEq (Model.app f a) (Model.app g a)
abbrev Model : Type := {t : Term Nat // t.LcAt 0}
CSLibExt/Languages/LambdaCalculus/SystemF/Model.lean:27
abbrev BetaEq (f g : Model) : Prop :=
Relation.EqvGen Term.FullBeta f.val g.val
CSLibExt/Languages/LambdaCalculus/SystemF/Model.lean:30
def app (f a : Model) : Model :=
⟨.app f.val a.val, by
simpa only [Term.LcAt, Bool.and_eq_true] using
And.intro f.property a.property⟩
CSLibExt/Languages/LambdaCalculus/SystemF/Model.lean:36
Uses 4 · Used by 3
TheoremBeta equivalence is a congruence in argument position#✓fully proved
Application preserves beta equivalence in its argument position.
theorem appArg (f : Model) {a b : Model} (h : BetaEq a b) :
BetaEq (Model.app f a) (Model.app f b)
abbrev Model : Type := {t : Term Nat // t.LcAt 0}
CSLibExt/Languages/LambdaCalculus/SystemF/Model.lean:27
abbrev BetaEq (f g : Model) : Prop :=
Relation.EqvGen Term.FullBeta f.val g.val
CSLibExt/Languages/LambdaCalculus/SystemF/Model.lean:30
def app (f a : Model) : Model :=
⟨.app f.val a.val, by
simpa only [Term.LcAt, Bool.and_eq_true] using
And.intro f.property a.property⟩
CSLibExt/Languages/LambdaCalculus/SystemF/Model.lean:36
Uses 4 · Used by 2
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.