For my enlightenment, why use LATERAL here? I get the same result with a simple CROSS JOIN (though overall I like the clever solution).
To be explicit, I think. CROSS JOIN function() implies lateral in the implementation but you can always specify it if desired. Like saying LEFT OUTER JOIN instead of LEFT JOIN
If it wasn't lateral the reference to number in "generate_series(1, number)" would fail.