module NatAlgebra where open import Preliminaries record NatAlg (X : Set) : Set where field S : X → X Z : X module _ {X : Set} (X-alg : NatAlg X) where private module X = NatAlg X-alg record DNatAlg (Y : X → Set) : Set where field S : {x : X} → Y x → Y (X.S x) Z : Y X.Z module _ {Y : X → Set} (Y-alg : DNatAlg Y) where private module Y = DNatAlg Y-alg record NSec : Set where field on-C : (x : X) → Y x on-S : (x : X) → on-C (X.S x) ≡ Y.S (on-C x) on-Z : on-C X.Z ≡ Y.Z Σ-alg : NatAlg (Σ X Y) Σ-alg .NatAlg.S x .fst = X.S (x .fst) Σ-alg .NatAlg.S x .snd = Y.S (x .snd) Σ-alg .NatAlg.Z = (X.Z , Y.Z)