Parallel doesn't mean multiple cores. It means two tasks are worked on simultaneously, even if that means switching rapidly between them. Are single threaded superscalar processors "parallel" because they have multiple ALUs (and they do in fact execute multiple instructions "simultaneously", but carefully ensure it's always logically equivalent to serial execution)? And when there's a single memory unit, even a multi-core machine is still rapidly switching between tasks in some parts (maybe I'm getting something wrong about how exactly memory bus hardware works, but I'm completely ignorant of those details because they make no difference to how code logically executes).
Threads (and Tasks in Swift Concurrency) are software parallelism, cores are hardware parallelism. The only difference that makes to code is how locking primitives are implemented. In software parallelism, locks can be implemented in software as mutexes. In hardware parallelism, the hardware has to supply locks as atomic instructions. In either situation, code that creates multiple threads/tasks is abandoning guaranteed in-order execution, whether that is achieved through a scheduler loop in software or extra hardware resources.
It remains that "parallel" and "concurrent" are synonyms. Introducing "concurrency" into code can only mean removing order guarantees that were there before introducing concurrency. I once again ask what could it possibly mean to make code "concurrent" but that doesn't mean removing some order guarantee?