Documentation

Cslib.Languages.LambdaCalculus.Named.Untyped.Basic

λ-calculus #

The untyped λ-calculus.

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
          inductive Cslib.LambdaCalculus.Named.Term.Subst {Var : Type u} [DecidableEq Var] :
          Term VarVarTerm VarTerm VarProp

          Capture-avoiding substitution, as an inference system.

          Instances For
            def Cslib.LambdaCalculus.Named.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
              @[simp]
              theorem Cslib.LambdaCalculus.Named.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 Cslib.LambdaCalculus.Named.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

                Contexts.

                Instances For
                  def Cslib.LambdaCalculus.Named.instDecidableEqContext.decEq {Var✝ : Type u_1} [DecidableEq Var✝] (x✝ x✝¹ : Context Var✝) :
                  Decidable (x✝ = x✝¹)
                  Equations
                  Instances For
                    theorem Cslib.LambdaCalculus.Named.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 Cslib.LambdaCalculus.Named.Term.AlphaEquiv {Var : Type u} [DecidableEq Var] :
                    Term VarTerm VarProp

                    α-equivalence.

                    Instances For