{motive_1 : Lean.Lsp.Ipc.ModuleHierarchy → Sort u} →
  {motive_2 : Array Lean.Lsp.Ipc.ModuleHierarchy → Sort u} →
    {motive_3 : List Lean.Lsp.Ipc.ModuleHierarchy → Sort u} →
      ((item : Lean.Lsp.LeanImport) →
          (children : Array Lean.Lsp.Ipc.ModuleHierarchy) →
            motive_2 children → motive_1 { item := item, children := children }) →
        ((toList : List Lean.Lsp.Ipc.ModuleHierarchy) → motive_3 toList → motive_2 { toList := toList }) →
          motive_3 [] →
            ((head : Lean.Lsp.Ipc.ModuleHierarchy) →
                (tail : List Lean.Lsp.Ipc.ModuleHierarchy) → motive_1 head → motive_3 tail → motive_3 (head :: tail)) →
              (t : List Lean.Lsp.Ipc.ModuleHierarchy) → motive_3 t