SNAPKITTYWEST's picture
push from SNAPKITTYWEST/hyperkitty-constraint-dsl
224e773 verified
Raw History Blame Contribute Delete
2.49 kB
/*
* constraints.h — Constraint Evaluation Engine interface
*
* The validity predicate gates all routing decisions.
* No output propagates unless all constraints are satisfied.
*
* V(message) = 1 ⟺ accounting_balance ∧ invariant_preserved ∧ entropy ≤ 0.20 ∧ proof_exists
*
* If V(message) = 0, the message is blocked (fail-closed).
*/
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/* Accounting ledger: δ_A + δ_E = δ_L + δ_R */
typedef struct {
double asset;
double equity;
double liability;
double revenue;
} AccountingLedger;
/* Invariant tracking */
typedef struct {
double *current; /* I(X_t) */
double *next; /* I(X_{t+1}) */
int dimension;
} InvariantPair;
/* Proof certificate with cryptographic seal */
typedef struct {
uint8_t hash[32];
uint8_t signature[64];
uint64_t timestamp;
int valid;
} ProofCertificate;
/* Full constraint context */
typedef struct {
AccountingLedger ledger; /* Balance equation */
InvariantPair invariant; /* I(X_t) = I(X_{t+1}) */
double entropy; /* H(X) in nats */
ProofCertificate proof; /* Proof certificate */
} hk_constraint_context;
/**
* hk_constraint_check_all — Evaluate all constraints
*
* Returns 1 if all constraints pass (message propagates):
* 1. Accounting balance: δ_A + δ_E = δ_L + δ_R
* 2. Invariant preservation: I(X_t) = I(X_{t+1})
* 3. Entropy bound: H(X) ≤ 0.20 nats
* 4. Proof certificate: exists and valid
*
* Returns 0 if any constraint fails (message blocked).
*
* @param ctx Constraint context
* @return 1 if all constraints satisfied, 0 otherwise
*/
int hk_constraint_check_all(const hk_constraint_context *ctx);
/**
* hk_constraint_report — Print detailed constraint validation report
*
* Outputs human-readable summary of each constraint check.
*
* @param ctx Constraint context
*/
void hk_constraint_report(const hk_constraint_context *ctx);
/**
* hk_constraint_context_alloc — Create constraint context
*
* @param invariant_dim Dimension of invariant vectors
* @return Allocated context, or NULL on error
*/
hk_constraint_context *hk_constraint_context_alloc(int invariant_dim);
/**
* hk_constraint_context_free — Free constraint context
*/
void hk_constraint_context_free(hk_constraint_context *ctx);
#ifdef __cplusplus
}
#endif