In this article we are starting with the idea to remove BGP from the network core. This is because the core can be very large and we don’t want to have to make many manual changes each time something is modified.
Our objective is to let the PE routers talk BGP to other PE routers and remove the requirement for P routers to talk BGP. We could have many P routers in the path between two PE routers (e.g. PE-P-P-P-P-P-P-P-PE) so this would be a great optimisation.
So your first point is correct. BGP prefixes are learned from PE to PE, not via the P routers.
Regarding GRE, don’t worry about this too much. It is used as one example of how we could stop using BGP on the P routers. We are meant to consider that using MPLS in the core is similar to using GRE in the core as they are both methods of allowing PE routers to handle all the BGP routing logic and the P routers just forward data in a “dumb” way between PE routers.
The reason we see many more MPLS cores than GRE cores is that there are some extra advantages to using MPLS such as better performance in large networks but, in our lesson, they have both achieved the same thing; removing BGP from the P router core.
I hope this helps,