Directed interval type 2 axiomatizing (0 → 1). Time-directed homotopy for reactions.
"The directed interval 2 is the walking arrow: a single morphism 0 → 1." — Riehl-Shulman
The directed interval 2 replaces the undirected interval 𝕀 of cubical type theory with a directed version. This axiomatizes the notion of "time flows forward" essential for modeling reactions.
#lang rzk-1
-- CUBES: The category of directed cubes
-- 2 is the basic directed interval [0 → 1]
-- The directed interval (primitive)
#define 2 : CUBE
-- Endpoints
#define 0₂ : 2
#define 1₂ : 2
-- The unique arrow (built-in)
-- There is a morphism 0₂ → 1₂ but NOT 1₂ → 0₂
-- Higher cubes built from 2
#define 2×2 : CUBE := 2 × 2
-- Directed square (all arrows point same way)
#define □ : CUBE := 2 × 2
-- Simplex shapes
#define Δ¹ : CUBE := 2
#define Δ² : CUBE := { (t₁, t₂) : 2 × 2 | t₁ ≤ t₂ }
#define Δ³ : CUBE := { (t₁, t₂, t₃) : 2 × 2 × 2 | t₁ ≤ t₂ ∧ t₂ ≤ t₃ }
-- Hom type as extension type
#define hom (A : U) (x y : A) : U
:= { f : 2 → A | f 0₂ = x ∧ f 1₂ = y }
-- equivalently: (t : 2) → A [t ≡ 0₂ ↦ x, t ≡ 1₂ ↦ y]
| Directed Cube Concept | Chemical Interpretation | |----------------------|------------------------| | 2 (interval) | Reaction progress (0% → 100%) | | 0₂ | Reactants (starting materials) | | 1₂ | Products | | hom A x y | Reaction pathway from x to y | | Δ² | Two-step synthesis (A → B → C) | | Δ³ | Three-step synthesis with associativity | | □ (square) | Commuting reaction pathways |
segal-types (-1) ⊗ directed-interval (0) ⊗ rezk-types (+1) = 0 ✓
As a Coordinator (0), directed-interval:
The key innovation is extension types for partial elements:
-- Extension type: functions with prescribed boundary
#define extension-type
(I : CUBE) (ψ : I → TOPE) (A : I → U) (a : (t : ψ) → A t) : U
:= { f : (t : I) → A t | (t : ψ) → f t = a t }
-- This generalizes path types of cubical TT to directed setting
# The directed interval in our system
module DirectedInterval
# Map SplitMix64 index to directed interval position
def self.to_interval(index, max_index)
# 0₂ = index 0, 1₂ = index max_index
index.to_f / max_index.to_f
end
# Check if one interaction is "after" another in directed time
def self.after?(i1, i2)
i1.epoch > i2.epoch # Epoch = position on directed interval
end
# Directed hom: all interactions from x to y
def self.hom(manager, x_epoch, y_epoch)
manager.interactions.select do |i|
i.epoch > x_epoch && i.epoch <= y_epoch
end
end
end
# Directed interval as ACSet
@present SchDirectedInterval(FreeSchema) begin
Point::Ob
Arrow::Ob
src::Hom(Arrow, Point)
tgt::Hom(Arrow, Point)
# The unique arrow 0 → 1
# No arrow 1 → 0 (directedness)
end
@acset_type DirectedIntervalGraph(SchDirectedInterval)
function walking_arrow()
g = DirectedIntervalGraph()
add_parts!(g, :Point, 2) # 0₂ and 1₂
add_part!(g, :Arrow, src=1, tgt=2) # The unique arrow
g
end
No loops: There is no morphism 1₂ → 0₂ (time irreversibility)
Higher simplices: Δⁿ built from directed cubes model n-step processes
Extension types: Generalize path types to directed setting
Cubical structure: Compatible with cubical type theory machinery
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer