pncounter-composes-gcounters

Status: IN

`PNCounter` delegates entirely to two `GCounter` instances (`p` for increments, `n` for decrements); it contains no independent merge or counting logic

Source: entries/2026/05/29/conflict-free-replicated-data-types-crdts.md

Example

class PNCounter:
    def __init__(self, replica_id):
        self.p = GCounter(replica_id)  # increments
        self.n = GCounter(replica_id)  # decrements
    def value(self):
        return self.p.value() - self.n.value()

JSON