Section Retracts.
Variable (X Y: Const).
Variable (RE: retract X Y).
Hypothesis consts_agree: forall x: X, ctype X x = ctype Y (I x).
Let inj (c: X) := const (I c).
Let re (f: Y -> nat) (d: Y) :=
match tight RE d with
| Some x => const x
| None => inhab X (f d) (ctype Y d)
end.

Lemma inj_typing n sigma Gamma Delta:
Delta ⊩(n) sigma : Gamma ->
Delta ⊩(n) sigma >> subst_consts inj : Gamma.