η-reduction for the λ-calculus #
@[reducible, inline]
Full η-reduction, defined as the congruence closure of the base η-rule.
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.FullEta.redex_app_l_cong {Var : Type u} {M M' N : Term Var} (redex : Relation.ReflTransGen FullEta M M') (lc_N : N.LC) :
Relation.ReflTransGen FullEta (M.app N) (M'.app N)
Left congruence rule for application in multiple reduction.
theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.FullEta.redex_app_r_cong {Var : Type u} {M M' N : Term Var} (redex : Relation.ReflTransGen FullEta M M') (lc_N : N.LC) :
Relation.ReflTransGen FullEta (N.app M) (N.app M')
Right congruence rule for application in multiple reduction.
theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.FullEta.step_not_fv {Var : Type u} {M M' : Term Var} [HasFresh Var] [DecidableEq Var] (step : M.FullEta M') :
An η-reduction step does not introduce new free variables.
theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.FullEta.steps_fv {Var : Type u} {M M' : Term Var} [HasFresh Var] [DecidableEq Var] (steps : Relation.ReflTransGen FullEta M M') :
theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.FullEta.steps_subst_cong_l {Var : Type u} [HasFresh Var] [DecidableEq Var] {x : Var} (s s' N : Term Var) (steps : Relation.ReflTransGen FullEta s s') (lc_N : N.LC) :
theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.FullEta.redex_abs_close {Var : Type u} {M M' : Term Var} [HasFresh Var] [DecidableEq Var] {x : Var} (steps : Relation.ReflTransGen FullEta M M') :
Abstracting then closing preserves multiple reductions.
theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.FullEta.redex_abs_cong {Var : Type u} [HasFresh Var] [DecidableEq Var] {M M' : Term Var} (xs : Finset Var) (cofin : ∀ x ∉ xs, Relation.ReflTransGen FullEta (M.open' (fvar x)) (M'.open' (fvar x))) :
Multiple reduction of opening implies multiple reduction of abstraction.
theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.FullEta.steps_subst_cong_r {Var : Type u} [HasFresh Var] [DecidableEq Var] {x : Var} (s t t' : Term Var) (st : Relation.ReflTransGen FullEta t t') (lc_s : s.LC) :
theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.FullEta.step_open_cong_r {Var : Type u} [HasFresh Var] [DecidableEq Var] {s t t' : Term Var} (lc_s : s.abs.LC) (step : t.FullEta t') :
Relation.ReflTransGen FullEta (s.open' t) (s.open' t')
theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.FullEta.steps_open_cong_r {Var : Type u} [HasFresh Var] [DecidableEq Var] {s t t' : Term Var} (lc_s : s.abs.LC) (steps : Relation.ReflTransGen FullEta t t') :
Relation.ReflTransGen FullEta (s.open' t) (s.open' t')
theorem Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.FullEta.close_eta_steps {Var : Type u} {M N : Term Var} [HasFresh Var] [DecidableEq Var] {x : Var} (hx_M : x ∉ M.fv) (st_M : Relation.ReflGen FullEta (M.open' (fvar x)) N) :
Relation.ReflGen FullEta M.abs (N.close x).abs