packages feed

dhall-1.26.1: dhall-lang/tests/type-inference/failure/hurkensParadox.dhall

    let bottom : Type = ∀(any : Type) → any

in  let not : Type → Type = λ(p : Type) → p → bottom

in  let pow = λ(X : Kind) → X → Type

in  let U = ∀(X : Kind) → (pow (pow X) → X) → pow (pow X)

in  let tau
        : pow (pow U) → U
        =   λ(t : pow (pow U))
          → λ(X : Kind)
          → λ(f : pow (pow X) → X)
          → λ(p : pow X)
          → t (λ(x : U) → p (f (x X f)))

in  let sigma : U → pow (pow U) = λ(s : U) → s U (λ(t : pow (pow U)) → tau t)

in  let Delta
        : pow U
        = λ(y : U) → not (∀(p : pow U) → sigma y p → p (tau (sigma y)))

in  let Omega : U = tau (λ(p : pow U) → ∀(x : U) → sigma x p → p x)

in  let Theta : Type = ∀(p : pow U) → (∀(x : U) → sigma x p → p x) → p Omega

in  let D : Type = ∀(p : pow U) → sigma Omega p → p (tau (sigma Omega))

in  let lem1
        : ∀(p : pow U) → (∀(x : U) → sigma x p → p x) → p Omega
        =   λ(p : pow U)
          → λ(t1 : ∀(x : U) → sigma x p → p x)
          → t1 Omega (λ(x : U) → t1 (tau (sigma x)))

in  let lem3 : D = λ(p : pow U) → lem1 (λ(y : U) → p (tau (sigma y)))

in  let lem2
        : not D
        = lem1
          Delta
          (   λ(x : U)
            → λ(H2 : sigma x Delta)
            → λ(H3 : ∀(p : pow U) → sigma x p → p (tau (sigma x)))
            → H3 Delta H2 (λ(pp : pow U) → H3 (λ(y : U) → pp (tau (sigma y))))
          )

in  let evidence : bottom = lem2 lem3

in  evidence