Martin Escardo, Paulo Oliva, 2023

\begin{code}

{-# OPTIONS --safe --without-K #-}

open import MLTT.Spartan hiding (J)

module Games.JK where

open import Games.J
open import Games.K

module JK (R : Type) where

 open J-definitions R
 open K-definitions R

 overline : {X : Type}  J X  K X
 overline ε = λ p  p (ε p)

 overline-theorem : {X : Type} {Y : X  Type}
                    (ε : J X) (δ : (x : X)  J (Y x))
                   overline (ε ⊗ᴶ δ)  overline ε ⊗ᴷ  x  overline (δ x))
 overline-theorem ε δ q = refl

 _attains_ : {X : Type}  J X  K X  Type
 ε attains ϕ = overline ε  ϕ

\end{code}

TODO. Show that overline is a monad morphism.

TODO. Define also the above for the J and K monad transformers, maybe
in this file, maybe in another file.