зависит от системы. Если система содержит equality reflection, то нельзя:
Under a false hypothesis, all equations hold and every program is well-typed. As you cannot tell whether your current context contains a false hypothesis (what with the undecidability of propositions and all), it’s basically unsafe to execute open terms.
Если система содержит general recursion, то тоже нельзя, потому что доказательство равенства может быть фейковым и просто зацикливаться, так что надо досчитать до
Refl
и только потом коерсить
Плюс есть разные варианты иррелевантности. В агде есть по сути compile-time irrelevance и runtime-irrelevance. В первом случае если у тебя есть два значения
x1
,
x2
, которые имеют тип
.A
(точка отвечает за иррелевантность), то оба значения равны для тайпчекера и не существуют в рантайме. Во втором случае они не считаются равными для тайпчекера, но все еще отсуствуют в рантайме. Можно тут про второй случай почитать:
https://agda.readthedocs.io/en/v2.6.1/language/runtime-irrelevance.htmlНасколько я понимаю, надо читать про Quantitative Type Theory, чтобы понять общую картину, но я не читал