Martin Escardo and Paulo Oliva 2011

\begin{code}

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

module InfinitePigeon.J-DC where

open import InfinitePigeon.Addition
open import InfinitePigeon.Choice
open import InfinitePigeon.Equality
open import InfinitePigeon.J-Shift
open import InfinitePigeon.JK-LogicalFacts
open import InfinitePigeon.JK-Monads
open import InfinitePigeon.Logic
open import InfinitePigeon.LogicalFacts
open import InfinitePigeon.Naturals

\end{code}

-----------------------------------------------------------
--                                                       --
-- Translation of dependent choice for a particular case --
--                                                       --
-----------------------------------------------------------

\begin{code}

J-∀-double-shift : {R : Ω}
                   {P :       Ω}
                  (∀(n : )  ∀(x : )  J∃ \(y : )  P n x y)
                  J(∀(n : )  ∀(x : )   \(y : )  P n x y)
J-∀-double-shift {R} f = J-∀-shift {R}  n  J-∀-shift (f n))

J-DC-ℕ : {R : Ω}
         {P :       Ω}
         (x₀ : )
        (∀(n : )  ∀(x : )  J∃ \(y : )  P n x y)
        J∃ \(α :   )  α O  x₀  (∀(n : )  P n (α n) (α(n + 1)))
J-DC-ℕ {R} x₀ f = (J-functor {R} (DC x₀)) (J-∀-double-shift f)

\end{code}