In classical Japanese, あり confusingly crops up in a bunch of places
where it doesn't immediately seem entirely necessary (to me):

With adjectives:

     Past tense of 熱し
   ≡ { definition }
     「熱し」の連用形+「あり」の連用形+「たり」
   ≡ { concatenation }
     熱くありたり
   ≡ { euphonic change }
     熱かりたり

   If the only requirement for たり was to attach to a 連用形, one
   would think the form 「熱し」の連用形+「たり」 ≡ 熱くたり or
   something similar would be fine, considering that constructions
   like 「熱し」の連用形+「す」 ≡ 熱くす are totally fine.

   But despite this, an intermediate あり is inserted.


With negation:

     Past tense of (negation of 思う)
   ≡ { definition }
     Past tense of (「思う」の未然形+「ず」)
   ≡ { definition }
     「思う」の未然形+「ず」の連用形+「あり」の連用形+「たり」
   ≡ { concatenation }
     思わずありたり
   ≡ { euphonic change }
     思わざりたり

   Again, if たり just needed to attach to a 連用形, it seems that
   思わずたり should have been fine, but instead an intermediate
   あり is inserted.


From just this evidence, one could perhaps argue that たり is actually
not past-tense, but ありたり is. However, this is not true, because


With verbs:

     Past tense of 思う:
   ≡ { definition }
     「思う」の連用形+「たり」
   ≡ { concatenation }
     思いたり

   In this case, あり is definitely not present.


So summarizing our evidence...

  1) たり doesn't require あり to function with verbs, it can attach
     directly to the 連用形

  2) たり does require あり to function with adjectives and the
     negation particle, despite both of these things having a
     functioning 連用形


There are some theories I can draw as to why this is the case...

  1) たり specifically wants verbs, and あり is inserted to accomplish
     this.

     However, this makes very little sense to me. I know of no other
     restriction in Japanese like "wants verb", it is always something
     else like telacity or some other semantic property.

  2) たり wants some specific semantic property for the thing it
     attaches to, and adjectives and ず cannot provide those semantics
     without a helper. This raises the question of what semantics it
     wants.


So, I'm currently subscribing to theory (2) but have absolutely no
idea how to make progress into figuring out what property たり wants
that あり provides.

Do you have any guesses?


  (Perhaps an interesting point here is that たり historically is
            「つ」の連用形+「あり」 ≡ てあり ≡ たり
   which makes things even more interesting, because 熱くて itself is
   totally fine, so syntactically there should be no issue with
   熱くたり, yet it is not used, which supporting the previous thought
   of some sort of semantic restriction.)