Documentation

LeanPool.BruhatTits.Graph.Tree

Proof that the Bruhat-Tits graph is a tree #

Let R be a discrete valuation ring and K its fraction field.

In this file we show that the Bruhat-Tits graph associated to R is acyclic (i.e. without loops) and conclude that it is a tree. The connectedness was already shown in BruhatTits.Graph.Graph (see BruhatTits.BTGraph_connected).

The strategy for proving acyclicity is as follows:

Any walk is representable by a chain of lattices. If the walk is a trail, the chain is simple (see BruhatTits.exists_repr_isSimpleChain_of_isTrail).

noncomputable def BruhatTits.chainToWalk {K : Type u_1} [Field K] {R : Subring K} [IsDiscreteValuationRing R] [IsFractionRing (↥R) K] (l : List (Lattice R)) (hl : l []) (hc : l.IsBTChain) :

A non-empty chain of lattices defines a walk on the Bruhat-Tits graph.

Equations
Instances For
    theorem BruhatTits.isSimpleChain_of_isTrail_aux {K : Type u_1} [Field K] {R : Subring K} [IsDiscreteValuationRing R] [IsFractionRing (↥R) K] {x y : Vertices R} (p : BTgraph.Walk x y) (hp : p.IsTrail) (l : List (Lattice R)) (hl : List.map (fun (L : Lattice R) => L) l = p.support) :
    List.Forall id (List.zipWith₃ (fun (L₁ x L₃ : Lattice R) => ¬Lattice.IsSimilar R L₁ L₃) l l.tail l.tail.tail)
    theorem BruhatTits.exists_repr_isSimpleChain_of_isTrail {K : Type u_1} [Field K] {R : Subring K} [IsDiscreteValuationRing R] [IsFractionRing (↥R) K] {x y : Vertices R} (p : BTgraph.Walk x y) (hp : p.IsTrail) :
    ∃ (l : List (Lattice R)), l.IsBTSimpleChain List.map (fun (L : Lattice R) => L) l = p.support

    If p is a trail in the Bruhat-Tits graph, it is representable by a simple chain of lattices.

    A walk on the Bruhat-Tits graph is a standard walk, if there exists a sequence of representing lattices (Lᵢ) with pᵢ = ⟦Lᵢ⟧ such that the sequence (Lᵢ) is a standard sequence (see List.IsBTStandard).

    Equations
    Instances For
      theorem BruhatTits.isStandard_of_list_isStandard {K : Type u_1} [Field K] {R : Subring K} [IsDiscreteValuationRing R] [IsFractionRing (↥R) K] {x y : Vertices R} {p : BTgraph.Walk x y} (l : List (Lattice R)) (hleq : List.map (fun (L : Lattice R) => L) l = p.support) (hl : l.IsBTStandard) :
      theorem BruhatTits.length_eq_inv_of_isStandard {K : Type u_1} [Field K] {R : Subring K} [IsDiscreteValuationRing R] [IsFractionRing (↥R) K] {x y : Vertices R} {p : BTgraph.Walk x y} (h : p.IsStandard) :
      p.length = inv x y

      If p is a standard walk from x to y, the length of p is the distance inv x y.

      Given two vertices and a trail p from x to y, there exists a g : GL₂(K) such that g • p is a standard walk.

      theorem BruhatTits.length_eq_inv {K : Type u_1} [Field K] {R : Subring K} [IsDiscreteValuationRing R] [IsFractionRing (↥R) K] {x y : Vertices R} {p : BTgraph.Walk x y} (hp : p.IsTrail) :
      p.length = inv x y

      The length of a trail is equal to the distance of the endpoints.

      The graph-theoretic distance agrees with our constructed inv function.

      The Bruhat-Tits graph has no loops, i.e. it is acyclic.

      theorem BruhatTits.BTtree {K : Type u_1} [Field K] {R : Subring K} [IsDiscreteValuationRing R] [IsFractionRing (↥R) K] :

      The Bruhat-Tits graph is a tree.