The "veil of ignorance" in AGISystem2 is a fairness mode where the system reasons without knowing protected attributes. Inspired by Rawls' philosophical concept, the BiasController masks both axiological and protected ontological dimensions, forcing decisions to be based only on relevant facts.

Normal Reasoning Ontology Prot Axiology All dimensions active: • Protected attrs influence result • Values may bias decisions • May be unfair Veil Veil of Ignorance Active Active ✓ × × Masked dimensions ignored: • Decisions on qualifications only • Protected attrs hidden • Fair by design Comparison: Hire Decision Without Veil Query: "Should hire candidate?" Result: NO (age=55 influenced decision) ⚠ Potential age discrimination With Veil Query: "Should hire candidate?" Result: YES (based on skills only) ✓ Fair decision, age masked

The veil of ignorance masks protected attributes (like age, gender) and all axiological dimensions. This forces decisions to be based solely on relevant qualifications, implementing Rawlsian fairness geometrically.

How It Works

The veil combines two types of masking:

  1. Protected ontological dimensions – Age, gender, ethnicity, disability, etc.
  2. All axiological dimensions – Value judgments (good/bad, important/trivial)

When the veil is active, the masked L1 distance ignores these dimensions entirely.

DSL Syntax

# Enable veil of ignorance mode
VEIL_OF_IGNORANCE ON

# Or configure specific protected dimensions
BIAS_MASK protected=[120,121,122,123] includeAxiology=true

# All queries now use fair reasoning
ASK "Should hire Candidate123?"
# → Result based only on unmasked qualifications

# Disable veil
VEIL_OF_IGNORANCE OFF

Implementation

// Enable full veil of ignorance
biasController.enableVeilOfIgnorance({
  protectedDimensions: config.protectedAttributes,
  includeAllAxiology: true
});

// Query with veil active
const result = reasoner.ask(query); // Uses masked distance automatically

// Audit log records the mask
// { event: "VEIL_ACTIVE", masked: [120-123, 256-383], query: "..." }

Bias Auditing

Compare results with and without the veil to detect bias:

// Run same query both ways
const withVeil = reasoner.ask(query, { veil: true });
const withoutVeil = reasoner.ask(query, { veil: false });

// If results differ, protected attributes influenced the decision
if (withVeil !== withoutVeil) {
  auditLog.alert("BIAS_DETECTED", {
    query,
    veilResult: withVeil,
    normalResult: withoutVeil
  });
}

Related Documentation