+ | cons h' t' ⇒ (eqAsciiMin h h')⊗(eqStr_str t t')
+ ]
+ ].
+
+lemma eqex_switch : ∀e1,e2.eq_ex e1 e2 = eq_ex e2 e1.
+ intros;
+ elim e1;
+ elim e2;
+ reflexivity.
+qed.
+
+lemma eqb8_switch : ∀b1,b2.eq_b8 b1 b2 = eq_b8 b2 b1.
+ intros;
+ elim b1;
+ elim b2;
+ unfold eq_b8;
+ rewrite > eqex_switch in ⊢ (? ? % ?);
+ rewrite > eqex_switch in ⊢ (? ? (? ? %) ?);
+ reflexivity.
+qed.
+
+lemma eqasciimin_switch : ∀a1,a2.eqAsciiMin a1 a2 = eqAsciiMin a2 a1.
+ intros;
+ unfold eqAsciiMin;
+ rewrite > eqb8_switch in ⊢ (? ? % ?);
+ reflexivity.
+qed.
+
+lemma eq_to_eqstr : ∀s,s'.s = s' → eqStr_str s s' = true.
+ do 2 intro;
+ intro;
+ rewrite < H;
+ elim s;
+ [ 1: reflexivity
+ | 2: simplify;
+ rewrite > (eq_to_eqasciimin a a (refl_eq ??));
+ rewrite > H1;
+ reflexivity
+ ].
+qed.
+
+lemma eqstr_to_eq : ∀s,s'.eqStr_str s s' = true → s = s'.
+ intros 1;
+ elim s 0;
+ intros;
+ [ simplify in H:(%);
+ cases s' in H;
+ simplify;
+ intros;
+ [ reflexivity
+ | destruct H
+ ]
+ | elim s' in H1;
+ [ simplify in H1;
+ destruct H1
+ | simplify in H2;
+ lapply (andb_true_true ?? H2);
+ lapply (andb_true_true_r ?? H2);
+ rewrite > (H ? Hletin1);
+ rewrite > (eqasciimin_to_eq ?? Hletin);
+ reflexivity
+ ]
+ ].
+qed.