Source code on Githubopen import Prelude.Init; open SetAsType
open L.Mem
open import Prelude.DecEq
open import Prelude.InfEnumerable
open import Prelude.Setoid
module Nominal.Abs.Product (Atom : Type) ⦃ _ : DecEq Atom ⦄ ⦃ _ : Enumerable∞ Atom ⦄ where
open import Nominal.New Atom
open import Nominal.Swap Atom
open import Nominal.Support Atom
open import Nominal.Abs.Base Atom
open import Nominal.Product Atom
open import Nominal.Abs.Support Atom
module _
{A : Type ℓ} {B : Type ℓ′}
⦃ _ : ISetoid A ⦄ ⦃ _ : ISetoid B ⦄
⦃ _ : SetoidLaws A ⦄ ⦃ _ : SetoidLaws B ⦄
⦃ _ : Swap A ⦄ ⦃ _ : Swap B ⦄
⦃ _ : SwapLaws A ⦄ ⦃ _ : SwapLaws B ⦄ where
open ≈-Reasoning
Abs-× : Abs (A × B) → Abs A × Abs B
Abs-× (abs x (a , b)) = abs x a , abs x b
module _ ⦃ _ : FinitelySupported A ⦄ ⦃ _ : FinitelySupported B ⦄ where
Abs-ע : Abs A × Abs B → Abs (A × B)
Abs-ע (t̂ , t̂′) =
let z = minFresh (supp t̂ ++ supp t̂′) .proj₁
in abs z (conc t̂ z , conc t̂′ z)