Needs a timeframe and context. Back in the, say, 1990s or maybe even early 2000s, when the modern world was just forming and the only languages students would work in were C and C++, maybe with some Bash and Perl on the side, 25k lines is a reasonable estimate for a brand new symbolic engine- a thing that in imperative languages didn't exist- with some element of typical PhD edge case over-engineering.
25k lines in fact could be considered small for that sort of C++ engine.
But it would have been reasonable at the time to explore the type system around such a thing and produce a PhD (or a couple of PhDs) from it over a period of a few years.
Of course even at that time there was prior art in the Lisp world, but after the AI winter 1980s no students were going to work in Lisp. C++ was where the jobs were going to be.
25k lines in fact could be considered small for that sort of C++ engine.
But it would have been reasonable at the time to explore the type system around such a thing and produce a PhD (or a couple of PhDs) from it over a period of a few years.
Of course even at that time there was prior art in the Lisp world, but after the AI winter 1980s no students were going to work in Lisp. C++ was where the jobs were going to be.