{"id":"pncounter-composes-gcounters","text":"`PNCounter` delegates entirely to two `GCounter` instances (`p` for increments, `n` for decrements); it contains no independent merge or counting logic","truth_value":"IN","source":"entries/2026/05/29/conflict-free-replicated-data-types-crdts.md","source_url":"","source_hash":"","justifications":[],"dependents":[],"metadata":{"example":"class PNCounter:\n    def __init__(self, replica_id):\n        self.p = GCounter(replica_id)  # increments\n        self.n = GCounter(replica_id)  # decrements\n    def value(self):\n        return self.p.value() - self.n.value()"},"explanation":{"steps":[{"node":"pncounter-composes-gcounters","truth_value":"IN","reason":"premise"}]}}