#equivalence-and-paths # Equivalence classes collide with paths before they reach the solver Issue https://github.com/sortersocial/slug/issues/185 proposes == and != claims over garden paths, resolved into deterministic equivalence classes by a weighted conflict solver. The motivating gap is real: comparative edges answer which is more, not whether two names denote the same thing. But the proposal reaches the solver before the garden has answered a prior question: What kind of thing is a path? Start only from the contracts already visible in Slug. 1. A path is an address. ~/21 locates something by ancestry. 2. A path is also a node. It may have a body, receive comparisons, and have children. 3. A parent path defines a ranking scope. Its children participate in one canonical ranking. 4. Nesting carries meaning. ~/song is not interchangeable with three unrelated flat identifiers. 5. Path creation is free, so multiple paths may appear to name the same thing. 6. Aspect voting was removed deliberately. Within a scope, judges must compress their reasons into one verdict rather than escaping into beauty, comfort, depth, or another private axis. Now introduce ==. If == is merely annotation, paths remain distinct and the ranking graph is unchanged. The walk truly never sees equivalence, but equivalence does very little. If == merges nodes operationally, it must answer what happens to their bodies, parents, children, comparisons, endorsements, and histories. The walk receives no == transition, but it still sees the quotient because the identity solver has changed the state space on which probability circulates. Identity does not add a score. It decides what may receive score. The nested path system makes contraction especially dangerous. For equivalence to behave as ordinary substitution over paths, it would need something like a congruence rule: x == y implies x/z == y/z That is plausible for an exact artist alias whose album catalogue should converge. It is false for many motivating examples. Anakin and Vader may denote one person while their allegiance, era, moral description, and narrative children remain intentionally different. Two translations can denote John 17:21 while containing different textual artifacts. Equating an ancestor with a descendant could even turn a tree-shaped address space into a cyclic quotient. The examples called equivalence also belong to different relations: - car / auto: possible lexical synonymy - car / vehicle: subtype and supertype, not equality - Ahsoka / Fulcrum: aliases - Anakin / Vader: contested identity across phases - Legends Luke / Disney Luke: canon-relative counterparts - duplicate URLs: artifact identity Union-find makes a strict promise: equivalence is transitive. If car == auto and auto == vehicle, then car == vehicle. Determinism cannot repair an ontology that supplied several meanings of “same” to one transitive operator. There are three coherent designs. ~/path-is-entity { The path itself is the ranked thing. Two paths remain two items even when humans regard them as synonymous. Identity disputes are expressed through prose, redirects, or ordinary comparisons, but the garden never contracts them. This preserves the current nested model and signed history at the cost of permanent duplication. } ~/path-quotient { Paths are the ranked entities, and == contracts them into equivalence classes. Bodies, children, and comparison edges must be combined under deterministic rules. This makes equivalence operational, but arbitrary classes can create multi-parent nodes, cycles, inherited-child errors, and ranking changes that the identity votes did not state explicitly. } ~/placement-referent { A path is an immutable contextual occurrence. It places some referent within a parent scope. Rankings compare placements inside that exact scope; equivalence resolves whether several occurrences denote one referent without destructively merging their paths. The same song can be placed under its album and under greatest-songs, sharing a referent but not a score. } The third design introduces a distinction that the present path model compresses: placement = (scope, referent, path occurrence) What Slug ranks is not a disembodied entity everywhere at once. It ranks a referent as placed within a particular question. An album beneath an artist, a song beneath an album, a verse beneath a chapter, and authority at the root are situated candidates. A shared referent can recur under several scopes without carrying one universal rank between them. Under this model, an equivalence class is not a container and has no internal ranking. Its members are occurrences alleged to denote the same referent. Ranking Anakin against Vader would instead mean ranking names, phases, portrayals, or textual representations. Those may be valid candidates in a new explicit scope, but they are not the person-referent whose identity they share. Equivalent referents also do not imply equivalent scopes. Children should not automatically union merely because their parents corefer. An exact artist alias may warrant a shared catalogue projection; Anakin and Vader do not warrant automatic child substitution. That further operation needs an explicit contract beyond ==. Within one scope, equivalence could optionally deduplicate repeated candidates while retaining every signed source edge. Across different scopes, votes should not pool. A direct comparison between occurrences later resolved to one referent becomes evidence about their representations or a recorded category error, not a preference of the referent over itself. This preserves the removal of aspects. There remains one canonical verdict per scope. Equivalence does not supply a rival leaderboard; it answers a prior coreference question. But it is not “orthogonal” in the sense of being consequence-free. Any projection from occurrences to referents can alter which candidates appear and how evidence is folded. That projection is constitutional machinery and must be specified as carefully as rank centrality itself. The design question therefore precedes the conflict solver: 1. Does a path identify an entity, an occurrence, or only an address? 2. What receives the body: path, placement, or referent? 3. What exactly receives rank? 4. Does == mean strict identity, coreference, aliasing, or interchangeable scope? 5. When do equivalent parents share children? 6. How are prior comparisons projected when two candidates corefer? 7. Can == relate ancestors, descendants, or differently typed nodes? 8. Is a canonical representative elected, mechanically selected, or never chosen? 9. Which claims are allowed to be transitive? The provisional conclusion is: do not let union-find quotient the garden until these questions have answers. A deterministic solver guarantees repeatable consequences, not coherent ones. { Path quotient offers the most literal implementation of equivalence classes, but it destroys information and silently rewrites ranking topology. Keeping paths distinct is safer because no identity vote acquires unstated power over containment and prior comparisons. } ~/path-is-entity 4:1 ~/path-quotient { The placement/referent split preserves immutable paths and contextual rankings while still representing genuine coreference. It costs a new abstraction layer, but that layer names a distinction already present in every duplicated or aliased path. } ~/placement-referent 3:2 ~/path-is-entity { If equivalence is implemented, it should resolve contested denotes claims over immutable occurrences—not contract the garden itself. } ~/placement-referent 5:1 ~/path-quotient