Section SubstitutionTransformations.
Variable (X: Const) (n: nat) (s t: exp X) (A: type) (Gamma: ctx).
Hypothesis (Leq: 1 <= n).
Hypothesis (T1:  Gamma ⊢(n) s : A) (T2: Gamma ⊢(n) t : A).
Implicit Types (Delta: ctx) (sigma : fin -> exp X).
End SubstitutionTransformations.
Variable (X: Const).
Arguments sᵤ {_} _.
Arguments tᵤ {_} _.
Arguments Gammaᵤ {_} _.
Arguments Aᵤ {_} _.
Program Instance uni_normalise (I: uni X) : uni X :=
{ Gammaᵤ := Gammaᵤ I; sᵤ := eta (sᵤ I) H1ᵤ; tᵤ := eta (tᵤ I) H2ᵤ; Aᵤ := Aᵤ I }.
Next Obligation.
eapply preservation_under_steps. rewrite <-eta_correct. all: eauto.
Qed.
Next Obligation.
eapply preservation_under_steps. rewrite <-eta_correct. all: eauto.
Qed.

Lemma uni_normalise_correct I:
U X I <-> U X (uni_normalise I).