I believe someone else can show code of Bitcoin Core (or other full node software) which check whether total of newly mined Bitcoin on a block doesn't exceed current block reward.
Here you go:
https://github.com/bitcoin/bitcoin/blob/f1a9fd627b1a669c4dfab797da42825230708f2a/src/validation.cpp#L2415blockReward is a
CAmount, and it is the sum of transaction fees plus the amount of
GetBlockSubsidy. Provided that currently it start with 50 coins and is divided by 2^halvings, increasing the block subsidy would make this incompatible. However, resulting in less than 21 million coins can be soft forked.
It can be done, but I presume that the post-softfork nodes will treat the units of the system differently than the pre-softfork nodes. So different, that the post-softfork transactions will not be validated by the pre-softfork. Pre-softfork nodes will receive something like Alice sends 0 coins to Bob (with an extra note indicating that it's a softfork), and in post-softfork nodes, these 0 coins will be accompanied by some signature that spends new, post-softfork coins.