IR CANONICA BIENFORMACION SV v0 2.md

Especificación de la IR canónica y del sistema de bienformación del lenguaje SV — v0.2

Representación intermedia normalizada, juicios de legalidad formal y errores constitutivos

Autor: Juan Antonio Lloret Egea
ORCID: 0000-0002-6634-3351
ISSN: 2695-6411
Licencia: CC BY-NC-ND 4.0
Fecha: marzo 2026
Estado: Especificación técnica del lenguaje — v0.2
Repositorio: SV-lenguaje-de-computacion

© Juan Antonio Lloret Egea, marzo 2026. Todos los derechos reservados conforme a CC BY-NC-ND 4.0.


Resumen

Este documento define la representación intermedia canónica (IR) del lenguaje de computación del Sistema Vectorial SV y el sistema de juicios de bienformación que la gobiernan. Su propósito es traducir la Frontera normativa v0 a una máquina formal de legalidad: qué objetos existen en la IR, qué invariantes verifican, qué transiciones son lícitas y qué errores formales debe emitir el sistema cuando se violan.

La IR no es la sintaxis del usuario ni el backend de ejecución. Es la capa intermedia normalizada, serializable y auditable que toda construcción del lenguaje debe atravesar antes de alcanzar cualquier backend. Su diseño garantiza que la conformidad cruzada entre implementaciones se verifica sobre una representación común, no sobre convenciones sintácticas de superficie.


1. Alcance y posición

1.1. Qué es la IR

La IR canónica es la representación normalizada de todo programa válido del lenguaje SV. Toda construcción del DSL se traduce (lowering) a la IR antes de llegar a Rust, Python o cualquier otro backend. La IR es el objeto que se audita, se serializa, se reproduce y se compara entre implementaciones.

1.2. Qué no es la IR

La IR no es la sintaxis del usuario (que pertenece a la gramática superficial, aún no definida). No es el código objeto del backend (que pertenece a la fase de compilación). No es un formato de intercambio de datos clínicos (que pertenece al dominio).

1.3. Subordinación

Este documento es doctrina técnica derivada de la Frontera normativa del lenguaje SV v0 y, a través de ella, del corpus doctrinal completo del Sistema Vectorial SV (Fundamentos + Documentos I–VI). En caso de discrepancia, prevalece la Frontera normativa; en caso de discrepancia entre la Frontera y el corpus doctrinal, prevalecen los Fundamentos.


2. Niveles ontológicos de la IR

La IR separa cinco niveles ontológicos que no pueden mezclarse. Todo objeto de la IR pertenece a exactamente un nivel.

Nivel Qué contiene Ejemplo
N0 — Definición Especificaciones inmutables de estructura CellSpec, Connector, AdmissibilityTable, Ternarizer, CaptureSpec, AdmissibilitySpec, ResSpec
N1 — Estado Configuraciones evaluables con datos concretos CellState, CoupledState, CompositionGraph
N2 — Resultado Salidas deterministas de evaluación EvalResult, GateResult, SupervisionResult, CriticalityResult, ResolutionRecord
N3 — Evolución Estructuras de reevaluación y trayectoria Frame, TransitionData, Trajectory, Horizon
N4 — Uso Especialización, consulta y análisis Domain, Agent, QuerySpec, QueryContext, QueryResult, AnalyticView

La regla cardinal es: un objeto de nivel superior puede referenciar objetos de niveles inferiores, pero nunca al revés. Un CellSpec no puede referenciar un Frame. Un Frame puede referenciar un EvalResult. Una Trajectory puede referenciar Frames.


3. Objetos canónicos de la IR

Nivel 0 — Definición

CellSpec — Especificación inmutable de una célula composable.

CellSpec = {
    n         : SquareNat,          -- n = b², b >= 3
    b         : Nat,                -- base estructural
    codomain  : Codomain,           -- espacio de salidas posibles
    semantics : OutputSemantics,    -- interpretación del codominio
    role      : Role                -- rol en la arquitectura
}

CoupledSpec — Especificación de una célula acoplable (extiende CellSpec).

CoupledSpec = {
    cell    : CellSpec,
    bridges : BridgeSet             -- B ⊆ {1, …, n}
}

Connector — Conector de transmisión intercelular.

Connector = {
    source_codomain : Codomain,     -- K de la célula transmisora
    target_position : Nat,          -- posición puente en la receptora
    mapping : Codomain -> Tri       -- φ : K → Σ
}

AdmissibilityTable — Tabla de admisibilidad de una compuerta.

AdmissibilityTable = {
    input_codomains : [Codomain],       -- K₁, K₂, ..., Kₖ
    output_codomain : Codomain,         -- K_comp
    table : [Codomain] -> Codomain      -- 𝒯 : K₁ × ... × Kₖ → K_comp
}

CaptureSpec — Especificación formal del sensor o procedimiento de captura (Doc IV, ϕⱼ).

CaptureSpec = {
    parameter_id      : Nat,                  -- Pⱼ
    observation_domain : ObservationDomain,    -- Wⱼ
    observation_space  : ObservationSpace,     -- Oⱼ
    failure_symbol     : Bottom,               -- ⊥
    mapping : ObservationDomain -> ObservationSpaceExt  -- ϕⱼ : Wⱼ → Oⱼ^⊥
}

AdmissibilitySpec — Especificación formal del estado de admisibilidad observacional (Doc IV, R).

AdmissibilitySpec = {
    parameter_id : Nat,
    states : {Ok, Degraded, Failed, U},        -- R = {ok, degradado, fallido, U}
    rule   : (ObservationSpaceExt) -> AdmissibilityState
}

Ternarizer — Función de ternarización (Doc IV, τⱼ).

Ternarizer = {
    observation_space : ObservationSpace,      -- Oⱼ
    partition_zero    : Set,                   -- B₀
    partition_one     : Set,                   -- B₁
    partition_u       : Set,                   -- B_U
    mapping : ObservationSpace -> Tri          -- τⱼ : Oⱼ → Σ
}

ResSpec — Especificación del mecanismo de resolución de U.

ResSpec = {
    context   : Context,            -- 𝒳 : contexto de evidencia
    mechanism : Mechanism,          -- ℛ : mecanismo de revisión
    mapping   : (U, Context, Mechanism) -> Tri
}

Nivel 1 — Estado

CellState — Estado concreto de una célula con vector ternario.

CellState = {
    spec   : CellSpec,
    vector : Vec<Tri>               -- v ∈ Σⁿ, longitud = spec.n
}

CoupledState — Estado de una célula acoplable con vector base y actualizado.

CoupledState = {
    spec           : CoupledSpec,
    base_vector    : Vec<Tri>,      -- xᵢ⁽⁰⁾
    updated_vector : Vec<Tri>       -- x̃ᵢ (tras transmisiones)
}

Edge — Arista enriquecida del grafo de composición.

Edge = {
    source    : NodeId,
    target    : NodeId,
    position  : Nat,                -- k ∈ BridgeSet del target
    connector : Connector           -- φ asociado a esta arista
}

CompositionGraph — Grafo dirigido acíclico de células acopladas.

CompositionGraph = {
    nodes    : [CoupledSpec],       -- V
    edges    : [Edge],              -- E (cada arista lleva su conector)
    relation : SemanticRelation,    -- R(𝒜)
    regime   : Regime               -- Simple | General
}

ConflictOperator — Operador de conflicto para régimen general.

ConflictOperator = {
    target_cell     : NodeId,
    target_position : Nat,          -- k ∈ Bᵢ
    family          : ConflictFamily,   -- Consensus | Precedence | LocalSovereignty
    mapping         : (Tri, [Tri]) -> Tri   -- Ψ : Σ × Σʳ → Σ
}

Nivel 2 — Resultado

EvalResult — Resultado de evaluación de una célula.

EvalResult = {
    source_state    : CellStateRef,    -- enlace al CellState que lo produjo
    counts          : (Nat, Nat, Nat), -- (N₀, N₁, Nᵤ)
    threshold       : Nat,             -- T(n)
    classification  : Classification,  -- APTO | NO_APTO | INDETERMINADO
    criticality     : Int,             -- Γ(v)
    deltas          : (Int, Int)       -- (δ₀, δ₁)
}

GateResult — Resultado de una compuerta.

GateResult = {
    inputs : [EvalResult],
    table  : AdmissibilityTable,
    output : Codomain                  -- 𝒯(y₁, y₂, ..., yₖ)
}

SupervisionResult — Resultado de supervisión meta.

SupervisionResult = {
    meta_eval : EvalResult,
    target    : Supervisable,
    verdict   : SupervisionVerdict     -- Accept | Tense | Veto
}

Supervisable — Unión etiquetada del objeto supervisado.

Supervisable =
    | CellTarget(EvalResult)           -- nivel (a): supervisa una célula
    | ComposedTarget(GateResult)       -- nivel (b): supervisa un resultado compuesto
    | SystemTarget(CompositionGraph)   -- nivel (c): supervisa un sistema completo

CriticalityResult — Resultado de criticidad condicionada al puente.

CriticalityResult = {
    source_state  : CellStateRef,
    bridge_k      : Nat,
    delta_gamma_k : BoundedInt         -- ΔΓₖ ∈ {0, 1}
}

ResolutionRecord — Registro de una resolución de U.

ResolutionRecord = {
    parameter   : Nat,
    previous    : Tri,                 -- siempre U
    resolved_to : Tri,                 -- 0 o 1 (o U si persiste)
    context     : Context,
    mechanism   : Mechanism
}

Nivel 3 — Evolución

Horizon — Horizonte de sucesos de una arquitectura.

Horizon = {
    architecture : ArchitectureId,
    events       : [EventType]         -- ℋ(𝒜) = {ε₁, ..., εₘ}
}

Frame — Evaluación completa inmutable del sistema.

Frame = {
    index          : Nat,              -- índice ordinal (no temporal)
    architecture   : ArchitectureId,
    cell_states    : [CoupledState],
    eval_results   : [EvalResult],
    gate_results   : [GateResult],
    supervision    : [SupervisionResult],
    criticalities  : [CriticalityResult],
    immutable      : True              -- invariante constitutivo
}

TransitionData — Dato de transición entre frames.

TransitionData = {
    horizon_ref        : HorizonRef,            -- referencia al horizonte de la arquitectura
    events             : [(EventType, Tri)],    -- νₙ = {(εᵢ, τᵢ)}
    induced_parameters : [(NodeId, Nat, Tri)],  -- lista de (célula, posición, nuevo valor)
    metadata           : AuditMetadata
}

TrajectoryEntry — Entrada de la trayectoria (frame con transición opcional).

TrajectoryEntry = {
    frame      : Frame,
    transition : TransitionData?       -- presente salvo en la última entrada
}

Trajectory — Secuencia append-only de frames y transiciones.

Trajectory = {
    entries     : [TrajectoryEntry],
    append_only : True                 -- invariante constitutivo
}

Invariantes de alternancia:
- entries no puede estar vacío (al menos un frame inicial).
- Toda entrada que no sea la última DEBE llevar transition.
- La última entrada NO PUEDE llevar transition.
- Si una entrada lleva transition, DEBE existir una entrada siguiente.

Nivel 4 — Uso

Domain — Dominio especializado.

Domain = {
    parameters          : [ParameterInstance],
    interface           : Interface,            -- ℐ(𝒜)
    horizon             : Horizon,
    capture_specs       : [CaptureSpec],        -- ϕⱼ por parámetro exógeno
    admissibility_specs : [AdmissibilitySpec],  -- reglas de admisibilidad
    ternarizers         : [Ternarizer],         -- τⱼ por parámetro exógeno
    exogeneity_mask     : ExogeneityMask,       -- E(C)
    silent_u            : SilentU,              -- U_s(𝒜)
    transduction_policy : TransductionPolicy,
    u_policy            : UPolicy,
    closure_criterion   : ClosureCriterion
}

Agent — Agente especializado tipado por dominio.

Agent = {
    architecture : CompositionGraph,
    domain       : Domain,
    query_engine : QueryEngine
}

QuerySpec — Especificación de una consulta.

QuerySpec = {
    query_type   : QueryType,
    scope        : Scope,
    restrictions : [Restriction]
}

QueryContext — Contexto de ejecución de una consulta.

QueryContext =
    | PointEval(Frame)                          -- evaluación puntual
    | TrajectoryView(Trajectory)                -- estado de trayectoria
    | FrameComparison(Frame, Frame)             -- comparación entre frames
    | ArchitectureView(CompositionGraph, [EvalResult], [GateResult], [SupervisionResult])
    | CoverageReport(Domain, Interface, SilentU)

QueryResult — Resultado de una consulta.

QueryResult = {
    response      : TypedResponse,
    justification : Justification,     -- J : cadena trazable
    metadata      : QueryMetadata      -- M : criticidad, cobertura, U pendientes
}

AnalyticView — Vista analítica sobre una trayectoria.

AnalyticView = {
    source_trajectory : TrajectoryId,
    sequences         : [CanonicalSequence],
    encoding          : EncodingDeclaration    -- Injective | Lossy(projection_name)
}

4. Juicios de bienformación

Los juicios se organizan por capas. Un juicio de capa superior presupone que los juicios de capas inferiores ya se han verificado.

Capa 0 — Juicios sobre valores primitivos

J0.1 — Un valor de tipo Tri es bien formado si pertenece a {Zero, One, U} y no ha sido producido por coerción implícita desde otro tipo.

J0.2 — Un entero n es un SquareNat bien formado si existe b en N con b >= 3 tal que n = b².

Capa 1 — Juicios sobre definiciones

J1.1 — Un CellSpec es bien formado si:

J1.2 — Un CoupledSpec es bien formado si:

J1.3 — Un Connector es bien formado si:

J1.4 — Una AdmissibilityTable es bien formada si:

J1.5 — Un Ternarizer es bien formado si:

J1.6 — Un ResSpec es bien formado si:

J1.7 — Un CaptureSpec es bien formado si:

J1.8 — Un AdmissibilitySpec es bien formado si:

Capa 2 — Juicios sobre estados

J2.1 — Un CellState es bien formado si:

J2.2 — Un CoupledState es bien formado si:

J2.3 — Un CompositionGraph es bien formado si:

Capa 3 — Juicios sobre resultados

J3.1 — Un EvalResult es bien formado respecto de un CellState si:

J3.2 — Un GateResult es bien formado si:

J3.3 — Un SupervisionResult es bien formado si:

J3.4 — Un ResolutionRecord es bien formado si:

Capa 4 — Juicios sobre evolución

J4.1 — Un Frame es bien formado si:

J4.2 — Una Trajectory es bien formada si:

J4.3 — Un TransitionData es bien formado si:

Capa 5 — Juicios sobre uso

J5.1 — Un QuerySpec es bien formado respecto de un QueryContext si satisface CQ1–CQ6:

J5.2 — Un AnalyticView es bien formado si:


5. Errores formales obligatorios

Toda violación de un juicio de bienformación produce un error formal. Los errores son constitutivos del lenguaje: no son warnings, no son sugerencias, no se pueden silenciar.

Errores de Capa 0

Código Nombre Juicio violado
E001 InvalidTriCoercion J0.1 — conversión implícita de Tri a otro tipo
E002 InvalidCellSize J0.2 — n no es b² con b >= 3

Errores de Capa 1

Código Nombre Juicio violado
E101 EmptyCodomain J1.1 — codomain vacío o no documentado
E102 MissingOutputSemantics J1.1 — OutputSemantics ausente
E103 IllegalBridgePosition J1.2 — posición puente fuera de {1, ..., n}
E104 InvalidConnectorCodomain J1.3 — mapping no produce Tri para alguna entrada
E105 IncompleteAdmissibilityTable J1.4 — tabla no definida para alguna combinación
E106 MissingSemanticRelation J1.4 — composición sin relación semántica previa
E107 InvalidTernarizerPartition J1.5 — partición no cubre o tiene solapamiento
E108 MissingResContext J1.6 — resolución de U sin contexto o mecanismo
E109 InvalidCaptureSpec J1.7 — captura mal tipada o sin manejo de fallo
E110 InvalidAdmissibilitySpec J1.8 — regla de admisibilidad no determinista
E111 UnorderedCodomain Lowering 6.1 — codomain sin orden total explícito para max/min

Errores de Capa 2

Código Nombre Juicio violado
E201 VectorLengthMismatch J2.1 — longitud del vector no coincide con spec.n
E202 IllegalBridgeUpdate J2.2 — posición no puente recibe transmisión
E203 CyclicCompositionGraph J2.3 — ciclo detectado en el grafo
E204 MissingConflictOperator J2.3 — concurrencia sin operador de conflicto
E205 UndeclaredRegime J2.3 — grafo no declara régimen
E206 EdgeConnectorMismatch J2.3 — arista con conector incompatible

Errores de Capa 3

Código Nombre Juicio violado
E301 InconsistentCounts J3.1 — N₀ + N₁ + Nᵤ distinto de n
E302 WrongThreshold J3.1 — umbral no coincide con floor(7n/9)
E303 ClassificationPrecedenceViolation J3.1 — no respeta precedencia desfavorable
E304 NonDeterministicGate J3.2 — tabla produce salidas distintas para misma entrada
E305 UnsafeUResolution J3.4 — resolución sin ResolutionRecord bien formado
E306 UntaggedSupervisable J3.3 — objeto supervisado sin etiqueta de nivel

Errores de Capa 4

Código Nombre Juicio violado
E401 FrameMutationAttempt J4.1 — intento de modificar frame construido
E402 NonAppendOnlyTrajectory J4.2 — intento de eliminar o modificar entrada previa
E403 UndeclaredHorizonEvent J4.3 — evento no pertenece al horizonte
E404 BrokenAlternation J4.2 — entrada no final sin transición, o última con transición
E405 EmptyTrajectory J4.2 — trayectoria sin ninguna entrada
E406 InsufficientTransitionData J4.3 — induced_parameters vacío

Errores de Capa 5

Código Nombre Juicio violado
E501 OpaqueJustification J5.1 / CQ2 — justificación no trazable
E502 QueryMutatesTrajectory J5.1 / CQ3 — consulta modifica trayectoria
E503 StrongConclusionUnderInsufficientCoverage J5.1 / CQ6 — 0 o 1 fuerte sin cobertura
E504 UndeclaredLossyEncoding J5.2 — codificación con pérdida no declarada
E505 IllegalCompClosure Bloque D — Comp tratado como operador cerrado
E506 AutomatedDesignDelegation Bloque D — proceso automático modifica diseño sin humano
E507 QueryContextMismatch J5.1 — tipo de consulta incoherente con tipo de contexto

6. Operaciones de lowering (DSL a IR)

El lowering traduce construcciones del DSL a objetos de la IR sin pérdida semántica ilícita.

6.1. max/min bajan a gate con tabla trivial

Toda invocación de max(Ci, Cj) se traduce a:

gate(Ci, Cj, AdmissibilityTable_trivial_max)

Toda invocación de min(Ci, Cj) se traduce a:

gate(Ci, Cj, AdmissibilityTable_trivial_min)

Donde cada tabla trivial implementa la comparación ordinal correspondiente sobre un codomain con orden total explícito y documentado.

Precondición obligatoria: el codomain de ambas células admite orden total explícito y documentado. Si no se cumple, el lowering emite error E111.

La relación semántica previa (dominancia homogénea como subtipo de habilitación cruzada) se genera automáticamente pero queda registrada en la IR.

6.2. evaluate + classify bajan como factorización de chi

La evaluación se traduce a dos fases distinguibles en la IR:

evaluate(CellState) -> (N_0, N_1, N_U)           -- fase vectorial
classify(N_0, N_1, N_U, T(n)) -> Classification  -- fase normativa

La IR conserva ambas fases como operaciones separadas para trazabilidad.

6.3. Res baja con contexto y mecanismo obligatorios

Toda resolución de U se traduce a:

resolve(U, Context, Mechanism) -> (Tri, ResolutionRecord)

La IR no acepta resolución sin ResolutionRecord bien formado (J3.4).

6.4. query baja como operador tipado con contexto

Toda consulta se traduce a:

query(QuerySpec, Agent, QueryContext) -> QueryResult = (r, J, M)

La IR verifica CQ1–CQ6 y la coherencia entre query_type y QueryContext (J5.1) antes de ejecutar.

6.5. Comp baja como constructor, no como operador cerrado

Toda construcción con Comp se traduce a:

compose(CompositionGraph, [SemanticRelation], [Pattern]) -> Architecture

La IR registra que Comp es constructor organizativo de Grado C. No se le aplican juicios de firma cerrada ni proposiciones fuertes. Si una futura versión del corpus cierra la axiomática de Comp, la IR se actualizará.


7. Condiciones de serialización y trazabilidad

7.1. Serialización

Todo objeto de la IR debe ser serializable a un formato determinista y reproducible. La serialización debe preservar:

7.2. Reproducibilidad

Dado un Frame inicial y una secuencia de TransitionData con contenido suficiente (induced_parameters completos), todo Frame posterior debe ser recalculable de forma determinista a partir de la IR serializada.

7.3. Conformidad cruzada

La IR es el nivel en el que se verifica la conformidad cruzada entre backends. Si Rust y Python producen IRs distintas para la misma entrada, al menos uno de los dos es incorrecto. La IR, no la sintaxis ni el código objeto, es el contrato de fidelidad.


8. Lo que la IR no puede fingir

La IR debe declarar expresamente que no cierra las siguientes cuestiones, porque el corpus doctrinal no las ha cerrado:

  1. Convergencia general de trayectorias. No existe norma formal de convergencia o divergencia. La IR no puede prometer estabilización.

  2. Teoría multiagente plena. La composición entre agentes se admite solo bajo relación semántica declarada. La IR no modela interacciones multiagente arbitrarias.

  3. Axiomática completa de transductores. La IR verifica las condiciones mínimas (partición, codominio ternario, regla conservadora), pero no impone una axiomática cerrada de transductores bien formados.

  4. Operador de entrenamiento. No forma parte de la IR v0.2.

  5. Equivalencia semántica de codificaciones con pérdida. La IR las marca como proyecciones declaradas, nunca como representaciones equivalentes.

  6. Firma cerrada de Comp. La IR lo registra como constructor organizativo. Si la axiomática se cierra en el futuro, la IR se actualizará.

  7. Formalización completa del objeto supervisable para nivel (b). La IR acepta SupervisionResult con Supervisable etiquetado (CellTarget, ComposedTarget, SystemTarget), pero no cierra la definición formal del nivel (b) más allá de lo que el Doc II documenta.


Referencias

[R1] Juan Antonio Lloret Egea. Frontera normativa del lenguaje de computación del Sistema Vectorial SV — v0. marzo 2026. https://github.com/juantoniolloretegea/SV-lenguaje-de-computacion/blob/main/FRONTERA_NORMATIVA_LENGUAJE_SV_v0.md

[R2] Juan Antonio Lloret Egea. Fundamentos algebraico-semánticos del Sistema Vectorial SV. v1.0.0, Release 3. ITVIA, 2026. https://www.itvia.online/pub/fundamentos-algebraico-semanticos-del-sistema-vectorial-sv/release/3

[R3] Juan Antonio Lloret Egea. Álgebra de composición intercelular del marco SV — I. Transmisión en serie por parámetro puente. v1, Release 4. ITVIA, 2026. https://www.itvia.online/pub/algebra-de-composicion-intercelular-del-marco-sv/release/4

[R4] Juan Antonio Lloret Egea. Álgebra de composición intercelular del marco SV — II. Gramática general de composición. v1.0, Release 1. ITVIA, 2026. https://www.itvia.online/pub/algebra-de-composicion-intercelular-del-marco-sv--ii-gramatica-general-de-composicion/release/1

[R5] Juan Antonio Lloret Egea. Álgebra de composición intercelular del marco SV — III. Horizonte de sucesos y reevaluación discreta. v1. ITVIA, 2026. https://doi.org/10.21428/39829d0b.bb86c65d

[R6] Juan Antonio Lloret Egea. Álgebra de composición intercelular del marco SV — IV. Transducción al alfabeto ternario e interfaz paramétrica del sistema. v1, Release 1. ITVIA, 2026. https://www.itvia.online/pub/algebra-de-composicion-intercelular-del-marco-sv--iv-transduccion-al-alfabeto-ternario-e-interfaz-parametrica-del-sistema/release/1

[R7] Juan Antonio Lloret Egea. Álgebra de composición intercelular del marco SV — V. Invariantes, agentes especializados y operador de consulta del sistema. v2, Release 2. ITVIA, 2026. https://www.itvia.online/pub/algebra-de-composicion-intercelular-del-marco-sv--v-invariantes-agentes-especializados-y-operador-de-consulta-del-sistema/release/2

[R8] Juan Antonio Lloret Egea. Álgebra de composición intercelular del marco SV — VI. Análisis discreto, representaciones y herramientas de secuencias del sistema. v1, Release 1. ITVIA, 2026. https://www.itvia.online/pub/algebra-de-composicion-intercelular-del-marco-sv--vi-analisis-discreto-representaciones-y-herramientas-de-secuencias-del-sistema/release/1


Especificación técnica del lenguaje de computación del Sistema Vectorial SV. ISSN 2695-6411.
Juan Antonio Lloret Egea | ORCID 0000-0002-6634-3351 | CC BY-NC-ND 4.0