Dear professionals,
I encountered the following problem:
H46 : Exp1 n3 n2 = L3 (arrow n2 n3)
H47 : subal (FxE n3 n2) (subt A2 n2 :: subt n3 A3 :: Exp1 n3 n2)
============================
subal (FxE n3 n2) (subt A2 n2 :: subt n3 A3 :: L3 (arrow n2 n3))
Proving such a goal should be easy: just plug H46 into H47 and the form matches. However, when I perform a `case H46`, Abella gives me
H47 : subal (FxE n3 n2) (subt A2 n2 :: subt n3 A3 :: Exp1 n3 n2)
H48 : Exp1 n3 n2 = L3 (arrow n2 n3)
============================
subal (FxE n3 n2) (subt A2 n2 :: subt n3 A3 :: L3 (arrow n2 n3))
and nothing actually changes. The search tactic does not help, either.
Currently a workaround for me is to define a theorem with simpler form so that Abella understands how to substitute:
Theorem wtf_subal : forall (f : ty -> ty -> olist -> olist) g h (a : ty -> ty -> ty) e,
nabla x y, subal (e x y) (f x y (g x y)) -> g x y = h (a y x) -> subal (e x y) (f x y (h (a y x))).
intros. case H2. search.
which is really easy to prove, and applying that to H47 H46 works.
I am eager to know what happened and how to solve the problem by not defining an auxiliary theorem. Thanks in advance.