A discussion of the design and implementation of an RDF API.
eg: "what happens if I retract a statement twice?" is not a question that this document should attempt to answer. Such semantics are implementation considerations. I've often had the wrong knee-jerk reaction to this question ("an RDF model is a set, asserting things twice doesn't make a difference") but this is also, of course, missing this vital distinction. You don't throw things into a set; a set just _is_. The RDF API can be specified as a set of transformations (if you apply this operation to this RDF model, you get this new transformed model out) although that's unlikely to be how it's implemented. Once this specification is in place, the answers to these questions can be precisely answered with mathematics: "I take RDF model A and assert triple T, producing A'. I assert T into A', producing A''; this is the same as A'" is the explanation I was always thinking of, even if I didn't articulate that properly.
Bear in mind (see the layering discussion) that semantics-adding layers may actually perform different transformations, in which case A' and A'' above may not be the same: for example, if a layer adds provenance information to the 'assert' operation.
This notion (of building additional semantics on top of a lower layer) is a vital one (as far as I'm concerned) and the key to fast deployable RDF implementations that can act as a testing-ground for additional 'value-adding' layers.
...But I'm getting ahead of myself.