Я пытаюсь сделать это следующим образом:
λ (A : *) ->
λ (B : (A -> *)) ->
λ (t : (∀ (r : *) -> (∀ (x : a) -> (B x) -> r)) -> r) ->
(t (B (t A (λ (x : A) -> λ (y : (B x)) -> x)))
(λ (x : A) -> λ (y : (B x)) -> y))
Обратите внимание: поскольку значение, возвращаемое этой функцией, зависит от значения внутри самой сигмы, мне нужно извлечь это значение. Этот код не проверяет, потому что я считаю, что он не может унифицировать тип, извлеченный из Sigma, с типом внутри него.
Есть ли обходной путь?
r
не является типом*
, а является семейством типовr :: (x:a) -> B x -> *
, позволяющим второй проекции иметь желаемый тип. Проверить, например, книга HoTT на страницах 31-32 для некоторого обсуждения типов сигм, а также зависимого и независимого исключения. - person chi   schedule 14.05.2017