📘 DPFI SYNCTX Inference Rules (Formal Logic)
1. Purpose
Define how the HDIP platform (DPFI) infers, constructs, and validates SYNCTX from declarative product artifacts.
2. Inputs to Inference Engine
Let’s formalize inputs:
IntentRecord (IR)
SemanticDescriptor (SD / DPROD draft)
PolicyIntent (PI)
BusinessAssertions (BA)
UsageContract (UC)
ProductDependencies (PD)
3. Output
SYNCTX = SyntheticContext Graph
4. Core Inference Model
We define SYNCTX as:
SYNCTX = f(IR, SD, PI, BA, UC, PD)
Where:
- f = deterministic inference function
- output = graph (not document)
5. Inference Phases
DPFI executes SYNCTX inference in 5 ordered phases:
🔹 Phase 1 — Synthetic Requirement Detection
Rule 1.1 — Synthetic Trigger (Usage-Based)
IF UC.purpose ∈ {model_training, external_sharing, testing, simulation}
THEN synthetic_required = TRUE
Rule 1.2 — Multi-Product Dependency Trigger
IF PD.count > 1
AND synthetic_required = TRUE
THEN context_required = TRUE
Rule 1.3 — Explicit Constraint Trigger
IF PI contains (privacy_constraint OR no_pii OR masking_required)
THEN synthetic_required = TRUE
Result:
IF synthetic_required = TRUE AND context_required = TRUE
THEN proceed to SYNCTX inference
ELSE skip SYNCTX
🔹 Phase 2 — Member Resolution
Rule 2.1 — Direct Membership
SYNCTX.members = PD.products
Rule 2.2 — Transitive Dependency Expansion
FOR each product p in PD:
INCLUDE all upstream dependencies(p)
Rule 2.3 — Deduplication
SYNCTX.members = unique(products)
🔹 Phase 3 — Relationship Inference (Critical)
Rule 3.1 — Semantic Relationship Extraction
FOR each pair (p1, p2) in SYNCTX.members:
IF SD defines relationship(p1, p2)
THEN add Relationship(p1 → p2)
Rule 3.2 — Ontology-Based Inference
IF ontology contains relationship(p1.entity, p2.entity)
THEN infer relationship
Rule 3.3 — Key Alignment Rule
IF attribute(p1, keyX) matches attribute(p2, keyX)
THEN relationshipType = foreign_key
Rule 3.4 — Referential Integrity Requirement
IF relationship exists
THEN mark:
preserve_referential_integrity = TRUE
🔹 Phase 4 — Generation Strategy Inference
Rule 4.1 — Mode Selection
IF relationships.count > 0
THEN generationMode = coordinated
ELSE generationMode = independent
Rule 4.2 — Fidelity Determination
IF UC.purpose = model_training
THEN fidelity = high
IF UC.purpose = testing
THEN fidelity = medium
IF UC.purpose = sandbox
THEN fidelity = low
Rule 4.3 — Preservation Rules
IF generationMode = coordinated
THEN preserve:
- referential_integrity
- statistical_distribution
🔹 Phase 5 — Constraint Compilation
Rule 5.1 — Policy Translation
FOR each policy in PI:
translate → constraint
Rule 5.2 — Privacy Constraint
IF PI contains no_pii
THEN constraint:
remove_pii = TRUE
Rule 5.3 — Compliance Constraint
IF regulatory_requirement exists
THEN enforce constraint(region, retention, masking)
🔹 Phase 6 — Output Mapping
Rule 6.1 — Synthetic Product Creation
FOR each product p in SYNCTX.members:
CREATE synthetic_product sp
sp.basedOn = p
Rule 6.2 — Context Binding
FOR each synthetic_product sp:
sp.synctxRef = SYNCTX.id
🔹 Phase 7 — Validation Rules
Rule 7.1 — Minimum Membership
IF SYNCTX.members < 1
THEN INVALID
Rule 7.2 — Joinability Check
IF relationships.count = 0 AND members.count > 1
THEN WARN: non-joinable context
Rule 7.3 — Consistency Check
IF conflicting relationships exist
THEN FAIL
6. Formal Logical Representation (Compact)
Predicate Form
SyntheticRequired(IR, PI, UC)
ContextRequired(PD, SyntheticRequired)
Members = ResolveMembers(PD)
Relationships = InferRelationships(SD, Ontology)
Generation = InferGeneration(UC, Relationships)
Constraints = CompileConstraints(PI)
Outputs = GenerateSyntheticProducts(Members)
SYNCTX = {
Members,
Relationships,
Generation,
Constraints,
Outputs
}
7. Graph Construction Mapping
Members → synctx:hasMemberProduct
Relationships → synctx:hasRelationship
Outputs → synctx:produces
Constraints → synctx:hasConstraint
8. Determinism Principle
Given same inputs, SYNCTX MUST be identical
f(inputs₁) = f(inputs₂) → SYNCTX₁ = SYNCTX₂
9. Observability
DPFI MUST log:
- why SYNCTX was triggered
- which relationships were inferred
- which policies created constraints
- why generation mode was chosen