Theory well_founded_continued
theory well_founded_continued
imports Main
begin
subsection ‹Well-Founded Sets›
text ‹Most useful lemmata are already proven in the Well\_Founded theory available in Isabelle. 
We only establish a few convenient results for constructing well-founded sets and relations.›
lemma measure_wf:
  assumes "wf (r :: ('a × 'a) set)"
  assumes "r' = { (x,y). ((m x),(m y)) ∈ r }"
  shows "wf r'"
proof -
  have "(∀Q::'b set. ∀x:: 'b. x∈Q ⟶ (∃z∈Q. ∀y. (y,z)∈ r' --> y∉Q))"
  proof  ((rule allI)+,(rule impI))
    fix Q:: "'b set" fix x:: 'b assume "x∈Q"
    let ?Q' = "(m ` Q)"
    from ‹x ∈ Q› have Q'_not_empty: "m x ∈ ?Q'" by auto
    from assms(1) and Q'_not_empty obtain z' where "z' ∈ ?Q'" and z'min: "∀y. (y,z')∈ r 
      ⟶ y∉?Q'" using wf_eq_minimal [of r] by blast
    from ‹z' ∈ ?Q'› obtain z where "z' = (m z)" and "z ∈ Q" by auto
    have "∀y. (y,z)∈ r' ⟶ y∉Q"
    proof ((rule allI),(rule impI))
      fix y assume "(y,z)∈ r'"
      from assms(2) and this and ‹z' = (m z)› have "((m y),z') ∈ r" by auto
      from this and z'min have "(m y) ∉ ?Q'" by auto
      then show "y∉Q" by auto
    qed
    from this and ‹z ∈ Q› show "(∃z∈Q. ∀y. (y,z)∈ r' --> y∉Q)"  by auto
  qed
  then show ?thesis using wf_eq_minimal by auto
qed
lemma finite_proj_wf:
  assumes "finite E"
  assumes "x ∈ E"
  assumes "acyclic r"
  shows "(∃ y. y ∈ E ∧ (∀ z. (z, y) ∈ r ⟶ z ∉ E))"
proof -
  let ?r = "{ (u,v). (u ∈ E ∧ v ∈ E ∧ (u,v) ∈ r) }"
  from assms(1) have "finite (E × E)" by auto
  have "?r ⊆ (E × E)" by auto
  have "?r ⊆ r" by auto
  from ‹?r ⊆ (E × E)› and ‹finite (E × E)› have "finite ?r" using finite_subset by auto
  from assms(3) and ‹?r ⊆ r› have "acyclic ?r" unfolding acyclic_def using trancl_mono by blast 
  from ‹acyclic ?r› ‹finite ?r› have "wf ?r" using finite_acyclic_wf by auto
  from this assms(2) obtain y where "y ∈ E" and i: "⋀z. (z, y) ∈ ?r ⟹ z ∉ E"  
    using wfE_min [of "?r" x E] by blast
  have "∀z. (z, y) ∈ r ⟶ z ∉ E"
  proof (rule allI,rule impI)
    fix z assume "(z,y) ∈ r"
    show "z ∉ E"
    proof 
      assume "z ∈ E"
      from this and ‹y ∈ E› and ‹(z,y) ∈ r› have "(z,y) ∈ ?r" by auto
      from this and i [of z] and ‹z ∈ E› show False by auto
    qed
  qed
  from this and ‹y ∈ E› show ?thesis by auto
qed
end