Я застреваю, пытаясь доказать теорему substi_correct в SF, потому что я не знаю, как разделить логическое равенство и одновременно утверждать это как пропозициональное равенство.
Theorem substi_correct : forall s x t t',
[x:=s]t = t' <-> substi s x t t'.
Proof.
intros.
split.
+ generalize dependent t'.
induction t; intros.
- simpl in H.
subst.
case (eqb_string x0 s0).
* constructor. (*Doesn't work*)
Целью доказательства является далее, без необходимой H: x0 = s0, чтобы я мог продолжить.
s : tm
x0, s0 : string
============================
substi s x0 (var s0) s
В главе Maps.v мы доказываем, помимо ложного случая,
Theorem eqb_string_true_iff : forall x y : string,
eqb_string x y = true <-> x = y.
но как я могу использовать тогда, когда сопоставление с образцом (eqb_string x0 s0), чтобы я мог продолжить? Я должен использовать это как лемму в доказательстве или есть более простой способ продолжить?