(* Now we show that k1_pred and k2_pred are the identity under approximation. *)
(* Not clear that we need this. *)
(* Lemma k1_pred_iso: K1.approx (n+1) oo k1_pred = K1.approx (n+1).  Lemma k2_pred_iso: K2.approx (n+1) oo k2_pred = K2.approx (n+1). *)
(* What we would like to show next is that f and g preserve the level of the knot, even in their (unfortunately non-unique over level n) inverses. Unfortunately, this is not possible:  Lemma f_level: forall k, K1.level k = K2.level (f k).  This is clearly impossible since we don't know anything about the behavior of f for knots above level n.  Actually, even this weaker version is not provable:  Lemma f_level: forall k, (K1.level k <= n \/ K2.level (f k) <= n) -> K1.level k = K2.level (f k).  Counterexample: K1.knot = K2.knot = nat; K1.level = K2.level = id; f = inc, g = dec; *)
(* So we must assert them as axioms, which means a bigger induction *)
Variable f_level: forall k, level k = level (f k).
Variable g_level: forall k, level k = level (g k).

(* However, using them we can prove pred_iso1 and pred_iso2, which are vital. *)
Lemma predn_iso1: forall m,
m <= (n+1) ->
g_pred' f oo K2.approx m oo f_pred' g = K1.approx m.