How property based testing should replace unit testing?

I'm learning about property based testing (in Clojure).
From what I've read, it comes to replace unit testing, so programmers just write the predicates and auto generate the tests.

The supplied examples are too simple (for js and haskell as well).
I understand that writing predicates for sum function is straightforward,
as it's just mathematical facts.

But what about more domain specific predicates (which are not so complex)?
For example, which predicates should cover a sort function to ensure that the function actually works?
While of course, not implementing the function in the predicate.

I mean, sort(sort(a)) == sort(a) doesn't say anything about the function implementation,
as it may just be the identity function.

Or a function that takes a collection of strings, and return the collection where each string has been capitalized.

What actually property based testing solve and when to use it?