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

    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 VarVarTerm VarTerm VarProp

          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