To Foreign Key or not to Foreign Key..... (inet -> cidr)
To answer my own question here, here is what I eventually did:


Function ip_block(inet) to look up the ip block record of an inet address.
Check constraint to make sure that returns not null for appropriate classes of addresses.  That would be triggered on insert or update to the assignments table.
Trigger function to check assignments table for addresses in a block and raise an RI exception if such are found.
Trigger which runs the above function when the block_def of the ip block is updated, or the ip block is deleted.


I will leave this answer unaccepted for a while to see if anyone else has a better approach.  However the amount of code to actually do this turned out to be a lot less than expected so I am pretty happy with it so far.