Documentation

Mathlib.SetTheory.Descriptive.Tree

Trees in the sense of descriptive set theory #

This file defines trees of depth ω in the sense of descriptive set theory as sets of finite sequences that are stable under taking prefixes.

Main declarations #

A tree is a set of finite sequences, implemented as List A, that is stable under taking prefixes. For the definition we use the equivalent property x ++ [a] ∈ T → x ∈ T, which is more convenient to check. We define tree A as a complete sublattice of Set (List A), which coerces to the type of trees on A.

Equations
    Instances For
      @[simp]
      theorem Descriptive.coe_def (A : Type u_1) (self : (tree A)) :
      self = self
      theorem Descriptive.Tree.mem_of_append {A : Type u_1} {T : (tree A)} {x y : List A} (h : x ++ y T) :
      x T
      theorem Descriptive.Tree.mem_of_prefix {A : Type u_1} {T : (tree A)} {x y : List A} (h' : x <+: y) (h : y T) :
      x T
      instance Descriptive.Tree.instTransListSubtypeSetMemCompleteSublatticeTreeIsPrefix {A : Type u_1} :
      Trans List.IsPrefix (fun (x : List A) (T : (tree A)) => x T) fun (x : List A) (T : (tree A)) => x T
      Equations
        theorem Descriptive.Tree.singleton_mem {A : Type u_1} (T : (tree A)) {a : A} {x : List A} (h : a :: x T) :
        [a] T
        @[simp]
        theorem Descriptive.Tree.tree_eq_bot {A : Type u_1} {T : (tree A)} :
        T = []T
        theorem Descriptive.Tree.take_mem {A : Type u_1} {T : (tree A)} {n : } (x : T) :
        List.take n x T
        def Descriptive.Tree.take {A : Type u_1} {T : (tree A)} (n : ) (x : T) :
        T

        A variant of List.take internally to a tree

        Equations
          Instances For
            @[simp]
            theorem Descriptive.Tree.take_coe {A : Type u_1} {T : (tree A)} (n : ) (x : T) :
            (take n x) = List.take n x
            @[simp]
            theorem Descriptive.Tree.take_take {A : Type u_1} {T : (tree A)} (m n : ) (x : T) :
            take m (take n x) = take (min m n) x
            @[simp]
            theorem Descriptive.Tree.take_eq_take {A : Type u_1} {T : (tree A)} {x : T} {m n : } :
            take m x = take n x min m (↑x).length = min n (↑x).length
            def Descriptive.Tree.subAt {A : Type u_1} (T : (tree A)) (x : List A) :
            (tree A)

            The residual tree obtained by regarding the node x as new root

            Equations
              Instances For
                @[simp]
                theorem Descriptive.Tree.mem_subAt {A : Type u_1} (T : (tree A)) (x y : List A) :
                y subAt T x x ++ y T
                @[simp]
                theorem Descriptive.Tree.subAt_nil {A : Type u_1} (T : (tree A)) :
                subAt T [] = T
                @[simp]
                theorem Descriptive.Tree.subAt_append {A : Type u_1} (T : (tree A)) (x y : List A) :
                subAt (subAt T x) y = subAt T (x ++ y)
                theorem Descriptive.Tree.subAt_mono {A : Type u_1} {S : (tree A)} (T : (tree A)) (x : List A) (h : S T) :
                subAt S x subAt T x
                def Descriptive.Tree.drop {A : Type u_1} (T : (tree A)) (n : ) (x : T) :
                (subAt T (take n x))

                A variant of List.drop that takes values in subAt

                Equations
                  Instances For
                    @[simp]
                    theorem Descriptive.Tree.drop_coe {A : Type u_1} (T : (tree A)) (n : ) (x : T) :
                    (drop T n x) = List.drop n x
                    def Descriptive.Tree.pullSub {A : Type u_1} (T : (tree A)) (x : List A) :
                    (tree A)

                    Adjoint of subAt, given by pasting x before the root of T. Explicitly, elements are prefixes of x or x with an element of T appended

                    Equations
                      Instances For
                        theorem Descriptive.Tree.mem_pullSub_short {A : Type u_1} {T : (tree A)} {x y : List A} (hl : y.length x.length) :
                        y pullSub T x y <+: x [] T
                        theorem Descriptive.Tree.mem_pullSub_long {A : Type u_1} {T : (tree A)} {x y : List A} (hl : x.length y.length) :
                        y pullSub T x zT, y = x ++ z
                        @[simp]
                        theorem Descriptive.Tree.mem_pullSub_append {A : Type u_1} {T : (tree A)} {x y : List A} :
                        x ++ y pullSub T x y T
                        @[simp]
                        theorem Descriptive.Tree.mem_pullSub_self {A : Type u_1} {T : (tree A)} {x : List A} :
                        x pullSub T x [] T
                        theorem Descriptive.Tree.pullSub_subAt {A : Type u_1} (T : (tree A)) (x : List A) :
                        pullSub (subAt T x) x T
                        @[simp]
                        theorem Descriptive.Tree.subAt_pullSub {A : Type u_1} (T : (tree A)) (x : List A) :
                        subAt (pullSub T x) x = T
                        theorem Descriptive.Tree.pullSub_mono {A : Type u_1} {S : (tree A)} (T : (tree A)) (h : S T) (x : List A) :
                        theorem Descriptive.Tree.pullSub_adjunction {A : Type u_1} (S T : (tree A)) (x : List A) :
                        pullSub S x T S subAt T x
                        @[simp]
                        theorem Descriptive.Tree.pullSub_nil {A : Type u_1} (T : (tree A)) :
                        @[simp]
                        theorem Descriptive.Tree.pullSub_append {A : Type u_1} (T : (tree A)) (x y : List A) :
                        pullSub (pullSub T y) x = pullSub T (x ++ y)