Theory Abstract_Substitution.Based_Substitution_Lifting
theory Based_Substitution_Lifting
imports
Based_Substitution
Substitution_Lifting
begin
section ‹Lifting of based substitutions›
locale based_substitution_lifting =
substitution_lifting +
base: base_substitution where subst = base_subst and vars = base_vars +
sub: based_substitution where subst = sub_subst and vars = sub_vars
begin
sublocale based_substitution where subst = subst and vars = vars
proof unfold_locales
fix expr ρ
show "vars (expr ⋅ ρ) = ⋃ (base_vars ` (λx. x ⋅v ρ) ` vars expr)"
using sub.vars_subst
unfolding subst_def vars_def
by simp
qed simp
end
subsection ‹Lifting of properties›
locale variables_in_base_imgu_lifting =
based_substitution_lifting +
sub: variables_in_base_imgu where vars = sub_vars and subst = sub_subst
begin
sublocale variables_in_base_imgu where subst = subst and vars = vars
proof unfold_locales
fix expr μ XX
assume imgu: "base.is_imgu μ XX" "finite XX" "∀X ∈ XX. finite X"
show "vars (expr ⋅ μ) ⊆ vars expr ∪ ⋃ (base_vars ` ⋃ XX)"
using sub.variables_in_base_imgu[OF imgu]
unfolding vars_def subst_def to_set_map
by auto
qed
end
end