README.md

Núcleo Rust del Lenguaje SV

Continuidad 07/09/2026 · RETP-082: los apartados R0-6 siguientes conservan su alcance histórico. El frontend SV y los destinos vigentes están descritos en el índice principal; el compilador Python ha sido retirado y la conformidad usa directamente los esperados comprometidos.

Esta carpeta contiene la realización compartida en Rust del núcleo semántico del Lenguaje SV para destinos nativo y WebAssembly.

La implementación mantiene una sola fuente semántica en sv_core. sv_wasm es un adaptador material del mismo núcleo y no contiene una realización alternativa de Tri, Nat, Frame, C01, C02, C03 ni de la representación IR 0.3.

Consulta del manifiesto y preparación del entorno · 13/09/2026

El comando manifiesto-sv muestra el acta completa de prohibición de uso bélico y primacía de supervivencia humana, incorporada en sv_core al compilar. También está disponible como sv-native manifiesto-sv. No necesita red ni el repositorio al ejecutarse; conserva el texto español canónico, incluida su capa Rosetta declarativa. Mostrar el acta no acredita por sí solo mecanismos de cumplimiento de sus prohibiciones.

sh tools/preparar_rust_sv.sh
cargo +1.98.0 build --manifest-path rust/Cargo.toml --release -p sv_native --offline
./rust/target/release/manifiesto-sv
./rust/target/release/sv-native manifiesto-sv

Para disponer del comando en el directorio de ejecutables de Cargo:

cargo +1.98.0 install --path rust/sv_native --offline
manifiesto-sv

El directorio de ejecutables de Cargo debe estar en PATH; la instalación y el estado del entorno se comprueban con el procedimiento enlazado. No es necesario instalar Rust en el equipo del autor para ejecutar las pruebas del laboratorio remoto. Se conserva contrato, reproducción y resultados. La incorporación añade una API documental; gramática, IR y perfiles fuente permanecen con sus versiones vigentes.

Estado material

El núcleo contiene actualmente:

Tri = {0, 1, U}
Nat de precisión decimal no limitada por el tamaño de palabra
Frame con cierre estructural y causal J-F0…J-F5
C01: separación de captura/admisibilidad respecto de Tri
C02: revisión identificada de U sin clausura automática
C03: cierre relacional y causal de Frame
R0-6: representación Rust tipada y cerrada de la IR 0.3 emitible

Las versiones observables integradas permanecen:

Gramática    = 0.2
IR           = 0.3
serializador = 0.1.0

Los identificadores de la superficie y de la IR se mantienen diferenciados cuando corresponde. Para Tri, la superficie canónica utiliza 0, 1, U, mientras que la IR vigente conserva las etiquetas nominales Zero, One, U.

Naturales

La gramática define nat como una secuencia decimal sin cota semántica y la IR declara Frame.index : Nat. Por ello, sv_core no representa ese índice mediante u64, usize ni otro entero limitado por la plataforma.

Nat conserva el valor mediante una representación decimal canónica de precisión arbitraria. En el alcance actual sólo se requieren identidad y conservación exacta; no se exponen aritmética ni relación de orden sobre naturales. Los ceros iniciales se normalizan y el material no decimal se rechaza antes de constituir el valor.

Frame y C03

C03 es el cierre relacional y causal de Frame; no existe un segundo constructor ni una segunda semántica para esta propiedad. La constitución de Frame aplica J-F0…J-F5 sobre relaciones previamente resueltas:

La comprobación exige coherencia de lo declarado y no impone exhaustividad.

Las estructuras auxiliares Resolved* son internas a sv_core. No forman parte de la interfaz pública y no conceden a los adaptadores autoridad para declarar por sí mismos que una relación ha sido resuelta.

Toda violación del cierre materializado se identifica mediante E308 (FrameClosureViolation).

La batería específica de C03 revalida el cierre completo después de la incorporación de C01 y C02 sin introducir nueva lógica de producción: acepta un subconjunto declarado coherente y rechaza escapes causales en evaluaciones, compuertas, supervisión y criticidades no producibles.

C01 — captura y admisibilidad

La captura y la admisibilidad técnicas permanecen separadas de la semántica ternaria:

CaptureOutcome::Bottom ↛ Tri
NotAdmitted            ↛ Tri
fallo técnico          ↛ Tri.U

AdmissibilityState es un conjunto cerrado representado por:

Ok
Degraded
NotAdmitted

Ok y Degraded son estados positivamente admitidos; NotAdmitted no. Esta clasificación no produce por sí misma ningún valor de Tri.

Las etiquetas heredadas Failed y U no pertenecen a AdmissibilityState. Las infracciones materializadas de AdmissibilitySpec se identifican mediante E110 (InvalidAdmissibilitySpec).

Una observación admitida sólo puede alcanzar legítimamente Tri.U por una ternarización semántica cuya partition_u corresponda; no existe conversión automática desde la admisibilidad.

C02 — revisión identificada de U

La revisión se dirige a una ocurrencia constituida e identificable:

ResolutionTarget = (EvaluableStateRef, position)

La posición es uno-basada. El objetivo debe ser un CellState o CoupledState evaluable y el valor efectivo de la posición debe ser exactamente Tri.U. En CoupledState se utiliza el vector actualizado como vector efectivo.

ResSpec conserva las identidades de contexto y mecanismo. Mientras no exista una relación ampliada expresamente constituida, la instancia de revisión debe coincidir exactamente con ambas identidades. Las violaciones se identifican mediante E305 (UnsafeUResolution).

ResolutionRecord separa:

previous
reviewed_to
resolved_to

El material de revisión no reescribe el estado objetivo ni constituye clausura positiva. En el circuito actualmente materializado:

previous    = U
resolved_to = U

incluso cuando reviewed_to proponga 0 o 1. Por tanto, permanece representable U → revisión → U.

La constitución de ResolutionRecord permanece dentro de sv_core; los adaptadores no disponen de una construcción pública que permita fabricar una clausura positiva.

R0-6 — correspondencia IR 0.3

sv_core dispone de una representación Rust cerrada para la estructura que la etapa frontal 0.2 emite como IR 0.3.

IrProgram fija por construcción las versiones canónicas y conserva:

source_file
source_sha256
objects     — orden de emisión preservado
operations  — orden de emisión preservado

Los niveles y nombres de tipo de cada objeto no son cadenas suministradas por el llamador: derivan de una enumeración cerrada IrObjectKind. El radio emitible comprende 22 tipos de objeto distribuidos en N0, N1, N3 y N4. Las operaciones se representan mediante siete variantes cerradas de IrOperationKind, con type y result_type derivados de la variante y no modificables como datos independientes.

La representación conserva, entre otros, los campos de AdmissibilitySpec, Frame, TransitionData, Trajectory, Domain y la operación resolve. El orden declarado de los estados de AdmissibilitySpec se preserva explícitamente, de modo que una permutación válida no se reduce a un conjunto sin orden. Frame.immutable y Trajectory.append_only se mantienen como invariantes constitutivos verdaderos en la representación.

No existe un mapa genérico de campos capaz de declarar tipos IR nuevos o combinaciones arbitrarias de level, type y result_type. La constitución de IrProgram, IrObject e IrOperation permanece interna a sv_core hasta que se enlace el descenso Rust completo; los consumidores externos disponen de lectura de una representación ya constituida, no de autoridad para fabricarla.

R0-6 no implementa todavía la serialización JSON canónica. La correspondencia estructural y tipada se mantiene separada de la codificación textual y de las pruebas de equivalencia entre realizaciones, que pertenecen a etapas posteriores.

Fronteras actuales

Este núcleo no acredita todavía:

La invalidez técnica de una interfaz o plataforma permanece fuera de Tri y no se transforma en U.

Comprobación

La integración continua comprueba:

  1. pruebas nativas del espacio de trabajo Rust;
  2. pruebas de documentación vigentes;
  3. compilación del mismo sv_core para wasm32-unknown-unknown;
  4. compilación de sv_wasm para ese destino;
  5. conservación independiente de la conformidad del frontend Python.

La unicidad semántica no se deduce únicamente de una compilación correcta: se conserva estructuralmente porque los adaptadores dependen de sv_core y no contienen una implementación paralela de las propiedades constitutivas.