Definition f_Sn (k1 : K1.knot) : K2.knot :=
  match K1.unsquash k1 with
    (n, F_p1) => K2.squash (n, f_F' g F_p1)
  end.Definition g_Sn (k2 : K2.knot) : K1.knot :=
  match K2.unsquash k2 with
    (n, F_p2) => K1.squash (n, g_F' f F_p2)
  end.

(* Specifications: *)
Lemma f_inj : forall ka kb, level ka <= n -> level kb <= n -> f ka = f kb -> ka = kb.
Lemma g_inj : forall ka kb, level ka <= n -> level kb <= n -> g ka = g kb -> ka = kb.
Lemma f_surj : forall k2, level k2 <= n -> exists k1, f k1 = k2.
Lemma g_surj : forall k1, level k1 <= n -> exists k2, g k2 = k1.
Lemma predn_iso1: forall m, m <= (n+1) -> g_pred' f oo K2.approx m oo f_pred' g = K1.approx m.
Lemma predn_iso2: forall m, m <= (n+1) -> f_pred' g oo K1.approx m oo g_pred' f = K2.approx m.
Lemma iso1_Sn : forall k, level k <= n + 1 -> (g_Sn oo f_Sn) k = k.
Lemma iso2_Sn : forall k, level k <= n + 1 -> (f_Sn oo g_Sn) k = k.
Lemma f_level_Sn: forall k, level k = level (f_Sn k).
Lemma g_level_Sn: forall k, level k = level (g_Sn k).
Lemma Fn_iso2 : forall m, m <= n + 1 -> g_F' f oo f_F' g oo fmap F (K1.approx m) = fmap F (K1.approx m).
Lemma gn_unsquash : forall k2, level k2 <= n -> forall U2, U2 = K2.unsquash k2 -> K1.unsquash (g k2) = (fst U2, g_F' f (snd U2)).
Lemma gn_squash : forall m F2, m <= n -> g (K2.squash (m, F2)) = K1.squash (m, g_F' f F2).
Lemma fSn_unsquash : forall k1, level k1 <= n + 1 -> forall U1, U1 = K1.unsquash k1 -> K2.unsquash (f_Sn k1) = (fst U1, f_F' (g_Sn) (snd U1)).
Lemma gn_gSn_eq_n : forall k, level k <= n -> g k = g_Sn k.