I've been researching the definition of functional testing and can't come across a concrete explanation and would appreciate some additional info to help reconcile this.
The two main ideas I have come across are:
Testing terminology is garbage. Everyone has their own terminology. Therefore even if you settle on one of the definitions, you should expect that others may not understand you.
Personally, I think we need to stick with the etymology that the term alludes to. Functional test means (to me) the fact that it checks business logic (functionality). We can write these tests on any level - Unit, System level, etc. It's a job of developers to determine where such test would be most effective.
But again - you'll hear people referring to Selenium tests when they say "Functional" %)
Also, I don't think that your 1st definition means that Functional Testing comprises of the levels. I think it means that it can be conducted on different levels. Which is similar to what I just wrote.
PS: Acceptance Testing is not a level either - it's the fact that you accept new code. As opposed to Regression Testing which checks that what previously worked keeps working. Though there is also a User Acceptance testing - which refers to end users playing with the system.