module Calf.Computation.Copower where

open import Calf.Value
open import Calf.Value.Sigma public
open import Calf.Computation
open import Cubical.Foundations.Prelude using (cong)
open import Cubical.Foundations.HLevels
open import Cubical.Foundations.Structure

Σᢜ : (X : 𝒱ₛ) β†’ (⟨ X ⟩ β†’ π’ž) β†’ π’ž
Σᢜ isSetX A .U = Σ[ x ∈ _ ] U (A x)
Σᢜ isSetX A .is-set = isSetΞ£ (str isSetX) Ξ» x β†’ A x .is-set
Σᢜ isSetX A .charge c (x , a) = x , A x .charge c a
Σᢜ isSetX A .charge/0 {x , a} = cong (x ,_) (A x .charge/0)
Σᢜ isSetX A .charge/+ {x , a} = cong (x ,_) (A x .charge/+)

syntax Σᢜ X (Ξ» x β†’ A) = [ x ∈ X ] β‹Š A

_β‹Š_ : 𝒱ₛ β†’ π’ž β†’ π’ž
X β‹Š A = [ _ ∈ X ] β‹Š A