I have an Inductive Set built with three constructors:
Inductive MF : Set :=
| D : MF
| cn : MF -> MF -> MF
| dn : Z -> MF -> MF.
I would like to somehow define a new inductive set B, such that B is a subset of MF containing just the elements obtained from D and dn. Furthermore, everything in B should be interpreted as type MF if needed.
I tried defining first B and then MF as follows:
Inductive B : Set :=
| D : B
| dn : Z -> B -> B.
Inductive MF : Set :=
| m : B -> MF
| cn : MF -> MF -> MF
| Dn : Z -> MF -> MF.
Axiom m_inj : forall (a b : B), m a = m b -> a = b.
Coercion m : B >-> MF.
Axiom dnDn : forall (a : B)(i : Z), (m (dn i a)) = (Dn i (m a)).
The problem here is that I have to constructors (dn and Dn) that should be interchangable with respect the elements in B. This gives me a lot of problems in further developments and I have to keep adding Axioms in order to get the intended behavior.