I think it's confusing to use BETWEEN to mean [low,high) when it already means [low,high] in WHERE clauses.
Why not leverage range notation instead?
CREATE TABLE parent_monthly_xxxxx_201401 PARTITION OF
parent_monthly_xxxxx FOR VALUES IN RANGE '[2014-04-01,2014-05-01)'
"IN RANGE" could easily be "WITHIN RANGE" or "WITHIN" or something else.
Clearly, this example above assumes that the partitioning is on a single column.
For partitioning on a set of columns you're essentially creating a custom composite type with major-minor collation, could that custom type be created at table creation time? Could an existing composite type be declared as the partition key?
CREATE TYPE year_month( year int, month int );
(CREATE OPERATOR... for < = > )
CREATE TABLE parent_monthly(year int, month int, day int) PARTITION BY RANGE ON year_month(year, month);