{-# OPTIONS --safe --cubical-compatible --guardedness --exact-split --double-check #-}
module ALMA.Base.MCorrSetoidPushMap where
open import Agda.Primitive using (Level)
open import Agda.Builtin.Sigma using (_,_)
open import ALMA.Base.MCorr using (M)
open import ALMA.Base.MCorrSetoid using (SysEq)
open import ALMA.Base.MCorrSetoidPush using (PushSimˢ)
open SysEq
module _ {i j a b c d ℓa ℓe ℓc ℓd ℓr ℓr' ℓh ℓh' : Level}
{X : SysEq i a b ℓa ℓe}
{Y : SysEq j c d ℓc ℓd}
(R : I X → I Y → Set ℓr)
(R' : I X → I Y → Set ℓr')
(H : (x : I X) (v : I Y) (r : R x v)
→ A X x → A Y v → Set ℓh)
(H' : (x : I X) (v : I Y) (r' : R' x v)
→ A X x → A Y v → Set ℓh')
(fR : ∀ {x v} → R x v → R' x v)
(fH : ∀ {x v} (r : R x v) {a : A X x} {b : A Y v}
→ H x v r a b → H' x v (fR r) a b)
where
push-map : ∀ {x : I X} {v : I Y} {r : R x v}
{t : M (A X) (E X) x}
{u : M (A Y) (E Y) v}
→ PushSimˢ X Y R H r t u
→ PushSimˢ X Y R' H' (fR r) t u
push-map p .PushSimˢ.here-eq = fH _ (PushSimˢ.here-eq p)
push-map p .PushSimˢ.push y e
with PushSimˢ.push p y e
... | w , e' , r₁ , q =
w , e' , fR r₁ , push-map q