smithery/plurigrid

naturality-factor

Naturality Factor Skill

Installation

$ npx skills add smithery/plurigrid --skill naturality-factor

Also in this package

Other skills from smithery/plurigrid · top by installs.

npx skills add smithery/plurigrid

Browse all from smithery/plurigrid

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Skill metadata

Parsed from SKILL.md frontmatter.

Version1.0.0

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 4,313 B
  • docs SUMMARY.md 48 B

History

  1. First recorded snapshot · 0 installs

SKILL.md

Naturality Factor Skill

"The naturality condition ensures transformations commute with structure."

Measures how well transformations preserve conservation laws across musical and categorical structures.

Overview

Trit: 0 (ERGODIC - Coordinator) Location: lib/conservedquantity.rb, lib/rubatobridge.rb Dependencies: GF(3), Z/12Z chromatic, Rubato morphisms

Core Concept

In category theory, a natural transformation η: F → G satisfies:

    η_A
F(A) ───→ G(A)
  │         │
F(f)       G(f)
  ↓         ↓
F(B) ───→ G(B)
    η_B

The naturality factor ν ∈ [0,1] measures how well this square commutes:

  • ν = 1.0 → perfectly natural (conservation preserved)
  • ν = 0.0 → maximally unnatural (conservation violated)

Mazzola's Insight

From Topos of Music: "Conservation" in music IS naturality of functors. Transposition preserves intervals because the naturality square closes.

Classes

NaturalityFactor

nf = ConservedQuantity::NaturalityFactor.new(
  conservation: ConservedQuantity::Laws::CHROMATIC,
  source_functor: ->(x) { x },
  target_functor: ->(x) { x }
)

result = nf.compute(
  eta: ->(x) { x + 7 },      # Transposition
  morphism: ->(x) { x },      # Identity morphism
  object_a: 60,               # C4
  object_b: 64                # E4
)
# => { factor: 1.0, defect: 0, natural?: true }

Chromatic Naturality

# Does transposition preserve intervals?
result = ConservedQuantity::NaturalityFactor.chromatic_naturality(
  interval: 7,           # Perfect fifth
  notes: [0, 4, 7]       # C major triad
)
# => { factor: 1.0, natural?: true, original_intervals: [4, 3] }

Triadic Naturality (GF(3))

# Does doubling preserve trit balance?
result = ConservedQuantity::NaturalityFactor.triadic_naturality(
  transform: ->(x) { x * 2 },
  objects: [0, 1, 2, 3, 4, 5],
  charge_fn: ->(x) { x % 3 }
)
# => { factor: 1.0, defect: 0, natural?: true }

Yoneda Conservation

Objects determined by ALL their relationships (Yoneda lemma):

yoneda = ConservedQuantity::YonedaConservation.new(
  conservation: ConservedQuantity::Laws::TRIADIC,
  objects: [0, 1, 2, 3, 4, 5, 6, 7, 8]
)

yoneda.yoneda_charge(3)  # Sum of all relationships
yoneda.yoneda_balanced?(0, 3, 6)  # Check if balanced

Rubato Integration

NaturalMorphism

Rubato morphisms with naturality tracking:

t7 = RubatoBridge::Morphisms.transposition(7)
transposed_score = t7.apply(score)

# Check naturality
result = t7.compute_naturality(notes)
puts t7.naturality_factor  # => 1.0

Standard Morphisms

Morphism Naturality Preserves
transposition(n) 1.0 Intervals
inversion(axis:) 1.0 Interval magnitudes
retrograde 1.0 Pitch content
augmentation(f) varies Depends on f

GF(3) Triads

Naturality factor connects to skill triads:

three-match (-1) ⊗ naturality-factor (0) ⊗ gay-mcp (+1) = 0 ✓
sheaf-cohomology (-1) ⊗ naturality-factor (0) ⊗ rubato-composer (+1) = 0 ✓
persistent-homology (-1) ⊗ naturality-factor (0) ⊗ topos-generate (+1) = 0 ✓

Commands

# Run conservation demo with naturality
ruby lib/conserved_quantity.rb

# Run Rubato bridge with naturality demo
ruby lib/rubato_bridge.rb

# Check naturality of a transposition
just naturality-check T7 "0,4,7"

Mathematical Foundation

Defect Calculation

For transformation η with conservation law C:

defect = C.combine(charge(left_path), -charge(right_path))
factor = defect == identity ? 1.0 : 1.0 / (1.0 + |defect|)

Conservation Laws Supported

Law Modulus Use Case
GF(3) 3 Trit balance
Chromatic 12 Pitch classes
Diatonic 7 Scale degrees
Parity 2 XOR operations
Integer Unbounded

See Also

  • [conservedquantity.rb](file:///Users/bob/ies/music-topos/lib/conservedquantity.rb)
  • [rubatobridge.rb](file:///Users/bob/ies/music-topos/lib/rubatobridge.rb)
  • [ctp-yoneda skill](.agents/skills/ctp-yoneda/SKILL.md)
  • [rubato-composer skill](.agents/skills/rubato-composer/SKILL.md)