I have
Fixpoint concat_aux {A : Type} (lang1 lang2 : list A -> nat -> nat -> bool) (w : list A) (start : nat) (delta i : nat) : bool :=
match lang1 w start i && lang2 w (start + i) (delta - i) with
| true => true
| false => match i with
| 0 => false
| S i' => concat_aux lang1 lang2 w start delta i'
end
end.
This lemma should be trivial by substituting,
Lemma concat_aux_correct1 {A : Type} : forall lang1 lang2 w start delta i,
lang1 w start i = true /\ lang2 w (start + i) (delta - i) = true
-> @concat_aux A lang1 lang2 w start delta i = true.
But the following fails to make progress.
Proof.
intros.
simpl. (* nothing happens *)
unfold concat_aux.
simpl. (* nothing happens *)
Admitted.
Why is this happening and what do I do?