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 l1 μ t1 t2 l2 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 l1 D')"
      using C_is_welltyped imgu
      unfolding factoringI
      by simp

    moreover have "literal.is_welltyped š’± l2"
      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 μ t1 t2 l1 l2 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