products/sources/formale sprachen/Isabelle/HOL/Cardinals image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: Wellorder_Relation.thy   Sprache: Isabelle

Original von: Isabelle©

(*  Title:      HOL/Cardinals/Wellorder_Relation.thy
    Author:     Andrei Popescu, TU Muenchen
    Copyright   2012

Well-order relations.
*)


section \<open>Well-Order Relations\<close>

theory Wellorder_Relation
imports Wellfounded_More
begin

context wo_rel
begin

subsection \<open>Auxiliaries\<close>

lemma PREORD: "Preorder r"
using WELL order_on_defs[of _ r] by auto

lemma PARORD: "Partial_order r"
using WELL order_on_defs[of _ r] by auto

lemma cases_Total2:
"\ phi a b. \{a,b} \ Field r; ((a,b) \ r - Id \ phi a b);
              ((b,a) \<in> r - Id \<Longrightarrow> phi a b); (a = b \<Longrightarrow> phi a b)\<rbrakk>
             \<Longrightarrow> phi a b"
using TOTALS by auto


subsection \<open>Well-founded induction and recursion adapted to non-strict well-order relations\<close>

lemma worec_unique_fixpoint:
assumes ADM: "adm_wo H" and fp: "f = H f"
shows "f = worec H"
proof-
  have "adm_wf (r - Id) H"
  unfolding adm_wf_def
  using ADM adm_wo_def[of H] underS_def[of r] by auto
  hence "f = wfrec (r - Id) H"
  using fp WF wfrec_unique_fixpoint[of "r - Id" H] by simp
  thus ?thesis unfolding worec_def .
qed


subsubsection \<open>Properties of max2\<close>

lemma max2_iff:
assumes "a \ Field r" and "b \ Field r"
shows "((max2 a b, c) \ r) = ((a,c) \ r \ (b,c) \ r)"
proof
  assume "(max2 a b, c) \ r"
  thus "(a,c) \ r \ (b,c) \ r"
  using assms max2_greater[of a b] TRANS trans_def[of r] by blast
next
  assume "(a,c) \ r \ (b,c) \ r"
  thus "(max2 a b, c) \ r"
  using assms max2_among[of a b] by auto
qed


subsubsection \<open>Properties of minim\<close>

lemma minim_Under:
"\B \ Field r; B \ {}\ \ minim B \ Under B"
by(auto simp add: Under_def minim_inField minim_least)

lemma equals_minim_Under:
"\B \ Field r; a \ B; a \ Under B\
 \<Longrightarrow> a = minim B"
by(auto simp add: Under_def equals_minim)

lemma minim_iff_In_Under:
assumes SUB: "B \ Field r" and NE: "B \ {}"
shows "(a = minim B) = (a \ B \ a \ Under B)"
proof
  assume "a = minim B"
  thus "a \ B \ a \ Under B"
  using assms minim_in minim_Under by simp
next
  assume "a \ B \ a \ Under B"
  thus "a = minim B"
  using assms equals_minim_Under by simp
qed

lemma minim_Under_under:
assumes NE: "A \ {}" and SUB: "A \ Field r"
shows "Under A = under (minim A)"
proof-
  (* Preliminary facts *)
  have 1: "minim A \ A"
  using assms minim_in by auto
  have 2: "\x \ A. (minim A, x) \ r"
  using assms minim_least by auto
  (* Main proof *)
  have "Under A \ under (minim A)"
  proof
    fix x assume "x \ Under A"
    with 1 Under_def[of r] have "(x,minim A) \ r" by auto
    thus "x \ under(minim A)" unfolding under_def by simp
  qed
  (*  *)
  moreover
  (*  *)
  have "under (minim A) \ Under A"
  proof
    fix x assume "x \ under(minim A)"
    hence 11: "(x,minim A) \ r" unfolding under_def by simp
    hence "x \ Field r" unfolding Field_def by auto
    moreover
    {fix a assume "a \ A"
     with 2 have "(minim A, a) \ r" by simp
     with 11 have "(x,a) \ r"
     using TRANS trans_def[of r] by blast
    }
    ultimately show "x \ Under A" by (unfold Under_def, auto)
  qed
  (*  *)
  ultimately show ?thesis by blast
qed

lemma minim_UnderS_underS:
assumes NE: "A \ {}" and SUB: "A \ Field r"
shows "UnderS A = underS (minim A)"
proof-
  (* Preliminary facts *)
  have 1: "minim A \ A"
  using assms minim_in by auto
  have 2: "\x \ A. (minim A, x) \ r"
  using assms minim_least by auto
  (* Main proof *)
  have "UnderS A \ underS (minim A)"
  proof
    fix x assume "x \ UnderS A"
    with 1 UnderS_def[of r] have "x \ minim A \ (x,minim A) \ r" by auto
    thus "x \ underS(minim A)" unfolding underS_def by simp
  qed
  (*  *)
  moreover
  (*  *)
  have "underS (minim A) \ UnderS A"
  proof
    fix x assume "x \ underS(minim A)"
    hence 11: "x \ minim A \ (x,minim A) \ r" unfolding underS_def by simp
    hence "x \ Field r" unfolding Field_def by auto
    moreover
    {fix a assume "a \ A"
     with 2 have 3: "(minim A, a) \ r" by simp
     with 11 have "(x,a) \ r"
     using TRANS trans_def[of r] by blast
     moreover
     have "x \ a"
     proof
       assume "x = a"
       with 11 3 ANTISYM antisym_def[of r]
       show False by auto
     qed
     ultimately
     have "x \ a \ (x,a) \ r" by simp
    }
    ultimately show "x \ UnderS A" by (unfold UnderS_def, auto)
  qed
  (*  *)
  ultimately show ?thesis by blast
qed


subsubsection \<open>Properties of supr\<close>

lemma supr_Above:
assumes SUB: "B \ Field r" and ABOVE: "Above B \ {}"
shows "supr B \ Above B"
proof(unfold supr_def)
  have "Above B \ Field r"
  using Above_Field[of r] by auto
  thus "minim (Above B) \ Above B"
  using assms by (simp add: minim_in)
qed

lemma supr_greater:
assumes SUB: "B \ Field r" and ABOVE: "Above B \ {}" and
        IN"b \ B"
shows "(b, supr B) \ r"
proof-
  from assms supr_Above
  have "supr B \ Above B" by simp
  with IN Above_def[of r] show ?thesis by simp
qed

lemma supr_least_Above:
assumes SUB: "B \ Field r" and
        ABOVE: "a \ Above B"
shows "(supr B, a) \ r"
proof(unfold supr_def)
  have "Above B \ Field r"
  using Above_Field[of r] by auto
  thus "(minim (Above B), a) \ r"
  using assms minim_least
  by simp
qed

lemma supr_least:
"\B \ Field r; a \ Field r; (\ b. b \ B \ (b,a) \ r)\
 \<Longrightarrow> (supr B, a) \<in> r"
by(auto simp add: supr_least_Above Above_def)

lemma equals_supr_Above:
assumes SUB: "B \ Field r" and ABV: "a \ Above B" and
        MINIM: "\ a'. a' \ Above B \ (a,a') \ r"
shows "a = supr B"
proof(unfold supr_def)
  have "Above B \ Field r"
  using Above_Field[of r] by auto
  thus "a = minim (Above B)"
  using assms equals_minim by simp
qed

lemma equals_supr:
assumes SUB: "B \ Field r" and IN: "a \ Field r" and
        ABV: "\ b. b \ B \ (b,a) \ r" and
        MINIM: "\ a'. \ a' \ Field r; \ b. b \ B \ (b,a') \ r\ \ (a,a') \ r"
shows "a = supr B"
proof-
  have "a \ Above B"
  unfolding Above_def using ABV IN by simp
  moreover
  have "\ a'. a' \ Above B \ (a,a') \ r"
  unfolding Above_def using MINIM by simp
  ultimately show ?thesis
  using equals_supr_Above SUB by auto
qed

lemma supr_inField:
assumes "B \ Field r" and "Above B \ {}"
shows "supr B \ Field r"
proof-
  have "supr B \ Above B" using supr_Above assms by simp
  thus ?thesis using assms Above_Field[of r] by auto
qed

lemma supr_above_Above:
assumes SUB: "B \ Field r" and ABOVE: "Above B \ {}"
shows "Above B = above (supr B)"
proof(unfold Above_def above_def, auto)
  fix a assume "a \ Field r" "\b \ B. (b,a) \ r"
  with supr_least assms
  show "(supr B, a) \ r" by auto
next
  fix b assume "(supr B, b) \ r"
  thus "b \ Field r"
  using REFL refl_on_def[of _ r] by auto
next
  fix a b
  assume 1: "(supr B, b) \ r" and 2: "a \ B"
  with assms supr_greater
  have "(a,supr B) \ r" by auto
  thus "(a,b) \ r"
  using 1 TRANS trans_def[of r] by blast
qed

lemma supr_under:
assumes IN"a \ Field r"
shows "a = supr (under a)"
proof-
  have "under a \ Field r"
  using under_Field[of r] by auto
  moreover
  have "under a \ {}"
  using IN Refl_under_in[of r] REFL by auto
  moreover
  have "a \ Above (under a)"
  using in_Above_under[of _ r] IN by auto
  moreover
  have "\a' \ Above (under a). (a,a') \ r"
  proof(unfold Above_def under_def, auto)
    fix a'
    assume "\aa. (aa, a) \ r \ (aa, a') \ r"
    hence "(a,a) \ r \ (a,a') \ r" by blast
    moreover have "(a,a) \ r"
    using REFL IN by (auto simp add: refl_on_def)
    ultimately
    show  "(a, a') \ r" by (rule mp)
  qed
  ultimately show ?thesis
  using equals_supr_Above by auto
qed


subsubsection \<open>Properties of successor\<close>

lemma suc_least:
"\B \ Field r; a \ Field r; (\ b. b \ B \ a \ b \ (b,a) \ r)\
 \<Longrightarrow> (suc B, a) \<in> r"
by(auto simp add: suc_least_AboveS AboveS_def)

lemma equals_suc:
assumes SUB: "B \ Field r" and IN: "a \ Field r" and
 ABVS: "\ b. b \ B \ a \ b \ (b,a) \ r" and
 MINIM: "\ a'. \a' \ Field r; \ b. b \ B \ a' \ b \ (b,a') \ r\ \ (a,a') \ r"
shows "a = suc B"
proof-
  have "a \ AboveS B"
  unfolding AboveS_def using ABVS IN by simp
  moreover
  have "\ a'. a' \ AboveS B \ (a,a') \ r"
  unfolding AboveS_def using MINIM by simp
  ultimately show ?thesis
  using equals_suc_AboveS SUB by auto
qed

lemma suc_above_AboveS:
assumes SUB: "B \ Field r" and
        ABOVE: "AboveS B \ {}"
shows "AboveS B = above (suc B)"
proof(unfold AboveS_def above_def, auto)
  fix a assume "a \ Field r" "\b \ B. a \ b \ (b,a) \ r"
  with suc_least assms
  show "(suc B,a) \ r" by auto
next
  fix b assume "(suc B, b) \ r"
  thus "b \ Field r"
  using REFL refl_on_def[of _ r] by auto
next
  fix a b
  assume 1: "(suc B, b) \ r" and 2: "a \ B"
  with assms suc_greater[of B a]
  have "(a,suc B) \ r" by auto
  thus "(a,b) \ r"
  using 1 TRANS trans_def[of r] by blast
next
  fix a
  assume 1: "(suc B, a) \ r" and 2: "a \ B"
  with assms suc_greater[of B a]
  have "(a,suc B) \ r" by auto
  moreover have "suc B \ Field r"
  using assms suc_inField by simp
  ultimately have "a = suc B"
  using 1 2 SUB ANTISYM antisym_def[of r] by auto
  thus False
  using assms suc_greater[of B a] 2 by auto
qed

lemma suc_singl_pred:
assumes IN"a \ Field r" and ABOVE_NE: "aboveS a \ {}" and
        REL: "(a',suc {a}) \ r" and DIFF: "a' \ suc {a}"
shows "a' = a \ (a',a) \ r"
proof-
  have *: "suc {a} \ Field r \ a' \ Field r"
  using WELL REL well_order_on_domain by metis
  {assume **: "a' \ a"
   hence "(a,a') \ r \ (a',a) \ r"
   using TOTAL IN * by (auto simp add: total_on_def)
   moreover
   {assume "(a,a') \ r"
    with ** * assms WELL suc_least[of "{a}" a']
    have "(suc {a},a') \ r" by auto
    with REL DIFF * ANTISYM antisym_def[of r]
    have False by simp
   }
   ultimately have "(a',a) \ r"
   by blast
  }
  thus ?thesis by blast
qed

lemma under_underS_suc:
assumes IN"a \ Field r" and ABV: "aboveS a \ {}"
shows "underS (suc {a}) = under a"
proof-
  have 1: "AboveS {a} \ {}"
  using ABV aboveS_AboveS_singl[of r] by auto
  have 2: "a \ suc {a} \ (a,suc {a}) \ r"
  using suc_greater[of "{a}" a] IN 1 by auto
  (*   *)
  have "underS (suc {a}) \ under a"
  proof(unfold underS_def under_def, auto)
    fix x assume *: "x \ suc {a}" and **: "(x,suc {a}) \ r"
    with suc_singl_pred[of a x] IN ABV
    have "x = a \ (x,a) \ r" by auto
    with REFL refl_on_def[of _ r] IN
    show "(x,a) \ r" by auto
  qed
  (*  *)
  moreover
  (*   *)
  have "under a \ underS (suc {a})"
  proof(unfold underS_def under_def, auto)
    assume "(suc {a}, a) \ r"
    with 2 ANTISYM antisym_def[of r]
    show False by auto
  next
    fix x assume *: "(x,a) \ r"
    with 2 TRANS trans_def[of r]
    show "(x,suc {a}) \ r" by blast
  (*  blast is often better than auto/auto for transitivity-like properties *)
  qed
  (*  *)
  ultimately show ?thesis by blast
qed


subsubsection \<open>Properties of order filters\<close>

lemma ofilter_Under[simp]:
assumes "A \ Field r"
shows "ofilter(Under A)"
proof(unfold ofilter_def, auto)
  fix x assume "x \ Under A"
  thus "x \ Field r"
  using Under_Field[of r] assms by auto
next
  fix a x
  assume "a \ Under A" and "x \ under a"
  thus "x \ Under A"
  using TRANS under_Under_trans[of r] by auto
qed

lemma ofilter_UnderS[simp]:
assumes "A \ Field r"
shows "ofilter(UnderS A)"
proof(unfold ofilter_def, auto)
  fix x assume "x \ UnderS A"
  thus "x \ Field r"
  using UnderS_Field[of r] assms by auto
next
  fix a x
  assume "a \ UnderS A" and "x \ under a"
  thus "x \ UnderS A"
  using TRANS ANTISYM under_UnderS_trans[of r] by auto
qed

lemma ofilter_Int[simp]: "\ofilter A; ofilter B\ \ ofilter(A Int B)"
unfolding ofilter_def by blast

lemma ofilter_Un[simp]: "\ofilter A; ofilter B\ \ ofilter(A \ B)"
unfolding ofilter_def by blast

lemma ofilter_INTER:
"\I \ {}; \ i. i \ I \ ofilter(A i)\ \ ofilter (\i \ I. A i)"
unfolding ofilter_def by blast

lemma ofilter_Inter:
"\S \ {}; \ A. A \ S \ ofilter A\ \ ofilter (\S)"
unfolding ofilter_def by blast

lemma ofilter_Union:
"(\ A. A \ S \ ofilter A) \ ofilter (\S)"
unfolding ofilter_def by blast

lemma ofilter_under_Union:
"ofilter A \ A = \{under a| a. a \ A}"
using ofilter_under_UNION [of A] by auto


subsubsection \<open>Other properties\<close>

lemma Trans_Under_regressive:
assumes NE: "A \ {}" and SUB: "A \ Field r"
shows "Under(Under A) \ Under A"
proof
  let ?a = "minim A"
  (*  Preliminary facts *)
  have 1: "minim A \ Under A"
  using assms minim_Under by auto
  have 2: "\y \ A. (minim A, y) \ r"
  using assms minim_least by auto
  (* Main proof *)
  fix x assume "x \ Under(Under A)"
  with 1 have 1: "(x,minim A) \ r"
  using Under_def[of r] by auto
  with Field_def have "x \ Field r" by fastforce
  moreover
  {fix y assume *: "y \ A"
   hence "(x,y) \ r"
   using 1 2 TRANS trans_def[of r] by blast
   with Field_def have "(x,y) \ r" by auto
  }
  ultimately
  show "x \ Under A" unfolding Under_def by auto
qed

lemma ofilter_suc_Field:
assumes OF: "ofilter A" and NE: "A \ Field r"
shows "ofilter (A \ {suc A})"
proof-
  (* Preliminary facts *)
  have 1: "A \ Field r" using OF ofilter_def by auto
  hence 2: "AboveS A \ {}"
  using ofilter_AboveS_Field NE OF by blast
  from 1 2 suc_inField
  have 3: "suc A \ Field r" by auto
  (* Main proof *)
  show ?thesis
  proof(unfold ofilter_def, auto simp add: 1 3)
    fix a x
    assume "a \ A" "x \ under a" "x \ A"
    with OF ofilter_def have False by auto
    thus "x = suc A" by simp
  next
    fix x assume *: "x \ under (suc A)" and **: "x \ A"
    hence "x \ Field r" using under_def Field_def by fastforce
    with ** have "x \ AboveS A"
    using ofilter_AboveS_Field[of A] OF by auto
    hence "(suc A,x) \ r"
    using suc_least_AboveS by auto
    moreover
    have "(x,suc A) \ r" using * under_def[of r] by auto
    ultimately show "x = suc A"
    using ANTISYM antisym_def[of r] by auto
  qed
qed

(* FIXME: needed? *)
declare
  minim_in[simp]
  minim_inField[simp]
  minim_least[simp]
  under_ofilter[simp]
  underS_ofilter[simp]
  Field_ofilter[simp]

end

abbreviation "worec \ wo_rel.worec"
abbreviation "adm_wo \ wo_rel.adm_wo"
abbreviation "isMinim \ wo_rel.isMinim"
abbreviation "minim \ wo_rel.minim"
abbreviation "max2 \ wo_rel.max2"
abbreviation "supr \ wo_rel.supr"
abbreviation "suc \ wo_rel.suc"

end

¤ Dauer der Verarbeitung: 0.8 Sekunden  (vorverarbeitet)  ¤





Download des
Quellennavigators
Download des
sprechenden Kalenders

in der Quellcodebibliothek suchen




Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.


Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.


Bot Zugriff