{-# OPTIONS --safe --without-K #-}
open import Agda.Primitive renaming (Set to 𝒰)
open import Agda.Builtin.Equality

module UIPK (UIP :  {} {A : 𝒰 } {x y : A} (p q : x  y)  p  q)
            where

J :  { } {A : 𝒰 } {x y : A} (P : (a b : A)  a  b  𝒰 )  P x x refl  (p : x  y)  P x y p
J _ Prefl refl = Prefl

square :  {} {A : 𝒰 } {x y z w : A}  x  z  y  w  x  y  z  w
square refl refl p = p

transp :  { } {A : 𝒰 } {x y : A} (P : A  𝒰 )  x  y  P x  P y
transp P refl Px = Px

K :  { } {A : 𝒰 } {x : A} (P : x  x  𝒰 )  P refl  (p : x  x)  P p
K {x = x} P Prefl p = (J  a b q  (r : a  x)  (s : b  x)  P (square r s q))
                          a b  transp P (UIP refl (square a b refl)) Prefl)
                         p) refl refl