Как я уже сказал в комментариях, BigConfig
- это SmallConfig + State
, что означает, что если вы определите SmallConfig
, как вы это сделали:
Inductive SmallConfig : Type :=
| S_AExpConf : AExp -> State -> SmallConfig
| S_BExpConf : BExp -> State -> SmallConfig
| S_StmtConf : Statement -> State -> SmallConfig
| S_BlkConf : Block -> State -> SmallConfig
| S_PgmConf : Program -> SmallConfig.
Тогда один из способов определения BigConfig
:
Definition BigConfig : Type := sum SmallConfig State.
Тогда вместо сопоставления с образцом на конструкторах BigConfig
(которых больше не существует) необходимо сопоставить с рисунком на sum
(inl
/ inr
) и *Конструкторы 1015 * в корпусе inl
.
match bconf with
| inl (S_AExpConf a s) => ...
| inl (S_BExpConf b s) => ...
...
| inr s (* this represents B_StateConf *) => ...
end