Documentation

HexGraph.Sparse.Build

def Hex.SparseGraph.Builder.unique {α : Type u_1} [BEq α] :
List α → List α

Remove consecutive duplicates in one pass.

Equations
Instances For
    @[csimp]

    Use the standard tail-recursive implementation in compiled code.

    theorem Hex.SparseGraph.Builder.mem_go {α : Type u_1} [BEq α] [LawfulBEq α] (a b : α) (xs : List α) :
    b ∈ unique.go a xs ↔ b = a ∨ b ∈ xs
    @[simp]
    theorem Hex.SparseGraph.Builder.mem_unique {α : Type u_1} [BEq α] [LawfulBEq α] (a : α) (xs : List α) :
    a ∈ unique xs ↔ a ∈ xs

    Sort a row and collapse repeated neighbours in linear time after sorting.

    Equations
    Instances For
      @[simp]
      theorem Hex.SparseGraph.Builder.mem_normalize {n : Nat} (a : Fin n) (xs : List (Fin n)) :
      a ∈ normalize xs ↔ a ∈ xs
      theorem Hex.SparseGraph.Builder.sorted_normalize {n : Nat} (xs : List (Fin n)) :
      List.Pairwise (fun (x1 x2 : Fin n) => x1 < x2) (normalize xs)
      def Hex.SparseGraph.Builder.add {n : Nat} (rows : Vector (List (Fin n)) n) (e : Fin n × Fin n) :
      Vector (List (Fin n)) n

      Scatter an undirected edge into its two rows; diagonal pairs are dropped.

      Equations
      Instances For
        theorem Hex.SparseGraph.Builder.mem_add {n : Nat} (rows : Vector (List (Fin n)) n) (e : Fin n × Fin n) (i j : Fin n) :
        j ∈ (add rows e)[↑i] ↔ j ∈ rows[↑i] ∨ i ≠ j ∧ (e = (i, j) ∨ e = (j, i))
        def Hex.SparseGraph.Builder.scatter {n : Nat} (edges : List (Fin n × Fin n)) :
        Vector (List (Fin n)) n

        Build unsorted adjacency lists with one array update per directed edge.

        Equations
        Instances For
          @[simp]
          theorem Hex.SparseGraph.Builder.mem_scatter {n : Nat} (edges : List (Fin n × Fin n)) (i j : Fin n) :
          j ∈ (scatter edges)[↑i] ↔ i ≠ j ∧ ((i, j) ∈ edges ∨ (j, i) ∈ edges)
          def Hex.SparseGraph.Builder.checked (n : Nat) (edges : List (Nat × Nat)) (h : edges.all (Graph.validEdge n) = true) :
          List (Fin n × Fin n)

          Range-checking supplies erased proofs for the finite endpoints.

          Equations
          Instances For
            @[simp]
            theorem Hex.SparseGraph.Builder.mem_checked (n : Nat) (edges : List (Nat × Nat)) (h : edges.all (Graph.validEdge n) = true) (i j : Fin n) :
            (i, j) ∈ checked n edges h ↔ (↑i, ↑j) ∈ edges

            Expose row normalization to the kernel while retaining the existing array map in compiled graph construction.

            Equations
            Instances For
              def Hex.SparseGraph.ofEdges {n : Nat} (edges : List (Fin n × Fin n)) :

              Build from unordered Fin pairs, collapsing duplicates and dropping loops. Scattering and packing are linear; each row is sorted separately.

              Equations
              Instances For
                @[simp]
                theorem Hex.SparseGraph.adj_ofEdges {n : Nat} (edges : List (Fin n × Fin n)) (i j : Fin n) :
                (ofEdges edges).adj i j = (i != j && (decide ((i, j) ∈ edges) || decide ((j, i) ∈ edges)))
                @[simp]
                theorem Hex.SparseGraph.toDense_ofEdges {n : Nat} (edges : List (Fin n × Fin n)) :

                Checked edge-list builder: reject loops and out-of-range endpoints, otherwise normalize duplicate undirected pairs into compressed rows.

                Equations
                Instances For
                  theorem Hex.SparseGraph.isSome_ofEdges? (n : Nat) (edges : List (Nat × Nat)) :
                  (ofEdges? n edges).isSome = edges.all (Graph.validEdge n)
                  @[simp]
                  theorem Hex.SparseGraph.adj_ofEdges? {n : Nat} {edges : List (Nat × Nat)} {G : SparseGraph n} (h : ofEdges? n edges = some G) (i j : Fin n) :
                  G.adj i j = (decide ((↑i, ↑j) ∈ edges) || decide ((↑j, ↑i) ∈ edges))

                  The two checked constructors accept the same inputs and represent the same graph.

                  Enumerate each undirected edge once, in increasing endpoint order.

                  Equations
                  Instances For
                    @[simp]
                    theorem Hex.SparseGraph.mem_edges {n : Nat} (G : SparseGraph n) (i j : Fin n) :
                    (i, j) ∈ G.edges ↔ i < j ∧ G.adj i j = true