(* We tie it together *)

Fixpoint fg (n : nat) {struct n} : ((K1.knot -> K2.knot) * (K2.knot -> K1.knot)) :=
  match n with
   | 0 => (f_Z, g_Z)
   | S n => match fg n with (fn, gn) => (f_Sn gn, g_Sn fn) end
  end.

Lemma fg_fst_unsquash: forall n k, level k <= n -> forall U1, U1 = K1.unsquash k -> K2.unsquash (fst (fg n) k) = (fst U1, f_F' (snd (fg n)) (snd U1)).