{α : Type} →
  {motive_1 : Lean.Meta.DiscrTree.Trie α → Sort u} →
    {motive_2 : Array (Lean.Meta.DiscrTree.Key × Lean.Meta.DiscrTree.Trie α) → Sort u} →
      {motive_3 : List (Lean.Meta.DiscrTree.Key × Lean.Meta.DiscrTree.Trie α) → Sort u} →
        {motive_4 : Lean.Meta.DiscrTree.Key × Lean.Meta.DiscrTree.Trie α → Sort u} →
          ((vs : Array α) →
              (children : Array (Lean.Meta.DiscrTree.Key × Lean.Meta.DiscrTree.Trie α)) →
                motive_2 children → motive_1 (Lean.Meta.DiscrTree.Trie.node vs children)) →
            ((toList : List (Lean.Meta.DiscrTree.Key × Lean.Meta.DiscrTree.Trie α)) →
                motive_3 toList → motive_2 { toList := toList }) →
              motive_3 [] →
                ((head : Lean.Meta.DiscrTree.Key × Lean.Meta.DiscrTree.Trie α) →
                    (tail : List (Lean.Meta.DiscrTree.Key × Lean.Meta.DiscrTree.Trie α)) →
                      motive_4 head → motive_3 tail → motive_3 (head :: tail)) →
                  ((fst : Lean.Meta.DiscrTree.Key) →
                      (snd : Lean.Meta.DiscrTree.Trie α) → motive_1 snd → motive_4 (fst, snd)) →
                    (t : Array (Lean.Meta.DiscrTree.Key × Lean.Meta.DiscrTree.Trie α)) → motive_2 t