Martin Escardo and Paulo Oliva 2011

\begin{code}

{-# OPTIONS --without-K --no-termination-check #-}

\end{code}

We use Berger's modified bar recursion functional to realize the
K-Shift.

\begin{code}

module InfinitePigeon.K-Shift-MBR where

open import InfinitePigeon.Finite
open import InfinitePigeon.JK-Monads
open import InfinitePigeon.Logic
open import InfinitePigeon.LogicalFacts
open import InfinitePigeon.Naturals

K-∀-shift-mbr : {R : Ω}
                {A :   Ω}
               (∀(n : )  R  A n)                     -- efqs,
               (∀(n : )  K(A n))  K(∀(n : )  A n)  -- shift.

K-∀-shift-mbr {R} {A} efqs φs p = mbr {0}  ())
  where
   mbr : {m : }  (∀(i : smaller m)  A(embed i))  R
   mbr {m} s = p(override s  n  efqs n (φs m  x  mbr(append {A} s x)))))

\end{code}