Documentation

Cslib.Computability.LambdaCalculus.Untyped.Basic

λ-calculus #

The untyped λ-calculus.

References #

inductive LambdaCalculus.Term (Var : Type u) :

Syntax of terms.

Instances For
    def LambdaCalculus.Term.fv {Var : Type u} [DecidableEq Var] (m : Term Var) :
    Finset Var

    Free variables.

    Equations
    Instances For
      def LambdaCalculus.Term.bv {Var : Type u} [DecidableEq Var] (m : Term Var) :
      Finset Var

      Bound variables.

      Equations
      Instances For
        def LambdaCalculus.Term.vars {Var : Type u} [DecidableEq Var] (m : Term Var) :
        Finset Var

        Variable names (free and bound) in a term.

        Equations
        Instances For
          inductive LambdaCalculus.Term.Subst {Var : Type u} [DecidableEq Var] :
          Term VarVarTerm VarTerm VarProp

          Capture-avoiding substitution, as an inference system.

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

            Renaming, or variable substitution. m.rename x y renames x into y in m.

            Equations
            Instances For
              theorem LambdaCalculus.Term.rename.eq_sizeOf {Var : Type u} {m : Term Var} {x y : Var} [DecidableEq Var] :
              sizeOf (m.rename x y) = sizeOf m

              Renaming preserves size.

              @[irreducible]
              def LambdaCalculus.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

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

                Equations
                inductive LambdaCalculus.Context (Var : Type u) :

                Contexts.

                Instances For
                  def LambdaCalculus.Context.fill {Var : Type u} (c : Context Var) (m : Term Var) :
                  Term Var

                  Replaces the hole in a Context with a Term.

                  Equations
                  Instances For
                    theorem LambdaCalculus.Context.complete {Var : Type u} (m : Term Var) :
                    ∃ (c : Context Var) (x : Var), m = c.fill (Term.var x)

                    Any Term can be obtained by filling a Context with a variable. This proves that Context completely captures the syntax of terms.

                    inductive LambdaCalculus.Term.AlphaEquiv {Var : Type u} [DecidableEq Var] :
                    Rel (Term Var) (Term Var)

                    α-equivalence.

                    Instances For

                      Instance for the notation m =α n.

                      Equations