Вы можете выполнить синтаксическое сопоставление type of A
для извлечения аргументов.
Ltac restore_dims :=
repeat match goal with
| [ |- context[@Mmult ?m ?n ?o ?A ?B]] =>
match type of A with
| Matrix ?m' ?n' => replace m with m' by easy
end;
match type of B with
| Matrix ?n'' ?o' => replace n with n'' by easy
(* or whatever you wanted to do with n'' and o' *)
end
end.
Если вы думаете, что m
и m'
будут конвертируемыми, а не просто равными, и вам нужны хорошие термины доказательства, рассмотрите возможность использования тактики change
вместо replace
, например. change n'' with n
. Это ничего не добавит к условному термину, поэтому с ним легче работать.