For the null exclusion, it is possible to define a subtype of an access type that excludes the null values:
type Day_Of_Month_Access is access Day_Of_Month;
subtype Day_Of_Month_Not_Null_Access is not null Day_Of_Month_Access;
I haven't found any reference for defining a subtype of an access type that removes the read-write possibility of the type, something like this (invented) example:
type Day_Of_Month_Access is access all Day_Of_Month;
subtype Day_Of_Month_Constant_Access is Day_Of_Month_Access with Access_Constant;
Is this kind of subtype impossible in current Ada? Why is it so?
I've spent a couple of days looking at this, and I believe the answer to be no, you cannot constrain a subtype using the constant keyword. The pertinent sections are:
3.2.2 Subtype Declarations
Note here the lack of mentioning "constant" in the subtype definition
and: 3.10 Access Types
You can see here that null_exclusion and constant are in separate parts of the definition, so they seem unrelated from each other.