module QWI.SizeIndexedStructure where
open import QWI.ColimitsOfSizedIndexedDiagrams public
module SizeIdxStruct
{l : Level}
(I : Set l)
(Σ : Slice.Sig I)
(ε : Slice.Syseq I Σ)
(Size : Set l)
{{ssz : SizeStructure Size}}
where
open Slice I
private
Γ = Syseq.Γ ε
lhs = Syseq.lhs ε
rhs = Syseq.rhs ε
open Colim Size {{ssz}}
record IdxStruct : Set (lsuc l) where
constructor mkIdxStruct
field
D : Size → Setᴵ l
τ : ∀ i → ∏ᵇ j < i , (T{Σ}(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{Σ}(Dᵇ k) ⇁ Dᵇ j)
open IdxStructᵇ public
infixl 6 _↓_
_↓_ : IdxStruct → ∀ i → IdxStructᵇ i
Dᵇ (A ↓ _) j = D A j
τᵇ (A ↓ _) 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 n = ∑ᵇ j < i , T{Σ} (Dᵇ A j) n
data Rᵇ
{i : Size}
(A : IdxStructᵇ i)
(n : I)
:
Wᵇ A n → Wᵇ A n → Prop l
where
τεᵇ : ∀ᵇ j < i ,
((e : Op Γ n)
(ρ : Ar Γ n e ⇁ Dᵇ A j)
→
Rᵇ A n (pairᵇ j (T' ρ n (lhs n e))) (pairᵇ j (T' ρ n (rhs n e))))
τηᵇ : ∀ᵇ j < i , ∀ᵇ k < j ,
((t : T{Σ}(Dᵇ A k) n)
→
Rᵇ A n (pairᵇ j (η n (τᵇ A j k n t))) (pairᵇ k t))
τσᵇ : ∀ᵇ j < i , ∀ᵇ k < j ,
((a : Op Σ n)
(f : Ar Σ n a ⇁ T (Dᵇ A k))
→
Rᵇ A n (pairᵇ k (σ n (a , f)))
(pairᵇ j (σ n (a , λ m b → η m (τᵇ A j k m (f m b))))))
◇ : ∀{i} → IdxStructᵇ i → Setᴵ l
◇ A n = Wᵇ A n / Rᵇ A n
◇fix : IdxStruct → Prop (lsuc l)
◇fix alg =
∀ i → (∀ n → D alg i n == ◇ (alg ↓ i) n) ∧
∀ᵇ j < i , (∀ n t → τ alg i j n t === [ pairᵇ j t ]/ Rᵇ (alg ↓ i) n)
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 , ((∀ n → Dᵇ alg j n == ◇ (alg ↓ᵇ j) n)
∧ ∀ᵇ k < j ,
((n : I)
(t : T {Σ} (Dᵇ (mkIdxStructᵇ (Dᵇ alg) (τᵇ alg)) k) n)
→
τᵇ alg j k n t === [ pairᵇ k t ]/ Rᵇ (alg ↓ᵇ j) n ))