Documentation

Projects.Util.Data.Trie.Raw0

inductive Trie.Raw₀ (α : Type u_1) (β : Type u_2) [DecidableEq α] [Hashable α] :
Type (max u_1 u_2)
Instances For
    def Trie.Raw₀.val {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] :
    Raw₀ α βOption β
    Equations
    Instances For
      def Trie.Raw₀.mp {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] :
      Raw₀ α βStd.DHashMap.Raw α fun (x : α) => Raw₀ α β
      Equations
      Instances For
        @[simp]
        theorem Trie.Raw₀.val_mk {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {val : Option β} {mp : Std.DHashMap.Raw α fun (x : α) => Raw₀ α β} :
        (mk val mp).val = val
        @[simp]
        theorem Trie.Raw₀.mp_mk {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {val : Option β} {mp : Std.DHashMap.Raw α fun (x : α) => Raw₀ α β} :
        (mk val mp).mp = mp
        def Trie.Raw₀.isEmpty {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] (t : Raw₀ α β) :
        Equations
        Instances For
          @[instance_reducible]
          instance Trie.Raw₀.instDecidableIsEmpty {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} :
          Equations
          class inductive Trie.Raw₀.WF {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] :
          Raw₀ α βProp
          Instances
            @[simp]
            theorem Trie.Raw₀.WF.mp {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} [wf : t.WF] :
            t.mp.WF
            theorem Trie.Raw₀.WF.get1? {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} [wf : t.WF] {k : α} {t' : Raw₀ α β} (h : t.mp.get? k = some t') :
            t'.WF
            theorem Trie.Raw₀.WF.not_empty_get? {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} [wf : t.WF] {k : α} {t' : Raw₀ α β} (h : t.mp.get? k = some t') :
            theorem Trie.Raw₀.rec_2_eq {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {arr : Array (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)} {M₁ : Raw₀ α βSort u_3} {M₂ : (Std.DHashMap.Raw α fun (x : α) => Raw₀ α β)Sort u_3} {M₃ : Array (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)Sort u_3} {M₄ : List (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)Sort u_3} {M₅ : (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)Sort u_3} {H₁ : (a : Option β) → (mp : Std.DHashMap.Raw α fun (x : α) => Raw₀ α β) → M₂ mpM₁ (mk a mp)} {H₂ : (size : ) → (buckets : Array (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)) → M₃ bucketsM₂ { size := size, buckets := buckets }} {H₃ : (toList : List (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)) → M₄ toListM₃ { toList := toList }} {H₄ : M₄ []} {H₅ : (head : Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β) → (tail : List (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)) → M₅ headM₄ tailM₄ (head :: tail)} {H₆ : M₅ Std.DHashMap.Internal.AssocList.nil} {H₇ : (key : α) → (value : (fun (x : α) => Raw₀ α β) key) → (tail : Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β) → M₁ valueM₅ tailM₅ (Std.DHashMap.Internal.AssocList.cons key value tail)} :
            rec_2 H₁ H₂ H₃ H₄ H₅ H₆ H₇ arr = H₃ arr.toList (rec_3 H₁ H₂ H₃ H₄ H₅ H₆ H₇ arr.toList)
            theorem Trie.Raw₀.rec_3_eq {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {xs : List (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)} {M₁ : Raw₀ α βSort u_3} {M₂ : (Std.DHashMap.Raw α fun (x : α) => Raw₀ α β)Sort u_3} {M₃ : Array (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)Sort u_3} {M₄ : List (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)Sort u_3} {M₅ : (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)Sort u_3} {H₁ : (a : Option β) → (mp : Std.DHashMap.Raw α fun (x : α) => Raw₀ α β) → M₂ mpM₁ (mk a mp)} {H₂ : (size : ) → (buckets : Array (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)) → M₃ bucketsM₂ { size := size, buckets := buckets }} {H₃ : (toList : List (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)) → M₄ toListM₃ { toList := toList }} {H₄ : M₄ []} {H₅ : (head : Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β) → (tail : List (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)) → M₅ headM₄ tailM₄ (head :: tail)} {H₆ : M₅ Std.DHashMap.Internal.AssocList.nil} {H₇ : (key : α) → (value : (fun (x : α) => Raw₀ α β) key) → (tail : Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β) → M₁ valueM₅ tailM₅ (Std.DHashMap.Internal.AssocList.cons key value tail)} :
            rec_3 H₁ H₂ H₃ H₄ H₅ H₆ H₇ xs = List.rec H₄ (fun (x : Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β) (xs : List (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)) (acc : M₄ xs) => H₅ x xs (rec_4 H₁ H₂ H₃ H₄ H₅ H₆ H₇ x) acc) xs
            theorem Trie.Raw₀.rec_4_eq {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {xs : Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β} {M₁ : Raw₀ α βSort u_3} {M₂ : (Std.DHashMap.Raw α fun (x : α) => Raw₀ α β)Sort u_3} {M₃ : Array (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)Sort u_3} {M₄ : List (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)Sort u_3} {M₅ : Sort u_3} {H₁ : (a : Option β) → (mp : Std.DHashMap.Raw α fun (x : α) => Raw₀ α β) → M₂ mpM₁ (mk a mp)} {H₂ : (size : ) → (buckets : Array (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)) → M₃ bucketsM₂ { size := size, buckets := buckets }} {H₃ : (toList : List (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)) → M₄ toListM₃ { toList := toList }} {H₄ : M₄ []} {H₅ : (head : Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β) → (tail : List (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)) → M₅M₄ tailM₄ (head :: tail)} {H₆ : M₅} {H₇ : (key : α) → (value : (fun (x : α) => Raw₀ α β) key) → (Std.DHashMap.Internal.AssocList α fun (x : α) => Raw₀ α β)M₁ valueM₅M₅} :
            rec_4 H₁ H₂ H₃ H₄ H₅ H₆ H₇ xs = List.rec H₆ (fun (x : (_ : α) × Raw₀ α β) (xs : List ((_ : α) × Raw₀ α β)) (acc : M₅) => H₇ x.fst x.snd (Std.DHashMap.Internal.AssocList.ofList xs) (rec H₁ H₂ H₃ H₄ H₅ H₆ H₇ x.snd) acc) xs.toList
            noncomputable def Trie.Raw₀.depthAux {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] (t : Raw₀ α β) :
            Equations
            Instances For
              theorem Trie.Raw₀.depthAux_le {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} [wf : t.WF] {k : α} {t' : Raw₀ α β} (h : t.mp.get? k = some t') :
              theorem Trie.Raw₀.depthAux_le_mk {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {val : Option β} {mp : Std.DHashMap.Raw α fun (x : α) => Raw₀ α β} (wf : (mk val mp).WF) {k : α} {t : Raw₀ α β} (h : mp.get? k = some t) :
              t.depthAux < (mk val mp).depthAux
              @[irreducible]
              def Trie.Raw₀.recAux {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {γ : Raw₀ α βSort u_3} (t : Raw₀ α β) (wf : t.WF) (motive : (val : Option β) → (mp : Std.DHashMap.Raw α fun (x : α) => Raw₀ α β) → mp.WF((i : α) → (t : Raw₀ α β) → mp.get? i = some tγ t)γ (mk val mp)) :
              γ t
              Equations
              Instances For
                def Trie.Raw₀.rec' {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {γ : Raw₀ α βSort u_3} (t : Raw₀ α β) [wf : t.WF] (motive : (val : Option β) → (mp : Std.DHashMap.Raw α fun (x : α) => Raw₀ α β) → mp.WF((i : α) → (t : Raw₀ α β) → mp.get? i = some tγ t)γ (mk val mp)) :
                γ t
                Equations
                Instances For
                  def Trie.Raw₀.depth {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] (t : Raw₀ α β) [wf : t.WF] :
                  Equations
                  Instances For
                    def Trie.Raw₀.empty {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] :
                    Raw₀ α β
                    Equations
                    Instances For
                      @[instance_reducible]
                      instance Trie.Raw₀.instEmptyCollection {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] :
                      Equations
                      theorem Trie.Raw₀.empty_def {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] :
                      instance Trie.Raw₀.instWFEmptyCollection {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] :
                      @[simp]
                      theorem Trie.Raw₀.rec'_mk {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {γ : Raw₀ α βSort u_3} {val : Option β} {mp : Std.DHashMap.Raw α fun (x : α) => Raw₀ α β} [wf : (mk val mp).WF] {motive : (val : Option β) → (mp : Std.DHashMap.Raw α fun (x : α) => Raw₀ α β) → mp.WF((i : α) → (t : Raw₀ α β) → mp.get? i = some tγ t)γ (mk val mp)} :
                      (mk val mp).rec' motive = motive val mp fun (x : α) (t : Raw₀ α β) (h : mp.get? x = some t) => t.rec' motive
                      @[simp]
                      theorem Trie.Raw₀.depth_mk {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {val : Option β} {mp : Std.DHashMap.Raw α fun (x : α) => Raw₀ α β} [wf : (mk val mp).WF] :
                      (mk val mp).depth = mp.foldWith (fun (acc : ) (x : α) (t' : Raw₀ α β) (h : mp.get? x = some t') => max acc (1 + t'.depth)) 0
                      @[simp]
                      theorem Trie.Raw₀.depth_empty {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] :
                      theorem Trie.Raw₀.depth_lt {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} [wf : t.WF] {k : α} {t' : Raw₀ α β} (h : t.mp.get? k = some t') :
                      theorem Trie.Raw₀.WF.of_mem_toList {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} {p : (_ : α) × Raw₀ α β} [wf : t.WF] (h : p t.mp.toList) :
                      theorem Trie.Raw₀.wf_iff {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} :
                      t.WF t.mp.WF ∀ (k : α) (t₁ : Raw₀ α β), t.mp.get? k = some t₁t₁.WF ¬t₁.isEmpty
                      def Trie.Raw₀.setVal {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] (t : Raw₀ α β) (val : Option β) :
                      Raw₀ α β
                      Equations
                      Instances For
                        @[simp]
                        theorem Trie.Raw₀.setVal_mk {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {val val₁ : Option β} {mp : Std.DHashMap.Raw α fun (x : α) => Raw₀ α β} :
                        (mk val mp).setVal val₁ = mk val₁ mp
                        @[simp]
                        instance Trie.Raw₀.instWFSetVal {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} {x : Option β} [wf : t.WF] :
                        (t.setVal x).WF
                        @[simp]
                        theorem Trie.Raw₀.val_setVal {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} {val : Option β} :
                        (t.setVal val).val = val
                        @[simp]
                        theorem Trie.Raw₀.mp_setVal {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} {val : Option β} :
                        (t.setVal val).mp = t.mp
                        def Trie.Raw₀.erase1 {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] (t : Raw₀ α β) (i : α) :
                        Raw₀ α β
                        Equations
                        Instances For
                          @[simp]
                          theorem Trie.Raw₀.erase1_mk {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {val : Option β} {mp : Std.DHashMap.Raw α fun (x : α) => Raw₀ α β} {i : α} :
                          (mk val mp).erase1 i = mk val (mp.erase i)
                          @[simp]
                          theorem Trie.Raw₀.val_erase1 {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} {i : α} :
                          (t.erase1 i).val = t.val
                          @[simp]
                          theorem Trie.Raw₀.mp_erase1 {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} {i : α} :
                          (t.erase1 i).mp = t.mp.erase i
                          @[simp]
                          instance Trie.Raw₀.instWFErase1 {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} {i : α} [wf : t.WF] :
                          (t.erase1 i).WF
                          def Trie.Raw₀.insert1 {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] (t : Raw₀ α β) (i : α) (t₁ : Raw₀ α β) :
                          Raw₀ α β
                          Equations
                          Instances For
                            theorem Trie.Raw₀.insert1_mk {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {val : Option β} {mp : Std.DHashMap.Raw α fun (x : α) => Raw₀ α β} {i : α} {t₁ : Raw₀ α β} :
                            (mk val mp).insert1 i t₁ = mk val (if t₁.isEmpty then mp.erase i else mp.insert i t₁)
                            @[simp]
                            theorem Trie.Raw₀.val_insert1 {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} {i : α} {t₁ : Raw₀ α β} :
                            (t.insert1 i t₁).val = t.val
                            theorem Trie.Raw₀.mp_insert1 {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t t₁ : Raw₀ α β} {i : α} :
                            (t.insert1 i t₁).mp = if t₁.isEmpty then t.mp.erase i else t.mp.insert i t₁
                            @[simp]
                            instance Trie.Raw₀.instWFInsert1 {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t t₁ : Raw₀ α β} {i : α} [wf : t.WF] [wf₁ : t₁.WF] :
                            (t.insert1 i t₁).WF
                            def Trie.Raw₀.get1? {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] (t : Raw₀ α β) (i : α) :
                            Option (Raw₀ α β)
                            Equations
                            Instances For
                              theorem Trie.Raw₀.get1?_erase1 {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} {i j : α} [wf : t.WF] :
                              (t.erase1 i).get1? j = if i = j then none else t.get1? j
                              theorem Trie.Raw₀.get1?_insert1 {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t : Raw₀ α β} {i j : α} {t₁ : Raw₀ α β} [wf : t.WF] :
                              (t.insert1 i t₁).get1? j = if i = j then if t₁.isEmpty then none else some t₁ else t.get1? j
                              @[simp]
                              theorem Trie.Raw₀.get1?_erase1_eq_some_iff {α : Type u_1} {β : Type u_2} [ha₁ : DecidableEq α] [ha₂ : Hashable α] {t t₁ : Raw₀ α β} {i j : α} [wf : t.WF] :
                              (t.erase1 i).get1? j = some t₁ i j t.get1? j = some t₁