Given the following code:
Definition evil_type := nat : Type. (* the type annotation is necessary *)
Goal evil_type = evil_type.
Proof.
exact (eq_refl evil_type).
Qed.
Goal evil_type = evil_type.
Proof.
exact_no_check (eq_refl evil_type).
Qed.
Is there a succinct explanation why the exact works, but exact_no_check fails?
The term "eq_refl" has type "@eq Type@{Unnamed_thm0.u1} MUTATED MUTATED"
while it is expected to have type
"@eq Type@{Unnamed_thm0.u0} MUTATED MUTATED".
I only partially understand the function of the Type Sort (Documentation), but I would assume that e.g. a failure to recognise that one Type is a subtype of Type should not differ between exact and exact_no_check.