-include "logic/pts.ma".
-ndefinition hint_declaration_Type0 ≝ λA:Type[0] .λa,b:A.a.
-ndefinition hint_declaration_Type1 ≝ λA:Type[1].λa,b:A.a.
-ndefinition hint_declaration_Type2 ≝ λa,b:Type[1].a.
-ndefinition hint_declaration_CProp0 ≝ λA:CProp[0].λa,b:A.a.
-ndefinition hint_declaration_CProp1 ≝ λA:CProp[1].λa,b:A.a.
-ndefinition hint_declaration_CProp2 ≝ λa,b:CProp[1].a.
-
-notation > "≔ (list0 (ident x : T )sep ,) ⊢ term 19 Px ≡ term 19 Py"
+(*
+
+Notation for hint declaration
+==============================
+
+The idea is to write a context, with abstraction first, then
+recursive calls (let-in) and finally the two equivalent terms.
+The context can be empty. Note the ; to begin the second part of
+the context (necessary even if the first part is empty).
+
+ unification hint PREC \coloneq
+ ID : TY, ..., ID : TY
+ ; ID \equest T, ..., ID \equest T
+ \vdash T1 \equiv T2
+
+With unidoce and some ASCII art it looks like the following:
+
+ unification hint PREC ≔ ID : TY, ..., ID : TY;
+ ID ≟ T, ..., ID ≟ T
+ (*---------------------*) ⊢
+ T1 ≡ T2
+
+The order of premises is relevant, since they are processed in order
+(left to right).
+
+*)
+
+(* it seems unbelivable, but it works! *)
+notation > "≔ (list0 ( (list1 (ident x) sep , ) opt (: T) ) sep ,) opt (; (list1 (ident U ≟ term 19 V ) sep ,)) ⊢ term 19 Px ≡ term 19 Py"