β-confluence for the λ-calculus #
A parallel β-reduction step.
- fvar
{Var : Type u}
(x : Var)
: (Term.fvar x).Parallel (Term.fvar x)
Free variables parallel step to themselves.
- app
{Var : Type u}
{L L' M M' : Term Var}
: L.Parallel L' → M.Parallel M' → (L.app M).Parallel (L'.app M')
A parallel left and right congruence rule for application.
- abs
{Var : Type u}
{m m' : Term Var}
(xs : Finset Var)
: (∀ x ∉ xs, (m.open' (Term.fvar x)).Parallel (m'.open' (Term.fvar x))) → m.abs.Parallel m'.abs
Congruence rule for lambda terms.
- beta
{Var : Type u}
{m m' n n' : Term Var}
(xs : Finset Var)
: (∀ x ∉ xs, (m.open' (Term.fvar x)).Parallel (m'.open' (Term.fvar x))) →
n.Parallel n' → (m.abs.app n).Parallel (m'.open' n')
A parallel β-reduction.
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.para_lc_r
{Var : Type u}
{M N : Term Var}
[HasFresh Var]
[DecidableEq Var]
(step : paraRs.Red M N)
:
N.LC
The right side of a parallel reduction is locally closed.
theorem
Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.step_to_para
{Var : Type u}
{M N : Term Var}
(step : fullBetaRs.Red M N)
:
A single β-reduction implies a single parallel reduction.
theorem
Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.para_to_redex
{Var : Type u}
{M N : Term Var}
[HasFresh Var]
[DecidableEq Var]
(para : paraRs.Red M N)
:
fullBetaRs.MRed M N
A single parallel reduction implies a multiple β-reduction.
theorem
Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.parachain_iff_redex
{Var : Type u}
{M N : Term Var}
[HasFresh Var]
[DecidableEq Var]
:
Multiple parallel reduction is equivalent to multiple β-reduction.
theorem
Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.para_open_close
{Var : Type u}
{M M' : Term Var}
[HasFresh Var]
[DecidableEq Var]
(x y : Var)
(z : ℕ)
(para : paraRs.Red M M')
:
Parallel substitution respects closing and opening.
theorem
Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.para_diamond
{Var : Type u}
[HasFresh Var]
[DecidableEq Var]
:
Parallel reduction has the diamond property.
theorem
Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.para_confluence
{Var : Type u}
[HasFresh Var]
[DecidableEq Var]
:
Parallel reduction is confluent.
theorem
Cslib.LambdaCalculus.LocallyNameless.Untyped.Term.confluence_beta
{Var : Type u}
[HasFresh Var]
[DecidableEq Var]
:
β-reduction is confluent.