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.instSetLikeSubtypeSetListMemCompleteSublatticeTree_coe (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
    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)