Source code on Github
open import Prelude.Init; open SetAsType
open L.Mem
open import Prelude.DecEq

module Nominal.New (Atom : Type)  _ : DecEq Atom  where

-- ** The И "new" quantifier.
И : Pred (Pred Atom ) 
-- И "for all except finitely many"
И φ =  λ (xs : List Atom)  (∀ y  y  xs  φ y)
--                            ∀ y ∉ xs → φ y
-- ⅁ for "generous", i.e. "for infinitely many"
-- ⅁ φ = ∀ (xs : List Atom) → (∃ y → (y ∈ xs) → φ y)
--                            ∃ y ∉ xs → φ y
-- NB: И is *self-dual*
-- И̅ = ⅁

И⅁ : Pred (Atom  Atom  Type ) 
И⅁ φ =  λ (xs : List Atom) 
   (∀ y z  y  xs  z  xs  φ y z)

-- И∗ : Pred (Pred (List Atom) ℓ) ℓ
-- И∗ φ = ∃ λ (xs : List Atom) → (∀ ys → All (_∉ xs) ys → φ ys)

И^_ : (n : )  Pred (Pred (Vec Atom n) ) 
(И^ n) φ =  λ (xs : List Atom)  (∀ ys  V.All.All (_∉ xs) ys  φ ys)

И² : Pred (Atom  Atom  Type ) 
-- И² φ = (И^ 2) λ where (x ∷ y ∷ []) → φ x y
И² φ =  λ (xs : List Atom)  (∀ y z  y  xs  z  xs  φ y z)

И³ : Pred (Atom  Atom  Atom  Type ) 
-- И³ φ = (И^ 3) λ where (x ∷ y ∷ z ∷ []) → φ x y z
И³ φ =  λ (xs : List Atom)  (∀ y z w  y  xs  z  xs  w  xs  φ y z w)

-- ** the co-finite construction leads to issues with universe levels.
-- open import Cofinite.agda
-- И : Pred (Pred Atom ℓ) (lsuc ℓ)
-- И P = powᶜᵒᶠ P