tawasuyu

tawasuyu/hifas

Motor en Rust para decidir, con demostración y no a ojo, cuándo un conjunto de réplicas local-first puede operar sin coordinación y cuándo no — y, cuando la respuesta es "sí, dentro de límites", proveer el mecanismo que lo garantiza.

Rust 24Markdown 15TOML 1358 Definiciones

⎇ 3819f9d88b41af355c05dc67f8757a46e7f348e4 DISCREPANCIES.md Markdown · 65 líneas · 3.4 KB Historia crudo

T4/M3: oráculo CRDT/CALM, batería de validación y DISCREPANCIES c4920fdc5 · Sergio ·

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

CasoOráculo (CALM)Haz (H¹)¿Coinciden?
triangulo-monotonocorre libreH¹ = 1 → coordina❌
cuadrado-monotonocorre libreH¹ = 1 → coordina❌
(general) dato monótono sobre grafo de compartición cíclicocorre libreH¹ = 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.