(*---------------------*) ⊢
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 90 V ) sep ,)) ⊢ term 19 Px ≡ term 19 Py"
+notation > "≔ (list0 ( (list1 (ident x) sep , ) opt (: T) ) sep ,) opt (; (list1 (ident U ≟ term 19 V ) sep ,)) ⊢ term 19 Px ≡ term 19 Py"
with precedence 90
for @{ ${ fold right
@{ ${ default
interpretation "hint_decl_CProp0" 'hint_decl a b = (hint_declaration_CProp0 ? a b).
interpretation "hint_decl_Type0" 'hint_decl a b = (hint_declaration_Type0 ? a b).
-(* little test
-naxiom A : Type[0].
-naxiom C : A → A → Type[0].
-ndefinition D ≝ C.
-alias symbol "hint_decl" = "hint_decl_Type1".
-unification hint 0 ≔
- X, R : A, Y ; Z ≟ X, W ≟ Y ⊢ C X Y ≡ D Z W.
-*)
+(* Non uniform coercions support *)
+nrecord lock2 (S : Type[2]) (s : S) : Type[3] ≝ {
+ force2 : Type[2];
+ lift2 : force2
+}.
+
+nrecord lock1 (S : Type[1]) (s : S) : Type[2] ≝ {
+ force1 : Type[1];
+ lift1 : force1
+}.
+
+ncoercion lift1 : ∀S:Type[1].∀s:S.∀l:lock1 S s. force1 S s l ≝ lift1
+ on s : ? to force1 ???.
+
+ncoercion lift2 : ∀S:Type[2].∀s:S.∀l:lock2 S s. force2 S s l ≝ lift2
+ on s : ? to force2 ???.
+
+(* Example of a non uniform coercion declaration
+
+ Type[0] setoid
+ >--->
+ MR R
+
+ provided MR = carr R
+
+unification hint 0 ≔ R : setoid;
+ MR ≟ carr R,
+ lock ≟ mk_lock1 Type[0] MR setoid R
+(* ---------------------------------------- *) ⊢
+ setoid ≡ force1 ? MR lock.
+
+*)
\ No newline at end of file