viva_math

Package VersionHex Docs

Core mathematical functions for VIVA - a sentient digital life research project.

Built on top of gleam_community_maths with specialized functions for emotional dynamics, consciousness modeling, and information theory.

Installation

gleam add viva_math

Modules

Module Purpose
viva_math/common Utilities: clamp, sigmoid, softmax, lerp, smoothstep
viva_math/vectorVec3 type for PAD emotional space (Pleasure-Arousal-Dominance)
viva_math/cusp Cusp catastrophe theory (Thom, 1972) for emotional phase transitions
viva_math/free_energy Free Energy Principle (Friston, 2010) for interoception
viva_math/attractor Emotional attractor dynamics (Mehrabian, 1996)
viva_math/entropy Shannon entropy, KL divergence, Jensen-Shannon divergence

Quick Start

import viva_math/vector
import viva_math/attractor
import viva_math/cusp
import viva_math/free_energy

pub fn main() {
  // Create PAD emotional state
  let state = vector.pad(-0.3, 0.7, -0.2)
  // Pleasure: -0.3 (slightly negative)
  // Arousal: 0.7 (high)
  // Dominance: -0.2 (slightly submissive)

  // Classify emotion by nearest attractor
  let emotion = attractor.classify_emotion(state)
  // -> "fear"

  // Check for emotional volatility (cusp bistability)
  let params = cusp.from_arousal_dominance(0.7, -0.2)
  let volatile = cusp.is_bistable(params)
  // -> True (high arousal creates bistability)

  // Compute free energy (prediction error)
  let expected = vector.pad(0.0, 0.0, 0.0)
  let fe_state = free_energy.compute_state(expected, state, expected, 0.1)
  // fe_state.feeling -> Surprised or Alarmed
}

Theoretical Background

PAD Model (Mehrabian, 1996)

Emotions are represented as points in 3D space:

Cusp Catastrophe (Thom, 1972)

Models sudden emotional transitions using the potential function:

V(x) = x⁴/4 + αx²/2 + βx

When arousal is high (α < 0) and discriminant Δ > 0, the system becomes bistable - small perturbations can cause sudden mood shifts.

Free Energy Principle (Friston, 2010)

Organisms minimize "surprise" through prediction:

F ≈ Prediction_Error² + Complexity

Low free energy = predictions match reality (homeostasis). High free energy = significant mismatch (alarm).

Attractor Dynamics

Eight basic emotions form attractors in PAD space:

Emotion P A D
Joy +0.76 +0.48 +0.35
Sadness -0.63 -0.27 -0.33
Fear -0.64 +0.60 -0.43
Anger -0.51 +0.59 +0.25
Trust +0.58 -0.23 +0.42
Disgust -0.60 +0.35 +0.11
Serenity +0.45 -0.42 +0.21
Excitement +0.62 +0.75 +0.38

Dependencies

This library builds on:

For functions not in viva_math (like sin, cos, mean, euclidean_distance), import directly:

import gleam_community/maths

let angle = maths.pi() /. 4.0
let sin_val = maths.sin(angle)

References

License

MIT