1# Discrepancias haz ↔ oráculo CALM
2
3Registro de los casos donde el veredicto cohomológico (`H¹`) **no** coincide con
4el oráculo CRDT/CALM. Como dice el SDD (§8, §11 R1), esto no es un bug a esconder:
5es el resultado científico del proyecto — dónde y por qué la Hipótesis H (§2.2)
6se rompe bajo la codificación lineal del MVP.
7
8Reproducibles con el test `oracle::tests::discrepancias_conocidas_persisten` y los
9casos de `oracle::casos_de_discrepancia()`.
10
11## Resumen
12
13| Caso | Oráculo (CALM) | Haz (`H¹`) | ¿Coinciden? |
14|---|---|---|---|
15| `triangulo-monotono` | corre libre | `H¹ = 1` → coordina | ❌ |
16| `cuadrado-monotono` | corre libre | `H¹ = 1` → coordina | ❌ |
17| (general) dato **monótono** sobre grafo de compartición **cíclico** | corre libre | `H¹ = b₁ ≠ 0` | ❌ |
18
19En cambio, **coinciden** en todo el régimen de `oracle::casos_de_acuerdo()`
20(≥20 casos): sharing monótono acíclico y cualquier configuración con al menos
21una operación no monótona.
22
23## La discrepancia, en detalle
24
25**El caso.** Tres réplicas comparten un dato **monótono** (p.ej. un `GCounter`)
26en un triángulo: 0—1, 1—2, 2—0. Todas las operaciones son monótonas.
27
28**Qué dice CALM (oráculo).** Un `GCounter` se funde por máximo casilla a casilla;
29el join siempre existe y es único. No hay operación que retracte conocimiento,
30luego la configuración es **coordination-free**. El ciclo en el grafo de
31compartición es irrelevante: más caminos para difundir la misma información
32monótona no crean un conflicto.
33
34**Qué dice el haz.** La codificación lineal del MVP modela cada dato compartido
35como una restricción de **acuerdo** (identidad). Sobre el triángulo, el haz
36constante tiene `dim H¹ = b₁ = E − V + C = 3 − 3 + 1 = 1`. El motor reporta una
37obstrucción y pide coordinar.
38
39**Por qué ocurre (§2.3, R1).** La cohomología de haces es **lineal**; los
40retículos de los CRDTs son **de orden** (join-semilattices). Al aplanar el orden
41a álgebra lineal, el haz pierde la información de que la fusión monótona *siempre*
42pega las secciones locales. Lo que le queda es la topología pura del grafo, y la
43topología de un ciclo tiene `H¹ ≠ 0` con independencia de los datos. El haz
44"ve" así una obstrucción **topológica** donde CALM no ve ninguna **semántica**.
45
46Dicho de otro modo: bajo esta codificación, `H¹ = 0 ⟺ el grafo de compartición
47es acíclico`, un enunciado **puramente topológico** que solo coincide con CALM
48cuando el ciclo, de existir, transporta una operación no monótona (y por eso la
49codificación honesta añade un segundo enlace en conflicto solo en ese caso).
50
51## Consecuencia para la Hipótesis H
52
53La Hipótesis H (`H¹ = 0 ⟺ coordination-free`) **se sostiene** en el MVP para
54configuraciones cuyo sharing monótono es acíclico, y **falla** para datos
55monótonos sobre grafos cíclicos. La dirección que falla es conservadora: el haz
56pide coordinación de más (falsos positivos), nunca de menos. No hemos observado
57el fallo inverso (haz dice "libre" donde CALM dice "coordina").
58
59## Camino de salida (fuera del MVP, §2.3 / §11 Q2)
60
61La cura propuesta por el diseño es abandonar los haces valuados en espacios
62vectoriales y pasar a **haces valuados en retículos / posets** (la generalización
63"de Tarski"), donde la fusión monótona es parte de la estructura y no se pierde al
64linealizar. Ahí un ciclo de acuerdos monótonos debería tener obstrucción trivial.
65Es la extensión de investigación sin fecha del plan de hitos.
DISCREPANCIES.md
Discrepancias haz ↔ oráculo CALM
Registro de los casos donde el veredicto cohomológico (H¹) no coincide con
el oráculo CRDT/CALM. Como dice el SDD (§8, §11 R1), esto no es un bug a esconder:
es el resultado científico del proyecto — dónde y por qué la Hipótesis H (§2.2)
se rompe bajo la codificación lineal del MVP.
Reproducibles con el test oracle::tests::discrepancias_conocidas_persisten y los
casos de oracle::casos_de_discrepancia().
Resumen
| Caso | Oráculo (CALM) | Haz (H¹) | ¿Coinciden? |
triangulo-monotono | corre libre | H¹ = 1 → coordina | ❌ |
cuadrado-monotono | corre libre | H¹ = 1 → coordina | ❌ |
| (general) dato monótono sobre grafo de compartición cíclico | corre libre | H¹ = b₁ ≠ 0 | ❌ |
En cambio, coinciden en todo el régimen de oracle::casos_de_acuerdo()
(≥20 casos): sharing monótono acíclico y cualquier configuración con al menos
una operación no monótona.
La discrepancia, en detalle
El caso. Tres réplicas comparten un dato monótono (p.ej. un GCounter)
en un triángulo: 0—1, 1—2, 2—0. Todas las operaciones son monótonas.
Qué dice CALM (oráculo). Un GCounter se funde por máximo casilla a casilla;
el join siempre existe y es único. No hay operación que retracte conocimiento,
luego la configuración es coordination-free. El ciclo en el grafo de
compartición es irrelevante: más caminos para difundir la misma información
monótona no crean un conflicto.
Qué dice el haz. La codificación lineal del MVP modela cada dato compartido
como una restricción de acuerdo (identidad). Sobre el triángulo, el haz
constante tiene dim H¹ = b₁ = E − V + C = 3 − 3 + 1 = 1. El motor reporta una
obstrucción y pide coordinar.
Por qué ocurre (§2.3, R1). La cohomología de haces es lineal; los
retículos de los CRDTs son de orden (join-semilattices). Al aplanar el orden
a álgebra lineal, el haz pierde la información de que la fusión monótona siempre
pega las secciones locales. Lo que le queda es la topología pura del grafo, y la
topología de un ciclo tiene H¹ ≠ 0 con independencia de los datos. El haz
"ve" así una obstrucción topológica donde CALM no ve ninguna semántica.
Dicho de otro modo: bajo esta codificación, H¹ = 0 ⟺ el grafo de compartición es acíclico, un enunciado puramente topológico que solo coincide con CALM
cuando el ciclo, de existir, transporta una operación no monótona (y por eso la
codificación honesta añade un segundo enlace en conflicto solo en ese caso).
Consecuencia para la Hipótesis H
La Hipótesis H (H¹ = 0 ⟺ coordination-free) se sostiene en el MVP para
configuraciones cuyo sharing monótono es acíclico, y falla para datos
monótonos sobre grafos cíclicos. La dirección que falla es conservadora: el haz
pide coordinación de más (falsos positivos), nunca de menos. No hemos observado
el fallo inverso (haz dice "libre" donde CALM dice "coordina").
Camino de salida (fuera del MVP, §2.3 / §11 Q2)
La cura propuesta por el diseño es abandonar los haces valuados en espacios
vectoriales y pasar a haces valuados en retículos / posets (la generalización
"de Tarski"), donde la fusión monótona es parte de la estructura y no se pierde al
linealizar. Ahí un ciclo de acuerdos monótonos debería tener obstrucción trivial.
Es la extensión de investigación sin fecha del plan de hitos.