Section DowncastLemmas.
Implicit Types (s t: exp X) (Gamma: ctx)  (A: type).
Variable (n: nat).
Hypothesis (Leq: 1 <= n).
End DowncastLemmas.
Program Instance unification_monotone {n} (D: orduni n X): orduni (S n) X :=
{  Gamma₀ := Gamma₀; s₀ := s₀ ; t₀ := t₀; A₀ := A₀; }.
Program Instance unification_conservative {n} (D: orduni n X): uni X :=
{  Gammaᵤ := Gamma₀; sᵤ := s₀ ; tᵤ := t₀; Aᵤ := A₀; }.
Next Obligation.
eapply ordertyping_soundness; eauto.
Qed.
Next Obligation.
eapply ordertyping_soundness; eauto.
Qed.
Program Instance SU_monotone {n} (I: ordsysuni X n): ordsysuni X (S n) :=
{  Gamma₀' := @Gamma₀' _ _ I; E₀' := @E₀' _ _ I ; L₀' := @L₀' _ _ I; }.
Next Obligation.
eapply eqs_ordertyping_step, @H₀'.
Qed.
Program Instance SU_conservative {n} (I: ordsysuni X n): sysuni X :=
{  Gammaᵤ' := @Gamma₀' _ _ I; Eᵤ' := @E₀' _ _ I ; Lᵤ' := @L₀' _ _ I; }.
Next Obligation.
eapply eqs_ordertyping_soundness, H₀'.
Qed.

Theorem unification_conserve n: 1 <= n -> OU n X ⪯ U X.