In the protocol rules for validating transactions it says:
Rule 9:
For each input, if the referenced output exists in any other tx in the pool, reject this transaction.[5]
I assume that when a node receives a transaction it has to validate it applying those rules before adding it to the memory pool and resending it. Also miners will only add transactions to blocks if they are validated, that is, they are in the memory pool. Please correct me if I'm wrong.
Let's say I broadcast a valid transaction with such a low fee that no miner is willing to add it to a block, but it is valid, nodes who received it validated it and miners also validated it but it is stuck in the limbo, it is not in any block so the recipient cannot reference any output in this transaction.
Is there any way of re-spending the inputs referenced in this transaction? I think I have to wait until the transaction is removed from the memory pool of the miners but I'm not sure. If this is true, how long does it take?