------------------------------------------------------------------------
-- Bridge: combinatorial causal sets land in the causal order skeleton
--
-- A causal set (Fin n, _≺_) is turned into an edge-family system by
-- I = Fin n, A = const ⊤, E i _ j = T (i ≺ j).
-- The positive reachability _⇝⁺_ of CausalOrder then coincides with
-- the transitive closure of _≺_, and IsCausalSet entails Acyclic.
--
-- 桥接:组合因果集落入因果序骨架
--
-- 因果集 (Fin n, _≺_) 通过 I = Fin n、A = const ⊤、E i _ j = T (i ≺ j)
-- 成为边族系统。因果序骨架的正可达 _⇝⁺_ 于是与 _≺_ 的传递闭包一致,
-- 且 IsCausalSet 蕴含 Acyclic。
------------------------------------------------------------------------
{-# OPTIONS --safe --cubical-compatible --guardedness --exact-split --double-check #-}
module ALMA.Physics.CausalSetOrder where
open import Agda.Primitive using (lzero)
open import Data.Nat using (ℕ)
open import Data.Fin using (Fin)
open import Data.Bool using (Bool; T)
open import Data.Unit.Polymorphic.Base using (⊤; tt)
open import ALMA.Base.MCorrSetoid using (SysEq; propEqOn)
open import ALMA.Physics.CausalSet using (IsCausalSet; diamond; diamond-causal)
import ALMA.Physics.CausalOrder as CO
module Bridge (n : ℕ) (_≺_ : Fin n → Fin n → Bool) where
----------------------------------------------------------------------
-- Edge-family system extracted from a causal set
--
-- 从因果集提取的边族系统
causalSys : SysEq lzero lzero lzero lzero lzero
causalSys = record
{ I = Fin n
; A = λ _ → ⊤ {lzero}
; E = λ i _ j → T (i ≺ j)
; ≈A = λ _ → propEqOn (⊤ {lzero})
; ≈E = λ i _ j → propEqOn (T (i ≺ j))
}
----------------------------------------------------------------------
-- Transitive closure of _≺_ as an inductive family
--
-- _≺_ 的传递闭包作为归纳族
data _≺⁺_ : Fin n → Fin n → Set where
step : ∀ {i j} → T (i ≺ j) → i ≺⁺ j
more : ∀ {i j k} → T (i ≺ j) → j ≺⁺ k → i ≺⁺ k
----------------------------------------------------------------------
-- Positive reachability and the transitive closure coincide
--
-- 正可达与传递闭包一致
⇝⁺→≺⁺ : ∀ {i j} → CO._⇝⁺_ causalSys i j → i ≺⁺ j
⇝⁺→≺⁺ (CO.step _ e) = step e
⇝⁺→≺⁺ (CO.more _ e q) = more e (⇝⁺→≺⁺ q)
≺⁺→⇝⁺ : ∀ {i j} → i ≺⁺ j → CO._⇝⁺_ causalSys i j
≺⁺→⇝⁺ (step p) = CO.step tt p
≺⁺→⇝⁺ (more p q) = CO.more tt p (≺⁺→⇝⁺ q)
----------------------------------------------------------------------
-- Under IsCausalSet the transitive closure reflects _≺_
--
-- IsCausalSet 下传递闭包反映 _≺_
≺⁺-implies-≺ : IsCausalSet n _≺_ → ∀ {i j} → i ≺⁺ j → T (i ≺ j)
≺⁺-implies-≺ cs (step p) = p
≺⁺-implies-≺ cs (more p q) =
IsCausalSet.trans cs _ _ _ p (≺⁺-implies-≺ cs q)
----------------------------------------------------------------------
-- Main corollary: every causal set is acyclic in the causal order
--
-- 主要推论:每个因果集在因果序骨架中无环
causal-acyclic : IsCausalSet n _≺_ → CO.Acyclic causalSys
causal-acyclic cs p =
IsCausalSet.irrefl cs _ (≺⁺-implies-≺ cs (⇝⁺→≺⁺ p))
------------------------------------------------------------------------
-- End-to-end validation: the four-point diamond is acyclic
--
-- Instantiates causal-acyclic at the concrete diamond causal set, whose
-- IsCausalSet instance is diamond-causal. This is the smallest
-- non-trivial causal set, so it serves as the reference check that the
-- bridge CausalSet → CausalOrder composes correctly on a concrete
-- example.
--
-- 端到端验证:四点菱形无环
--
-- 在具体菱形因果集上实例化 causal-acyclic,其 IsCausalSet 实例为
-- diamond-causal。这是最小的非平凡因果集,故作为参考检验,验证
-- CausalSet → CausalOrder 这条桥在具体例子上正确复合。
diamond-acyclic : CO.Acyclic (Bridge.causalSys 4 diamond)
diamond-acyclic = Bridge.causal-acyclic 4 diamond diamond-causal