open import GpdCont.SymmetricContainer.Base module GpdCont.SymmetricContainer.Eval {ℓ} (G : SymmetricContainer ℓ) where open import GpdCont.Prelude open import GpdCont.Polynomial as Poly using (Polynomial) open import Cubical.Foundations.HLevels open import Cubical.Data.Sigma.Properties as Sigma using (map-snd) open SymmetricContainer G ⟦_⟧ᵗ : Type ℓ → Type ℓ ⟦_⟧ᵗ = Polynomial Shape Pos open Polynomial using (shape ; label) public opaque isGroupoid-⟦_⟧ᵗ : ∀ {X} → isGroupoid X → isGroupoid (⟦_⟧ᵗ X) isGroupoid-⟦_⟧ᵗ = Poly.isOfHLevelPolynomial 3 is-groupoid-shape ⟦_⟧ : hGroupoid ℓ → hGroupoid ℓ ⟦_⟧ (X , is-groupoid-X) .fst = ⟦ X ⟧ᵗ ⟦_⟧ (X , is-groupoid-X) .snd = isGroupoid-⟦_⟧ᵗ is-groupoid-X ⟦-⟧ᵗ-Path : ∀ {X : Type ℓ} {p q : ⟦_⟧ᵗ X} → (shape-path : shape p ≡ shape q) → (label-path : PathP (λ i → Pos (shape-path i) → X) (label p) (label q)) → p ≡ q ⟦-⟧ᵗ-Path = Poly.Polynomial≡ ⟦-⟧-Path : ∀ {X : hGroupoid ℓ} {p q : ⟨ ⟦_⟧ X ⟩} → (shape-path : shape p ≡ shape q) → (label-path : PathP (λ i → Pos (shape-path i) → ⟨ X ⟩) (label p ) (label q)) → p ≡ q ⟦-⟧-Path = ⟦-⟧ᵗ-Path module Map = Poly.Map Shape Pos ⟦_⟧-map : ∀ (X Y : hGroupoid ℓ) (f : ⟨ X ⟩ → ⟨ Y ⟩) → ⟨ ⟦_⟧ X ⟩ → ⟨ ⟦_⟧ Y ⟩ ⟦_⟧-map _ _ = Map.map ⟦_⟧-map-id : (X : hGroupoid ℓ) → ⟦_⟧-map X X (id ⟨ X ⟩) ≡ id ⟨ ⟦_⟧ X ⟩ ⟦_⟧-map-id X = Map.map-id ⟨ X ⟩ ⟦_⟧-map-comp : ∀ (X Y Z : hGroupoid ℓ) (f : ⟨ X ⟩ → ⟨ Y ⟩) (g : ⟨ Y ⟩ → ⟨ Z ⟩) → ⟦_⟧-map X Z (g ∘ f) ≡ ⟦_⟧-map Y Z g ∘ ⟦_⟧-map X Y f ⟦_⟧-map-comp _ _ _ = Map.map-comp