Documentation

Std.Data.DList

structure Std.DList (α : Type u) :

A difference List is a Function that, given a List, returns the original contents of the difference List prepended to the given List. This structure supports O(1) append and concat operations on lists, making it useful for append-heavy uses such as logging and pretty printing.

  • apply : List αList α

    "Run" a DList by appending it on the right by a List α to get another List α.

  • invariant : ∀ (l : List α), self.apply l = self.apply [] ++ l

    The apply function of a DList is completely determined by the list apply [].

Instances For
    def Std.DList.ofList {α : Type u} (l : List α) :

    O(1) (apply is O(|l|)). Convert a List α into a DList α.

    Equations
    Instances For
      def Std.DList.empty {α : Type u} :

      O(1) (apply is O(1)). Return an empty DList α.

      Equations
      • Std.DList.empty = { apply := id, invariant := }
      Instances For
        Equations
        • Std.DList.instEmptyCollectionDList = { emptyCollection := Std.DList.empty }
        def Std.DList.toList {α : Type u} :
        Std.DList αList α

        O(apply()). Convert a DList α into a List α by running the apply function.

        Equations
        Instances For
          def Std.DList.singleton {α : Type u} (a : α) :

          O(1) (apply is O(1)). A DList α corresponding to the list [a].

          Equations
          Instances For
            def Std.DList.cons {α : Type u} :
            αStd.DList αStd.DList α

            O(1) (apply is O(1)). Prepend a on a DList α.

            Equations
            • Std.DList.cons x✝ x = match x✝, x with | a, { apply := f, invariant := h } => { apply := fun (t : List α) => a :: f t, invariant := }
            Instances For
              def Std.DList.append {α : Type u} :
              Std.DList αStd.DList αStd.DList α

              O(1) (apply is O(1)). Append two DList α.

              Equations
              • Std.DList.append x✝ x = match x✝, x with | { apply := f, invariant := h₁ }, { apply := g, invariant := h₂ } => { apply := f g, invariant := }
              Instances For
                def Std.DList.push {α : Type u} :
                Std.DList ααStd.DList α

                O(1) (apply is O(1)). Append an element at the end of a DList α.

                Equations
                • Std.DList.push x✝ x = match x✝, x with | { apply := f, invariant := h }, a => { apply := fun (t : List α) => f (a :: t), invariant := }
                Instances For
                  Equations
                  • Std.DList.instAppendDList = { append := Std.DList.append }