Theory Ordered_Resolution_Welltypedness_Preservation
theory Ordered_Resolution_Welltypedness_Preservation
imports Grounded_Ordered_Resolution
begin
context ordered_resolution_calculus
begin
lemma factoring_preserves_typing:
assumes factoring: "factoring (š±, D) (š±, C)"
shows "clause.is_welltyped š± D ā· clause.is_welltyped š± C"
using assms
proof (cases "(š±, D)" "(š±, C)" rule: factoring.cases)
case (factoringI lā©1 μ tā©1 tā©2 lā©2 D')
show ?thesis
proof (rule iffI)
assume "clause.is_welltyped š± D"
then show "clause.is_welltyped š± C"
using factoringI
by simp
next
assume C_is_welltyped: "clause.is_welltyped š± C"
note imgu = factoringI(3, 4)
have "clause.is_welltyped š± (add_mset lā©1 D')"
using C_is_welltyped imgu
unfolding factoringI
by simp
moreover have "literal.is_welltyped š± lā©2"
using C_is_welltyped term.imgu_same_type[OF imgu] imgu
unfolding factoringI
by force
ultimately show "clause.is_welltyped š± D"
unfolding factoringI
by simp
qed
qed
lemma resolution_preserves_typing:
assumes
resolution: "resolution (š±ā©2, D) (š±ā©1, E) (š±ā©3, C)" and
D_is_welltyped: "clause.is_welltyped š±ā©2 D" and
E_is_welltyped: "clause.is_welltyped š±ā©1 E"
shows "clause.is_welltyped š±ā©3 C"
using resolution
proof (cases "(š±ā©2, D)" "(š±ā©1, E)" "(š±ā©3, C)" rule: resolution.cases)
case (resolutionI Ļā©1 Ļā©2 μ tā©1 tā©2 lā©1 lā©2 E' D')
note μ_type_preserving = resolutionI(6)
have "clause.is_welltyped š±ā©3 (E ā
Ļā©1)"
using E_is_welltyped clause.welltyped_renaming[OF resolutionI(3, 13)]
by blast
then have Eμ_is_welltyped: "clause.is_welltyped š±ā©3 (E ā
Ļā©1 ā μ)"
using μ_type_preserving
by simp
moreover have "clause.is_welltyped š±ā©3 (D ā
Ļā©2)"
using D_is_welltyped clause.welltyped_renaming[OF resolutionI(4, 14)]
by blast
then have Dμ_is_welltyped: "clause.is_welltyped š±ā©3 (D ā
Ļā©2 ā μ)"
using μ_type_preserving
by simp
ultimately show ?thesis
unfolding resolutionI
by auto
qed
end
end