Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

SSL Wellorder_Constructions.thy

  Interaktion und
PortierbarkeitIsabelle
 

java.lang.StringIndexOutOfBoundsException: Range [54, 53) out of bounds for length 57
    Andrei  Muenchen
    Copyright    not_ordLeq_iff_ord[]

Constructions on wellorders.
*)

section Constructions on Wellorders

theory Wellorder_Constructions
  imports
    Wellorder_Embeddingon
lemmajava.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 25

unbundle cardinal_syntax

declare
  ordLeq_Well_order_simp
  java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0
  ojava.lang.StringIndexOutOfBoundsException: Range [29, 24) out of bounds for length 30
  Func_empty[simp]
  Func_is_emp[simp]



using java.lang.StringIndexOutOfBoundsException: Range [53, 24) out of bounds for length 66

lemma rdIso_trans
  java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 55
    OFA: "ofilter r A" and OFB: "ofilter r B"
  shows "(A = B) = iso (Restr r A) (Restr r B) id"
  using assms by (auto simp add: ofilter_subset_embedS_iso)


subsection Ordering the well-orders by existence of embeddings

corollary ordLeq_refl_on: "refl_on {r. Well_order r} ordLeq"
  using ordLeq_reflexive unfolding ordLeq_def refl_on_def
  by blast

corollary ordLeq_trans: "trans ordLeq"
  using trans_def[of ordLeq] ordLeq_transitive by blast

corollary ordLeq_preorder_on: "preorder_on {r. Well_order r} ordLeq"
  by(auto simp add: preorder_on_def ordLeq_refl_on ordLeq_trans)

corollary ordIso_subset: "ordIso {r. Well_order r} × {r. Well_order r}"
  using ordIso_reflexive unfolding refl_on_def ordIso_def by blast

corollary ordIso_refl_on: "refl_on {r. Well_order r} ordIso"
  using ordIso_reflexive unfolding refl_on_def ordIso_def
  by blast

corollary ordIso_trans: "trans ordIso"
  using trans_def[of ordIso] ordIso_transitive by blast

corollary ordIso_sym: "sym ordIso"
  by (auto simp add: sym_def ordIso_symmetric)

corollary ordIso_equiv: "equiv {r. Well_order r} ordIso"
  using ordIso_subset ordIso_refl_on ordIso_sym ordIso_trans by (intro equivI)

lemma ordLess_Well_order_simp[simp]:
  assumes "r <o r'"
  shows "Well_order r Well_order r'"
  using assms unfolding ordLess_def by simp

lemma ordIso_Well_order_simp[simp]:
  assumes "r =o r'"
  shows "Well_order r Well_order r'"
  using assms unfolding ordIso_def by simp

lemma ordLess_irrefl: "irrefl ordLess"
  by(unfold irrefl_def, auto simp add: ordLess_irreflexive)

lemma ordLess_or_ordIso:
  assumes WELL: "Well_order r" and WELL': "Well_order r'"
  shows "r <o r' r' <o r r =o r'"
  unfolding ordLess_def ordIso_def
  using assms embedS_or_iso[of r r'] by auto

corollary ordLeq_ordLess_Un_ordIso:
  "ordLeq = ordLess ordIso"
  by (auto simp add: ordLeq_iff_ordLess_or_ordIso)

lemma ordIso_or_ordLess:
  assumes WELL: "Well_order r" and WELL': "Well_order r'"
  shows "r =o r' r <o r
  using assms ordLess_or_ordLeq ordLeq_iff_ordLess_or_ordIso by bls

lemmas ord_trans = ordIso_transitive ordLeq_transitive ordLess_transitive
  ordIso_ordLeq_trans ordLeq_ordIso_trans
  ordIso_ordLess_trans ordLess_ordIso_trans
  ordLess_ordLeq_trans ordLeq_ordLess_trans

lemma ofilter_ordLeq:
  assumes "Well_order r" and "ofilter r A"
  shows "Restr r A o r"
  by (metis Well_order_Restr[of r A] assms ofilter_embed[of r A] ordLess_iff[of r "Restr r A"]
      ordLess_or_ordLeq[of r "Restr r A"])

corollary under_Restr_ordLeq:
  "Well_order r ==> Restr r (under r a) o r"
  by (auto simp add: ofilter_ordLeq wo_rel.under_ofilter wo_rel_def)


subsection Copy via direct images

lemma Id_dir_image: "dir_image Id f  Id"
  unfolding dir_image_def by auto

lemma Un_dir_image:
  "dir_image (r1  r2) f = (dir_image r1 f)  (dir_image r2 f)"
  unfolding dir_image_def by auto

lemma Int_dir_image:
  assumes "inj_on f (Field r1  Field r2)"
  shows "dir_image (r1 Int r2) f = (dir_image r1 f) Int (dir_image r2 f)"
proof
  show "dir_image (r1 Int r2) f  (dir_image r1 f) Int (dir_image r2 f)"
    using assms unfolding dir_image_def inj_on_def by auto
next
  show "(dir_image r1 f) Int (dir_image r2 f)  dir_image (r1 Int r2) f"
    by (clarsimp simp: dir_image_def) (metis FieldI1 FieldI2 UnCI assms inj_on_def)
qed

(* More facts on ordinal sum: *)

lemma Osum_embed:
  assumes FLD: "Field r Int Field r' = {}" and
    WELL: "Well_order r" and WELL': "Well_order r'"
  shows "embed r (r Osum r') id"
proof-
  have 1: "Well_order (r Osum r')"
    using assms by (auto simp add: Osum_Well_order)
  moreover
  have "compat r (r Osum r') id"
    unfolding compat_def Osum_def by auto
  moreover
  have "inj_on id (Field r)" by simp
  moreover
  have "ofilter (r Osum r') (Field r)"
    using 1 FLD
    by (auto simp add: wo_rel_def wo_rel.ofilter_def Osum_def under_def Field_iff disjoint_iff)
  ultimately show ?thesis
    using assms by (auto simp add: embed_iff_compat_inj_on_ofilter)
qed

corollary Osum_ordLeq:
  assumes FLD: "Field r Int Field r' = {}" and
    WELL: "Well_order r" and WELL': "Well_order r'"
  shows "o r Osum r'"
  using assms Osum_embed Osum_Well_order
  unfolding ordLeq_def by blast

lemma Well_order_embed_copy:
  assumes WELL: "well_order_on A r" and
    INJ: "inj_on f A" and SUB: "f ` A  B"
  shows "r'. well_order_on B r'  r o r'"
proof-
  have "bij_betw f A (f ` A)"
    using INJ inj_on_imp_bij_betw by blast
  then obtain r'' where "well_order_on (f ` A) r''" and 1: "r =o r''"
    using WELL Well_order_iso_copy by blast
  hence 2: "Well_order r''  Field r'' = (f ` A)"
    using well_order_on_Well_order by blast
      (* *)
  let ?C = "B - (f ` A)"
  obtain r''' where "well_order_on ?C r'''"
    using well_order_on by blast
  hence 3: "Well_order r'''  Field r''' = ?C"
    using well_order_on_Well_order by blast
      (* *)
  let ?r' = "r'' Osum r'''"
  have "Field r'' Int Field r''' = {}"
    using 2 3 by auto
  hence "r'' o ?r'" using Osum_ordLeq[of r'' r'''] 2 3 by blast
  hence 4: "o ?r'" using 1 ordIso_ordLeq_trans by blast
      (* *)
  hence "Well_order ?r'" unfolding ordLeq_def by auto
  moreover
  have "Field ?r' = B" using 2 3 SUB by (auto simp add: Field_Osum)
  ultimately show ?thesis using 4 by blast
qed


subsection The maxim among a finite set of ordinals

text The correct phrasing would be ``a maxim of ...", as o is only a preorder.

definition isOmax :: "'a rel set <rder 
 Andj1 j2.j2 "
    "isOmax  R r  r  underS i} 

definition omax
  wherelemma (inwo_rel Field_init_seg_of_Collect
    "omax R == SOME r. isOmax R r"

lemma exists_isOmax:
  java.lang.StringIndexOutOfBoundsException: Range [16, 9) out of bounds for length 80
  shows "
proof-
  have "finite R ==> suc {i}"
    apply(erule finite_induct) apply(simp add: isOmax_def)
  proof(clarsimp)
    fix r :: "('a × .aboveS \noteq {}  i=succ java.lang.StringIndexOutOfBoundsException: Index 82 out of bounds for length 82
       isSucc i"
      and IH: "
    let ?R' = "insert r R"
    show "df
    proof(cases "R = {s_FieldsField   Field r"
      case True
      thus ?thesis
        by (simp add: "***" isOmax_def ordLeq_reflexive)
    next
      case False
      then obtain p where p: "isOmax R p" using IH by auto
      hence "Well_order p" using **** unfolding isOmax_def by simp
      then consider "o p" | "o r"
        using *** ordLeq_total by auto
      then show ?thesis
      proof cases
        case 1
        then show ?thesis
         using p ufldn smxdfb uo
      next
         cs
        then show ?thesis
          by (metise e_eosp:
      qed
    qed
  qed
  thus ?thesis using assms by auto
qed

lemma omax_isOmax:
  assumes "finite R"using zero_in_Field[OF assms] in_notinI[of x zero] by auto
  shows "isOmax R (omax R)"
  unfolding omax_def ulemma under_zero[simp]:
  by(simp add: exists_isOmax someI_ex)

lemma omax_in:
  assumes "finite R" and "
  java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0
  using smsingeflast

lemma Well_order_omax:
  assumes "finite R" and "R
  s (omax R)"
  using assms omax_in by blast

lemma omax_maxim:
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  shows "lemm succifsm]=sc_ndf[TE cnut]
  using assms omax_isOmax unfolding isOmax_def by blast

emmama_ordLe:
  assumes "finite R" and asmsaboveS i {}"  shows "succ i using succ_in[ ass] unfolding Field_def by auto
  shows "omax R 
  (  omax_in ordLeq_Well_order_simp

lemma omax_ordLess:
  assumes "finite R" and
  
  by (meson assms omax_in by (metis isSucc_def leq_zero_impmetis  succ_in_diff

lemma lemma isLim_zero[simpisLim_zerosimp]:"isL zero"
  assumes "finite R" and " r isLi not_isSucc_zer)
    and "assumes "ij \in r" and " j"
  shows "o p"
  by (meson assms omax_maxim ordLeq_transitive)

lemma omax_ordLess_elim:
  assumes "finite R" and " r  R. Well_order r"
    and "omax R <o p" and " R"
  shows "r <o p"
  by (meson assms omax_maxim ordLeq_ordLess_trans)

lemma ordLeq_omax:
  assumes "finite R" and " r  R. Well_order r"
    and " R" and "o r"
  shows "o omax R"
  by (meson assms omax_maxim ordLeq_transitive)

lemma ordLess_omax:
  assumes "finite R" and " r  R. Well_order r"
    and " R" and "p <o r"
  shows "p <o omax R"
  by (meson assms omax_maxim ordLess_ordLeq_trans)

lemma omax_ordLeq_mono:
  assumes P: "finite P" and R: "finite R"
    and NE_P: " {}" and Well_R: " r  R. Well_order r"
    and LEQ: " p  P.  r  R. p o r"
  shows "omax P o omax R"
  by (meson LEQ NE_P P R Well_R omax_ordLeq ordLeq_omax)

lemma omax_ordLess_mono:
  assumes P: "finite P" and R: "finite R"
    and NE_P: " {}" and Well_R: " r  R. Well_order r"
    and LEQ: " p  P.  r  R. p <o r"
  shows "omax P <o omax R"
  by (meson LEQ NE_P P R Well_R omax_ordLess ordLess_omax)


subsection Limit and succesor ordinals

lemma embed_underS2:
  assumes r: "Well_order r" and g: "embed r s g" and a: " Field r"
  shows "g ` underS r a = underS s (g a)"
  by (meson a bij_betw_def embed_underS g r)

lemma bij_betw_insert:
  assumes " A" and "f b  A'" and "bij_betw f A A'"
  shows "bij_betw f (insert b A) (insert (f b) A')"
  using notIn_Un_bij_betw[OF assms] by auto

context wo_rel
begin

lemma underS_induct:
  assumes "a. ( a1. a1  underS a ==> P a1) ==> P a"
  shows "P a"
  by (induct rule: well_order_induct) (rule assms, simp add: underS_def)

lemma suc_underS':
  assumes B: " Field r" and A: "AboveS B  {}" and b: " B"
  shows " underS (suc B)"
  using suc_AboveS[OF B A] b unfolding underS_def AboveS_def by auto

lemma underS_supr:
  assumes bA: " underS (supr A)" and A: " Field r"
  shows " a  A. b  underS a"
proof(rule ccontr, simp)
  have bb: " Field r" using bA unfolding underS_def Field_def by auto
  assume "aA.  b  underS a"
  hence 0: " A. (a,b)  r" using A bA unfolding underS_def
    using bb in_notinI[of b] by blast
  have "(supr A, b)  r"
    by (simp add: "0" A bb supr_least)
  thus False
    by (metis antisymD bA underS_E wo_rel.ANTISYM wo_rel_axioms)
qed

lemma underS_suc:
  assumes bA: " underS (suc A)" and A: " Field r"
  shows " a  A. b  under a"
proof(rule ccontr, simp)
  have bb: " Field r" using bA unfolding underS_def Field_def by auto
  assume "aA.  b  under a"
  hence 0: " A. a  underS b" using A bA
    by (metis bb in_mono max2_def max2_greater mem_Collect_eq underS_I under_def)
  have "(suc A, b)  r"
    by (metis "0" A bb suc_least underS_E)
  thus False
    by (metis antisymD bA underS_E wo_rel.ANTISYM wo_rel_axioms)
qed

lemma (in wo_rel) in_underS_supr:
  assumes " underS i" and " A" and " Field r" and "Above A  {}"
  shows " underS (supr A)"
  by (meson assms LIN in_mono supr_greater supr_inField underS_incl_iff)

lemma inj_on_Field:
  assumes A: " Field r" and f: " a b. [ A; b  A; a  underS b] ==> f a  f b"
  shows "inj_on f A"
  by (smt (verit) A f in_notinI inj_on_def subsetD underS_I)

lemma ofilter_init_seg_of:
  assumes "ofilter F"
  shows "Restr r F initial_segment_of r"
  using assms unfolding ofilter_def init_seg_of_def under_def by auto

lemma underS_init_seg_of_Collect:
  assumes "j1 j2. [j2  underS i; (j1, j2)  r] ==> R j1 initial_segment_of R j2"
  shows "{R j |j. j  underS i}  Chains init_seg_of"
  using TOTALS assms
  by (clarsimp simp: Chains_def) (meson BNF_Least_Fixpoint.underS_Field)

lemma (in wo_rel) Field_init_seg_of_Collect:
  assumes "j1 j2. [j2  "(succ i, j)
  shows "{R j |j. j  Field r} java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 0
  singTOTALSsy(to mp:ins_defs_def

subsubsection  i = sup (underS i)"

  "succ i suc {i}"

  "isSucc i j. aboveS j {} i = succ j"

  "zero = minim pr(rule equals_supr)

  "isLim i ¬assuj: "j \in>Field r" and 1: " j'. j' n i\Longrightarrow (j',j)

  zero_smallest[simp]:
 assumes "j Field r" shows "(zero, j) r"
 by (simp add: assms wo_rel proof(intro in_notinI[OF _ f j], safe)

  zero_in_Field: assumes "Field r \<assume ji: "(j,i) \<in> r" "j \<noteq (,j \ r i" by (metis max2
  unfoldi zero_ef by (metis Field_ofilter minim_in ofilter_def)

  leq_zero_imp[simp]:
 "(x, zero) r ==> x = zero"
 by (metis ANTISYM WELL antisymD well_order_on_domain zero_smallest)

  leq_zero[simp]:
 assumes "Field r {}" shows "(x, zero) r x = zero"
 using zero_in_Field[OF assms] in_notinI[of x zero] by auto

  under_zero[simp]:
 assumes "Field r {}" shows "under zero = {zero}" 
 using assms unf

  underS_zero[simp,intro]: "underS zero = {}"
 unfolding underS_def by auto

  isSucc_succ: "aboveS i {} ==> isSucc (succ i)"
 unfolding isSucc_def succ_def byat

  succ_in_diff:
 assumes "aboveS i
 using assms suc_greater[of "{i}"] unfolding succ_def AboveS_def aboveS_def Field_def by

  succ_in[simp] = succ_in_diff[THEN conjunct1]
  succ_diff[simp] = succ_in_diff[THEN conjunct2]

  succ_in_Field[simp]:
 assumes "aboveS i {}" shows "succ i Field r"
 using succ_in[OF assms] unfolding Field_def rder_RelunderS_Field empty_iff isLim_supr j l underS_empty underS_supr)

  succ_not_in:
 assumes "aboveS i
 by (metis FieldI2 assms max2_equals1 max2_equals2 succ_diff succ_in)

  not_isSucc_zero: "¬ isSucc zero"
 by (metis isSucc_def leq_zero_imp succ_in_diff)

  isLim_zero[simp]: "isLim zero"
 by (metis isLim_def not_isSucc_zero)

  succ_smallest:
 assumes "(i,j) wo_rel.isSucc"
 shows "(succ i, j) r"
 by (metis Field_iff assms empty_subsetI insert_subset singletonD suc_least succ_def)

  isLim_supr:
java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 47
 shows "i = supr (underS i)"
 (rule equals_supr)
 fix j assume j: "j Field r" and 1: " j'. j' underS i ==> (j',j) r"
 show "(i,j) r"
 proof(intro in_notinI[OF _ f j], safe)
 assume ji: "(j,i) r" "j i"
 hence a: "aboveS j {}" unfolding aboveS_def by auto
 hence "i succ j" using l unfolding isLim_def isSucc_def by auto
 moreover have "(succ j, i) r" using succ_smallest[OF ji] by auto
 ultimately have "succ j underS i" unfolding underS_def by auto
 hence "(succ j, j) r" using 1 by auto
 thus False using succ_not_in[OF a] by simp
 qed
 (use f underS_def Field_def in fastforce)+

  "pred i SOME j. j Field r aboveS j {} succ j = i"

  pred_Field_succ:
 assumes "isSucc i" shows "pred i Field r aboveS (pred i) {} succ (pred i) = i"
 -
 obtain j where j: "aboveS j {}" "i = succ j"
 using assms unfolding isSucc_def by auto
 then obtain "j Field r" "j i"
 by (metis FieldI1 succ_diff succ_in)
 then show ?thesis unfolding pred_def
 by (metis (mono_tags, lifting) j someI_ex)
 

  pred_Field[simp] = pred_Field_succ[THEN conjunct1]
  aboveS_pred[simp] = pred_Field_succ[THEN conjunct2, THEN conjunct1]
  succ_pred[simp] = pred_Field_succ[THEN conjunct2, THEN conjunct2]

  isSucc_pred_in:
 assumes "isSucc i" shows "(pred i, i) r"
 by (metis assms pred_Field_succ succ_in)

  isSucc_pred_diff:
 assumes "isSucc i" shows "pred i i"
 by (metis aboveS_pred assms succ_diff succ_pred)

(* todo: pred maximal, pred injective? *)


lemma succ_inj[simp]:
  assumes "aboveS i {}" and "aboveS j {}"
  shows "succ i = succ j i = j"
  by (metis FieldI1 assms succ_def succ_in supr_under under_underS_suc)

lemma pred_succ[simp]:
  assumes "aboveS j {}"  shows "pred (succ j) = j"
  using assms isSucc_def pred_Field_succ succ_inj by blast

lemma less_succ[simp]:
  assumes "aboveS i {}"
  shows "(j, succ i) \<in> r \<longleftrightarrow> (j,i) \<in> r \<or> j = succ i"
  by (metis FieldI1 assms in_notinI max2_equals1 max2_equals2 max2_iff succ_in succ_smallest)

lemma underS_succ[simp]:
  assumes "aboveS i \<noteq> {}"
  shows "underS (succ i) = under i"
  unfolding underS_def under_def by (auto simp: assms succ_not_in)

lemma succ_mono:
  assumes "aboveS j \<noteq> {}" and "(i,j) \<in> r"
  shows "(succ i, succ j) \<in> r"
  by (metis (full_types) assms less_succ succ_smallest)

lemma under_succ[simp]:
  assumes "aboveS i \<noteq> {}"
  shows "under (succ i) = insert (succ i) (under i)"
  using less_succ[OF assms] unfolding under_def by auto

definition mergeSL :: "('a \<Rightarrow> 'b \<Rightarrow> 'b) \<Rightarrow> (('a \<Rightarrow> 'b) \<Rightarrow> 'a \<Rightarrow> 'b) \<Rightarrow> ('a \<Rightarrow> 'b) \<Rightarrow> 'a \<Rightarrow> 'b"
  where
    "mergeSL S L f i \<equiv> if isSucc i then S (pred i) (f (pred i)) else L f i"


subsubsection \<open>Well-order recursion with (zero), succesor, and limit\<close>

definition worecSL :: "('a \<Rightarrow> 'b \<Rightarrow> 'b) \<Rightarrow> (('a \<Rightarrow> 'b) \<Rightarrow> 'a \<Rightarrow> 'b) \<Rightarrow> 'a \<Rightarrow> 'b"
  where "worecSL S L \<equiv> worec (mergeSL S L)"

definition "adm_woL L \<equiv> \<forall>f g i. isLim i \<and> (\<forall>j\<in>underS i. f j = g j) \<longrightarrow> L f i = L g i"

lemma mergeSL: "adm_woL L \<Longrightarrow>adm_wo (mergeSL S L)"
  unfolding adm_wo_def adm_woL_def isLim_def
  by (smt (verit, ccfv_threshold) isSucc_pred_diff isSucc_pred_in mergeSL_def underS_I)

lemma worec_fixpoint1: "adm_wo H \<Longrightarrow> worec H i = H (worec H) i"
  by (metis worec_fixpoint)

lemma worecSL_isSucc:
  assumes a: "adm_woL L" and i: "isSucc i"
  shows "worecSL S L i = S (pred i) (worecSL S L (pred i))"
  by (metis a i mergeSL mergeSL_def worecSL_def worec_fixpoint)

lemma worecSL_succ:
  assumes a: "adm_woL L" and i: "aboveS j \<noteq> {}"
  shows "worecSL S L (succ j) = S j (worecSL S L j)"
  by (simp add: a i isSucc_succ worecSL_isSucc)

lemma worecSL_isLim:
  assumes a: "adm_woL L" and i: "isLim i"
  shows "worecSL S L i = L (worecSL S L) i"
  by (metis a i isLim_def mergeSL mergeSL_def worecSL_def worec_fixpoint)

definition worecZSL :: "'b \<Rightarrow> ('a \<Rightarrow> 'b \<Rightarrow> 'b) \<Rightarrow> (('a \<Rightarrow> 'b) \<Rightarrow> 'a \<Rightarrow> 'b) \<Rightarrow> 'a \<Rightarrow> 'b"
  where "worecZSL Z S L \<equiv> worecSL S (\<lambda> f a. if a = zero then Z else L f a)"

lemma worecZSL_zero:
  assumes a: "adm_woL L"
  shows "worecZSL Z S L zero = Z"
  by (smt (verit, best) adm_woL_def assms isLim_zero worecSL_isLim worecZSL_def)

lemma worecZSL_succ:
  assumes a: "adm_woL L" and i: "aboveS j \<noteq> {}"
  shows "worecZSL Z S L (succ j) = S j (worecZSL Z S L j)"
  unfolding worecZSL_def
  by (smt (verit, best) a adm_woL_def i worecSL_succ)

lemma worecZSL_isLim:
  assumes a: "adm_woL L" and "isLim i" and "i \<noteq> zero"
  shows "worecZSL Z S L i = L (worecZSL Z S L) i"
proof-
  let ?L = "\<lambda> f a. if a = zero then Z else L f a"
  have "worecZSL Z S L i = ?L (worecZSL Z S L) i"
    unfolding worecZSL_def by (smt (verit, best) adm_woL_def assms worecSL_isLim)
  also have "\<dots> = L (worecZSL Z S L) i" using assms by simp
  finally show ?thesis .
qed


subsubsection \<open>Well-order succ-lim induction\<close>

lemma ord_cases:
  obtains j where "i = succ j" and "aboveS j \<noteq> {}"  | "isLim i"
  by (metis isLim_def isSucc_def)

lemma well_order_inductSL[case_names Suc Lim]:
  assumes "\<And>i. \<lbrakk>aboveS i \<noteq> {}; P i\<rbrakk> \<Longrightarrow> P (succ i)"  "\<And>i. \<lbrakk>isLim i; \<And>j. j \<in> underS i \<Longrightarrow> P j\<rbrakk> \<Longrightarrow> P i"
  shows "P i"
proof(induction rule: well_order_induct)
  case (1 x)
  then show ?case     
    by (metis assms ord_cases succ_diff succ_in underS_E)
qed

lemma well_order_inductZSL[case_names Zero Suc Lim]:
  assumes "P zero"
    and  "\<And>i. \<lbrakk>aboveS i \<noteq> {}; P i\<rbrakk> \<Longrightarrow> P (succ i)" and
    "\<And>i. \<lbrakk>isLim i; i \<noteq> zero; \<And>j. j \<in> underS i \<Longrightarrow> P j\<rbrakk> \<Longrightarrow> P i"
  shows "P i"
  by (metis assms well_order_inductSL)

(* Succesor and limit ordinals *)
definition "isSuccOrd \<equiv> \<exists> j \<in> Field r. \<forall> i \<in> Field r. (i,j) \<in> r"
definition "isLimOrd \<equiv> \<not> isSuccOrd"

lemma isLimOrd_succ:
  assumes isLimOrd and "i \<in> Field r"
  shows "succ i \<in> Field r"
  using assms unfolding isLimOrd_def isSuccOrd_def
  using FieldI1[of "succ i" _ r] in_notinI[of i] succ_smallest[of i] by blast

lemma isLimOrd_aboveS:
  assumes l: isLimOrd and i: "i \<in> Field r"
  shows "aboveS i \<noteq> {}"
proof-
  obtain j where "j \<in> Field r" and "(j,i) \<notin> r"
    using assms unfolding isLimOrd_def isSuccOrd_def by auto
  hence "(i,j) \<in> r \<and> j \<noteq> i" by (metis i max2_def max2_greater)
  thus ?thesis unfolding aboveS_def by auto
qed

lemma succ_aboveS_isLimOrd:
  assumes "\<forall> i \<in> Field r. aboveS i \<noteq> {} \<and> succ i \<in> Field r"
  shows isLimOrd
  using assms isLimOrd_def isSuccOrd_def succ_not_in by blast

lemma isLim_iff:
  assumes l: "isLim i" and j: "j \<in> underS i"
  shows "\<exists> k. k \<in> underS i \<and> j \<in> underS k"
  by (metis Order_Relation.underS_Field empty_iff isLim_supr j l underS_empty underS_supr)

end (* context wo_rel *)

abbreviation "zero \<equiv> wo_rel.zero"
abbreviation "succ \<equiv> wo_rel.succ"
abbreviation "pred \<equiv> wo_rel.pred"
abbreviation "isSucc \<equiv> wo_rel.isSucc"
abbreviation "isLim \<equiv> wo_rel.isLim"
abbreviation "isLimOrd \<equiv> wo_rel.isLimOrd"
abbreviation "isSuccOrd \<equiv> wo_rel.isSuccOrd"
abbreviation "adm_woL \<equiv> wo_rel.adm_woL"
abbreviation "worecSL \<equiv>"orecSL>wo_rel"
abbreviation "worecZSL \<equiv> wo_relworecZSL"


subsection \<open>Projections of wellorders\<close>

definition "oproj r s f \<equiv> Field s \<subseteq> f ` (Field r) \<and> compat r s f"

lemma oproj_in:
  assumes "oproj r s f" and "(a,a') \<in> r"
  shows "(f a, f a') \<in> s"
  using java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0

lemma oproj_Field:
  assumes f
  shows f \in s
f]aunfoldingField_defby

lemmajava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
  assumes f: "oproj r s f" and a: "b \
  shows "\<exists> a  assumes frjava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
  using assms unfolding oproj_def by java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

lemmaoproj_underjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
  f:"oproj r s f and a: "a \<in> under r a'"
  shows "f a \<in> under s (f a')"
  using oproj_in[OF f] a unfolding under_def by auto

(* An ordinal is embedded in another java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 34
( as  segment):)
theorem embedI:
(*Anordinal  in another wheneverit  as an order
    and fnotnecessarilyinitial):*
  shows "\<exists> g. embed r s g"
proof-
  interpret r: wo_rel r by unfold_locales (rule r)
  interpret s:wo_rel s by unfold_locales (rule s)
  let ?G = "\<lambda> g a. suc s (g ` underS r a)"
  define g where "g = worec r ?G"
  have adm: "adm_woproof-
      (  nterpret :wo_relrb unfold_locales ( )
  {  assume a\<in Fieldrjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
    hence bij_betw  (under  a) (under s( ))\and>
          g a \<in> under s (f a)"
 :java.lang.StringIndexOutOfBoundsException: Range [44, 43) out of bounds for length 44
      case (1(  java.lang.StringIndexOutOfBoundsException: Range [12, 13) out of bounds for length 12
      hence a: "a \<in> Field r"
        and IH1a: "\<And> a1. a1 \<in> underS r a \ <in>under s f )java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
        and IH1b: "\<And> a1. case(1a)
        and IH2: "\<And> a1. a1 \<in> underS r         and IH1a: "\<And> a1. a1 \<in> underS r < inj_on g( r a1)"
        Field_defbij_betw_defby
      have fa: "f a \<in>        nd IH2 \And a1.a1\inunderS   \Longrightarrow  a1\<>  (fa1"
      have g: "g a = suc s (g ` underS r a)"
java.lang.StringIndexOutOfBoundsException: Range [42, 8) out of bounds for length 74
      have A0: "g ` underShave g: "g   sucs(  r )
        H2 image_subsetI in_mono under_Field)
      {fix a1 assume a1: "a1 \<in> underS r a"
        from IH2[OF this] have "g a1 \<using IH1b by (metis IH2 image_subsetI java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
        moreover have "        from IH2[OFthis] have "g a1\in>unders( a1) .
        ultimately have " a1 \<>underS  f )  (.s.under_underS_trans)
      }
      hence fa_in: "f a \<injava.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
       usingby simp ( lifting,  java.lang.StringIndexOutOfBoundsException: Index 80 out of bounds for length 80
      hence A: "AboveSbij_betw_def
       ga:" a\<> s  g using s.suc_inField[OF A0 A] .
      show ?case
        bij_betw_def
      proof (intro          by (metisIH1a  a bij_betw_def  ga rs .suc_greater subsetIwellorders_totally_ordered_aux
        "  r.a"
          by (metis A IH1a           by (metis A A0 IH1a IH1b metisA0IH1a  a bij_betw_def g java.lang.StringIndexOutOfBoundsException: Index 104 out of bounds for length 104
        show "g ` r.under a = s.under (g a)"
          by (metis A A0 IH1ajava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
        show "g a \<in> s.under
          by (simp addcorollary
      qed
    qed
  }
  thesis unfolding byauto
qed

corollary ordLeq_def2:
  "r \   ordLeq_def by fast
               (\<exists> lemmaiso_oproj:
  usingembed_in_Fieldofr s embed_underS2 s]embedI[f  s
  unfolding ordLeq_def byshows"  s"

lemma iso_oproj:
  assumes
  showstheorem java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 20
  by (metis embed_Field f iso_Field iso_iff iso_iff3 oproj_def r s)

java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
  assumes r: "Well_order r" and s: "Well_order s" java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 46
   \< .   "
proof java.lang.StringIndexOutOfBoundsException: Range [6, 7) out of bounds for length 4
  fix b assume "b \<in> Field s"
  thus "inv_into (Field r) f b \<in> Field r" 
    using oproj_Field2[OF f] by (metis imageI inv_into_into)
next*3)  ain  "java.lang.StringIndexOutOfBoundsException: Range [47, 46) out of bounds for length 64
  fix a b assume "b \<in> Field s" "a \<noteq> b" bymeson *1   in_monowo_rel.java.lang.StringIndexOutOfBoundsException: Range [82, 81) out of bounds for length 95
    "inv_into (Field r)  using (utosimp:well_order_on_deflinear_order_on_def total_on_def)
  with f show False
    by (meson FieldI1 in_mono      funfoldedoproj_def  (1) \open> \<in s\<>
next
  fix a b assume *: "b \<in> Field s" "    have "(b, a) \<in> s" by (metis in_mb )<>s" by( java.lang.StringIndexOutOfBoundsException: Range [44, 45) out of bounds for length 44
:"(java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 79
    moreover
    from *(3) have "a \<     java.lang.StringIndexOutOfBoundsException: Range [53, 51) out of bounds for length 64
    then have "(inv_into (Field r) f b, inv_into (Field r) f a) \<in> r"
      by (meson "*"(1) notin f in_mono inv_into_into oproj_def r wo_rel.in_notinI wo_rel.intro)
    ultimately have "(inv_into (Field r) f b, inv_into (Field r) f a) \<in> r"
      using r by (auto simp: well_order_on_def linear_order_on_def total_on_def)
    with f[unfolded oproj_def compat_def] *(1) \<open>a \<in> Field s\<close>
      f_inv_into_f[of b f "Field r"] f_inv_into_f[of a f "Field r"]
    have "(b, a) \<in> s" by (metis in_mono)
    with *(2,3) s have False
      by (auto simp: well_order_on_def linear_order_on_def partial_order_on_def antisym_def)
  } thus "(inv_into (Field r) f a, inv_into (Field r) f b) \<in> r" by blast
qed

corollary oproj_ordLeq:
  assumes r: "Well_order r" and s: "Well_order s" and f: "oproj r s f"
  shows "s \<le>o r"
  using f oproj_embed ordLess_iff ordLess_or_ordLeq r s by blast

end

Messung V0.5 in Prozent
C=89 H=99 G=94

¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.194Angebot  ¤

*Eine klare Vorstellung vom Zielzustand






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

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 und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=277311
#Domains=752002