Section RESTRICT_STRUCTURE.
#[local] Existing Instance V.vec_isSetoid.
#[local]
Instance restrict_structure (STRUCTURE : isStructureOf L') : isStructureOf L :=
{ domain_of_discourse := STRUCTURE.(domain_of_discourse)
; equation_interpret := STRUCTURE.(equation_interpret)
; function_interpret (f : L.(function_symbols)) := STRUCTURE.(function_interpret) f
; constant_interpret (c : L.(constant_symbols)) := STRUCTURE.(constant_interpret) (inl c)
; relation_interpret (R : L.(relation_symbols)) := STRUCTURE.(relation_interpret) R
; domain_is_nonempty := STRUCTURE.(domain_is_nonempty)
; function_interpret_preserves_eqProp := STRUCTURE.(function_interpret_preserves_eqProp)
; relation_interpret_preserves_eqProp := STRUCTURE.(relation_interpret_preserves_eqProp)
}.

Lemma restrict_structure_trm (STRUCTURE : isStructureOf L') (env : ivar -> domain_of_discourse) (t : trm L)
: interpret_trm STRUCTURE env (embed_trm t) == interpret_trm (restrict_structure STRUCTURE) env t
with restrict_structure_trms n (STRUCTURE : isStructureOf L') (env : ivar -> domain_of_discourse) (ts : trms L n)
: interpret_trms STRUCTURE env (embed_trms ts) == interpret_trms (restrict_structure STRUCTURE) env ts.