Documentation

Cslib.Languages.LambdaCalculus.Named.Untyped.Basic

λ-calculus #

The untyped λ-calculus, with a named representation of variables. This file contains the definitions of α-equivalence and capture-avoiding substitution.

References #

Syntax of terms.

Instances For

    Free variables.

    Equations
    Instances For

      Bound variables.

      Equations
      Instances For

        Variable names (free and bound) in a term.

        Equations
        Instances For
          def Cslib.LambdaCalculus.Named.Untyped.Term.rename {Var : Type u} [DecidableEq Var] (m : Term Var) (x y : Var) :
          Term Var

          Variable renaming, applying to both free and bound variables. m.rename x y changes all occurrences of x into y in m.

          Equations
          Instances For
            @[simp]
            theorem Cslib.LambdaCalculus.Named.Untyped.Term.rename_eq_sizeOf {Var : Type u} [DecidableEq Var] {m : Term Var} {x y : Var} :
            sizeOf (m.rename x y) = sizeOf m

            Renaming preserves size.

            α-equivalence.

            Instances For
              @[simp]

              Allow grind to recognise the notation of α-equivalence.

              inductive Cslib.LambdaCalculus.Named.Untyped.Term.Subst {Var : Type u} [DecidableEq Var] :
              Term Var → Var → Term Var → Term Var → Prop

              Capture-avoiding substitution, as an inference system.

              Instances For
                @[irreducible]
                def Cslib.LambdaCalculus.Named.Untyped.Term.subst {Var : Type u} [DecidableEq Var] [HasFresh Var] (m : Term Var) (x : Var) (r : Term Var) :
                Term Var

                Capture-avoiding substitution. m.subst x r replaces the free occurrences of variable x in m with r.

                Equations
                Instances For
                  @[instance_reducible]

                  Term.subst is a substitution for λ-terms. Gives access to the notation m[x := n].

                  Equations
                  @[simp]
                  theorem Cslib.LambdaCalculus.Named.Untyped.Term.subst_def {Var : Type u} [DecidableEq Var] [HasFresh Var] (m r : Term Var) (x : Var) :
                  m[x := r] = m.subst x r

                  Allow grind to recognise the notation of substitution.

                  Contexts.

                  Instances For
                    def Cslib.LambdaCalculus.Named.Untyped.Term.instDecidableEqContext.decEq {Var✝ : Type u_1} [DecidableEq Var✝] (x✝ x✝¹ : Context Var✝) :
                    Decidable (x✝ = x✝¹)
                    Equations
                    Instances For