Проблема в том, что ssralg
уже объявляет ordinal
как экземпляр zmodType
. Может быть только один канонический экземпляр структуры на символ головы, поэтому ваше объявление ordn_ZmodType
фактически игнорируется.
Единственное решение вокруг этого - ввести локальный синоним в этом разделе и использовать его для определенияканонические структуры:
(* ... *)
Definition foo := 'I_n.
(* ... *)
Definition ordn_ZmodType := ZmodType foo Mixin.
(* ... *)
Canonical ordnRing := RingType foo mcommixin. (* This now works *)
Другое решение заключается в использовании экземпляра ringType
, определенного в MathComp для ordinal
. Подвох в том, что он определен только для типов вида 'I_n.+2
. В принципе, можно было бы также объявить эти случаи, приняв те же аксиомы на n
, что и вы, но это усложнило бы вывод канонических структур.
Check fun n => [ringType of 'I_n.+2].
(* ... : nat -> ringType *)