module QW.SizeIndexedStructure where
open import QW.ColimitsOfSizedIndexedDiagrams public
module SizeIdxStruct
{l : Level}
(Σ : Sig {l})
(ε : Syseq Σ)
(Size : Set l)
{{ssz : SizeStructure Size}}
where
private
Γ = fst ε
lhs = fst (snd ε)
rhs = snd (snd ε)
open Colim Size {{ssz}}
record IdxStruct : Set (lsuc l) where
constructor mkIdxStruct
field
D : Size → Set l
τ : ∀ i → ∏ᵇ j < i , (T{l}{Σ}(D j) → D i)
open IdxStruct public
record IdxStructᵇ (i : Size) : Set (lsuc l) where
constructor mkIdxStructᵇ
field
Dᵇ : ∏ᵇ j < i , Set l
τᵇ : ∏ᵇ j < i , ∏ᵇ k < j , (T{l}{Σ}(Dᵇ k) → Dᵇ j)
open IdxStructᵇ public
infixl 6 _↓_
_↓_ : IdxStruct → ∀ i → IdxStructᵇ i
Dᵇ (A ↓ i) j = D A j
τᵇ (A ↓ i) j k = τ A j k
infixl 6 _↓ᵇ_
_↓ᵇ_ : {i : Size} → IdxStructᵇ i → ∏ᵇ j < i , IdxStructᵇ j
Dᵇ (A ↓ᵇ _) j = Dᵇ A j
τᵇ (A ↓ᵇ _) j k = τᵇ A j k
Wᵇ : ∀{i} → IdxStructᵇ i → Set l
Wᵇ {i} A = ∑ᵇ j < i , T{l}{Σ} (Dᵇ A j)
data Rᵇ {i : Size}(A : IdxStructᵇ i) : Wᵇ A → Wᵇ A → Prop l where
τεᵇ : ∀ᵇ j < i ,
((e : Op Γ)
(ρ : Ar Γ e → Dᵇ A j)
→
Rᵇ A (pairᵇ j (T' ρ (lhs e))) (pairᵇ j (T' ρ (rhs e))))
τηᵇ : ∀ᵇ j < i , ∀ᵇ k < j ,
((t : T{l}{Σ}(Dᵇ A k))
→
Rᵇ A (pairᵇ j (η (τᵇ A j k t))) (pairᵇ k t))
τσᵇ : ∀ᵇ j < i , ∀ᵇ k < j ,
((a : Op Σ)
(f : Ar Σ a → T (Dᵇ A k))
→
Rᵇ A (pairᵇ k (σ (a , f)))
(pairᵇ j (σ (a , λ b → η (τᵇ A j k (f b))))))
◇ : ∀{i} → IdxStructᵇ i → Set l
◇ A = Wᵇ A / Rᵇ A
◇fix : IdxStruct → Prop (lsuc l)
◇fix alg =
∀ i → D alg i == ◇ (alg ↓ i) ∧
∀ᵇ j < i , (∀ t → τ alg i j t === [ pairᵇ j t ]/ Rᵇ (alg ↓ i))
FixSizeStruct : Set (lsuc l)
FixSizeStruct = set IdxStruct ◇fix
FixSizeStructᵇ : Size → Set (lsuc l)
FixSizeStructᵇ i = set (IdxStructᵇ i) isFixSizeStructᵇ
module _ where
isFixSizeStructᵇ : IdxStructᵇ i → Prop (lsuc l)
isFixSizeStructᵇ alg =
∀ᵇ j < i , (Dᵇ alg j == ◇ (alg ↓ᵇ j)
∧ ∀ᵇ k < j ,
((t : T{l}{Σ}(Dᵇ (mkIdxStructᵇ (Dᵇ alg) (τᵇ alg)) k))
→ τᵇ alg j k t === [ pairᵇ k t ]/ Rᵇ (alg ↓ᵇ j)
)
)