Set Primitive Projections.
Record Box {T} := box { unbox : T }. Arguments Box : clear implicits. Definition indirect := @unbox. Goalforall T : @Box Set, unbox T -> False. intros T x. let Tindirect := constr:(indirect _ T) in let Tdefined := eval cbv [indirect] in Tindirect in let Tfolded := type of x in
cbv [unbox] in x; let Tunfolded := type of x in match Tdefined with Tdefined => idtacend; match Tfolded with Tfolded => idtacend; match Tfolded with Tunfolded => idtacend; match Tdefined with Tfolded => idtacend; match Tdefined with Tunfolded => idtacend; match Tfolded with Tdefined => idtacend; (* matches above have passed for a while
matches below used to fail with "Error: No matching clauses for match." *) match Tunfolded with Tunfolded => idtacend; match Tunfolded with Tfolded => idtacend; match Tunfolded with Tdefined => idtacend;
assert_fails (constr_eq Tdefined Tfolded);
assert_fails (constr_eq Tdefined Tunfolded);
assert_fails (constr_eq Tfolded Tunfolded); idtac Tdefined Tfolded Tunfolded. Abort.
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.