Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/Isabelle/Archive-of-Formal-Proofs/thys/LambdaMu/   (Cephes Mathematical Library ©)  Datei vom 29.4.2026 mit Größe 1 kB image not shown  

Quellcode-Bibliothek LFP.thy

  Sprache: Isabelle
 

(*  Title:       LFP
    Authors:     Jasmin Blanchette, Andrei Popescu, Dmitriy Traytel
    Maintainer:  Dmitriy Traytel <traytel at inf.ethz.ch>
*)


section Least Fixpoint (a.k.a. Datatype)

(*<*)
theory LFP
  imports "HOL-Library.BNF_Axiomatization"
begin
(*>*)

unbundle cardinal_syntax

ML open Ctr_Sugar_Util
notation BNF_Def.convol (<_ , _>)

text 
 begin{tabular}{rcl}
 'b1 &=& ('a, 'b1, 'b2) F1\\
 'b2 &=& ('a, 'b1, 'b2) F2
 end{tabular}

  build a witness scenario, let us assume

 begin{tabular}{rcl}
 ('a, 'b1, 'b2) F1 &=& 'a * 'b1 + 'a * 'b2\\
 ('a, 'b1, 'b2) F2 &=& unit + 'b1 * 'b2
 end{tabular}
 


declare [[bnf_internals]]
bnf_axiomatization (F1set1: 'a, F1set2: 'b1, F1set3 'b2
  [witsapply ssumption
  for
bnf_axiomatization
  [witsalg_F2set🚫
  for map: F2map rel: F2rel


abbreviation F1in :: "'a1 set ==>dtac @{context} @{thm iffD1[OF alg_def]} 1)
  "  2<> x F1set1> A1  A2  A3}"
abbreviation F2in :: "'a1 set ==> 'a2 set(rule
  ruleOF)

lemma(leonjI
  applyapplyassumption
   apply (rule
  unfolding alg_not_empty
  applyle
  done

lemmas F1in_mono23

lemma F1map_congL <open@ntext)
  F1map id f g x = x"
  apply rule trns)
   apply (rule F1.map_cong0)
     apply (rule refl)
    apply(ule as
     apply (erule bspec)
     apply assumption
    apply (rule sym)
    (uleid__apply)
   apply (rule trans)
    apply (erule bspec)
    
   apply (rule sy rlesustemptyI
   apply (rule id_apply)
  pply rl 1.api)
  done

lemma F2ma
  apply (actic \<hyp_subst_tac FIRST' (map (fn thm => rtac @{context} thm THEN' assume_tac @{context}) @{thms alg_F1set alg_F2set}) 1)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  unfolding o_id
  apply (rule refl)
  done

lemmas F2in_mono23 = F2.in_mono[OF subset_refl]

lemma F2map_congL: "[ ==>
  F2map id f g x = x"
  apply (rule trans) mor where
   apply (rule F2.map_cong0)
     apply (rule refl)
    apply (rule trans)
     apply (erule bspec)
     apply assumption
    apply (rule sym)
    apply (rule id_apply)
   pply (re tans)
    apply (erule bspec)
    apply assumption
   apply (rule sym)
   apply (rule id_apply)
  apply (rule F2.map_id)
  done


subsection g z)z)))"

definition alg where
  "alg
    <forall>x<> F1in (UNIV :: 'a set) B1 B2. s1 x \<in> B1) \<and> (\<forall>y \<in> F2in (UNIV:at B12y<> B2))"

lemmadone
  apply (tactic \<open>dtac @{context} @{thm iffD1[OF alg_def]} 1\<close>)
  apply (erule conjE)+
  apply (erule bspec)
  apply (rule CollectI)
  apply (rule conjI[OF subset_UNIV])
  applyrule onjI)
  apply assumption
  done

lemmaeruleesubst_memt_memOF id_apply
  plyactic<open>dtac@{ontext@thm ffD1D1Flg_defef \<se
  pply (eruleconjEnjEjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
  (rulespec
  apply (rule CollectI)
  apply (rule conjI[OF subset_UNIV])
  apply (erule conjI)
  apply assumption
  done

lemma alg_not_empty:
  "alg B1 B2 s1 s2 \<Longrightarrowmor_comp_ompjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
  apply (rule conjI)
   apply (rule notI)
   apply (tactic \<open>hyp_subst_tac @{context} 1\<close>)
   apply (frule alg_F1set)

(* ORELSE of the following three possibilities *)

     apply ((ule
     apply

    apply (rulerule
    apply (drulerule

(**)
    (erulepec
    apply (tacticssumption

     apply (rulerulemem)
     apply (erule F1.(rule

    apply (rule
    apply ( F1t2
    apply (erule( Ijava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
    (**)

   apply (eruleleEonjE

  apply (rule notI)
  apply (tactic hyp_subst_tac @{context} 1)
  apply (drule alg_F2set)

    apply (rule subsetI)
    apply (rule FalseE)
    apply (erule F1.wit1 F1.wit2 F2.wit)

   apply (rule subset_emptyI)
   apply (erule F1.wit1 F1.wit2 F2.wit)

  apply (erule emptyE)
  done


subsection 

  r whre
 "mor B1 B2 s1 s2 rul ord_d_eqle_tanss)
 (((\<apply 
 ((z F1in (UNIV :: 'a set) B1 B2. f (s1 z) = s1' (F1map id f g z))
 (z F2in (UNIV :: 'a set) B1 B2. g (s2 z) = s2' (F2map id f g z))))"

  morE1: "[mor B1 B2 s1 s2 B1' B2' s1' s2' f g; z F1in UNIV B1 B2]
 ==> f (s1 z) = s1' (F1map id f g"
 apply (tact >
 apply (erule conjE)+
 apply (erule bspebegin{tabula}rcl}
 apply a'b2&& ('1, 'b22
 ne

 mor B1 B2 s1 s2 B1' B2' s1s' g; z <>F2in 'b1 \<ghtarrowarrowx subseteq> A3}"
 ==> g (s2 z) = s2' (F2map id f g z)"
 apply (tactic D1[OF mor_def]} 1\<close)
 apply (erule conjE)+
 apply (erule bspec)
 apply as
 done

  mor_incl: "[B1 B1'; B2 B2'] ==>
 apply app(rul 1ap_comp
 applyly (uecnjI)

 apply (rule conjI)
 apply (rule ballI)
 F1map i f g x =
 apply (y(eessubst_me[OF id_appyy])

 apply (rule ballI)
 apply (erule subsetD)
 apply (erule ssubst_mem[OF id_apply])

 apply (rule rule trras)
 y blI)
 apply (rule tans
 (rule 1.map__i
 apply (tactic a ==>
 apply (rule refl)

 pply y(rlballI)
 apply (asumptionjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
 apply (rule id_apply)
 apply (tactic stac @{context} @{thm F2.map_id} 1)
 apply (rule refl)
 done

  mor_comp:
 "[mor B1 B2 s1 s2 B1' B2' s1' s2' f g;
 mor B1' B2' s1' s2' B1'' B2'' s1'' s2'' f' g']
 mor B1 B2 s1 s2 B1'' B2'' s1'' s2'' (f' o f) (g' o g)"
 apply (tactic )
 apply (tactc\open @{context} (@{thm mor_def} RS iffD1) 1

  cnj[ substI])
 done
 apply rulle conjI)

 apply (rule conjI)
 apply (rule ballI)
 apply (rule ssubst_mem[OF o_apply])
 apply (erule bspec)
 apply (erule bspec)
 apply assumption

 plyy (rule balI)
 (rule [OF subet_UNIV])
 erule
 alg_not_empty:
 apply assumption

 apply rule conjI)
 apply apply (tactc \openhyp_subst_tac @{context} 1
)
 apply (rule trans[OF o_apply])
 apply (rule trans)
 apply (
 apply (drule bspec[rotated])
 apply assumpti
 apply erule arg_cong)
 apply (e (e CollectE conjE)+
 apply (e(erule bspec)
 apply (rule CollectI)
 apply (rua
 apply (rule su)
 apply (rule conjI)
 apply (rule ord_eq_le_trans)
 apply (rule F1.set_map(2))
 apply (rule image_subsetI)
 apply (erule bspec)
 apply (erule subsetD)
 apply assumption
 apply pply ( (rule subset_emptyI
 F1.set_map(3))
 apply (rapply rule subse)
 apply (erule bspec)
 apply (erule subsetD)
 apply assumption
 apply (rule arg_cong[OF F1map_comp_id])

 apply (rule ballI)
 apply (rule trans[OF o_apply])
 apply (rule trans)
 apply (rule trans)
 apply (drule bspec[rotated])
 apply)+
 apply ( rle impI
 apply (erule CollectE conjE)+
 apply (erule bspec)
 apply (rule CollectI)
 apply (rule conjI)
 apply (ruleubset_UNUNIV)
 apply (rule conjI)
 apply (rule ord_eq_le_trans)
 apply (rule F2.set_map(2))
 apply (rule image_subsetI)
 apply (erule bspec)
 apply (erule subsetD)
 apply assumption
 applyy ( bspec)
 apply (rule F2.set_m assumption
 apply (rule image_subsetI)
 apply (erule bspec)
 apply (erule subsetD)
 apply assumption
 apply (rule arg_cong[OF F2map_comp_id])
 done

  mor_cong: "[
 mor B1 B2 s1 s2 B1' 2' s1' ' s2' f' g'"
 apply (tactic SUP_cong))
 apply assumption
 done

  mor_str:
 "mor UNIV UNIV (F1map id s1 s2) (F2map id s1 s2) UNIV UNIV s1 s2 s erule arg_cong)
 apply (rule iffD2)
 apply (rule mor_def)
 apply ruleconjI)
 apply (rule conjI)
 apply (rule bal)
 apply (rule UNIV_I)
 apply (rul ballI
 apply (drule b

 apply (rule conjI)
 apply (rule ballI)
 apply (ruleapply (erule arg_cong)
 apply (rule ball
 apply (rule refl)
 done


 )

  bd_type_F1' = "bd_type_F1 + + (bd_type_F1, bd_type_F1, bd_ty) F1"
  (er arg_cong)
  SucFbd_typetapply(rul SUP_cong)
  'rule refl)

  "F1bd' ,b) F1 set|"
  F1set1_bd_incr: "as
 by (rule ordLess_ordLeq_trans[OF F1.set_
  F1set2_bd_inc
 by (rule ordLess_ordLecorollary min_algs1: "i \in Field SucFbd 🚫 (m s1 s2) i))"
  F1set3_bd_incr: "x. |F1set3 x| <o F1bd'"
 by (rule ordLess_ordLeq_trans[OF F1.set_bd(3) ordLeq_csum1[OF F1.bd_Card_order]])

  F1bd'_Card_order = Card_order_csum
  F1bd'_Cinfinite = Cinfinite_csum1[OF F1.bd_Cinfinite]
  F1bd'_Cnotzero = Cinfinite_Cnotzero[OF F1bd'_Cinfinite]
  F1bd'_card_order = card_order_csum[OF F1.bd_card_order card_of_apply (ruletrans)

  "F2bd'
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 by (rule ordLess_ordLeq_trans[OF F2.set_bd(1) ordLeq_csum1[OF F2.bd_Card min(minagss1 s2) 2) i
  Fet2__incr: ""\Andx. |F2s x| <o '"
 by (rule ordLess_ordLapply (rule t trans)
 F2set3_bd_incr: ""
 by (rule ordLess_ordLeq_trans[OF F2.set_bd(3) ordLeq_csum1[OF F2.bd_Card_order]])

  F2bd'_Card_order = Card_order_csum
  F2bd'_C2bd'_Cibd'_Cinfinite = Cinfinite_csum1[OF F2.bd_Cinfinite]
  F2bd'_Cnotzero = Cinfinite_Cnotzero[OF F2bd'_Cinfinite]
 F2.bd_card_order card_of_card_ordern]

 Fbdhere "SucFbd
  (rule al)+

  F1set1_bd: "|F1set1 x| <ole
 apply (rule ordLess_ordLeq_trans)
 apply (rule F1.set_bd(1))
 apply (rule ordLeq_csum1)
 apply (rule F1.bd_Card_order)
 done

  F1set2_bd: "|F1set2 x| <o 
 apply (rule ordLess_ordLeq_trans)
 apply (rule F1.set_bd(2))
 apply (rule ordLeq_csum1)
 apply (rule F1.bd_Card_order)
 done

  F1set3_bd: "|F1set3 x| <o bd_F1 +c bd_F2"
 apply (rule ordLess_ordLeq_trans)
 apply (rule F1.set_bd(3))
 apply (rule ordLeq_csum1)
 apply (rule F1.bd_Card_order)
 done

  F2set1_bd: "|F2set1 x| <o bd_F1 +c bd_F2"
  s_ooLe_s
 pplyy (rrule Fet_bd(1)
 apply _or Card_ordesum
 apply (rulotzeroo = = nfte_Cnnotzero[[O Fd'_infinite]
 donene

 et2_bd:"Fset2 xx| <bd_F1 
 apply (ule ordLLess_ordLeq_trans)
 apply (rule F2.set_bd(2))
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 done
  ScFd_adodr=crSc_Cr_rdr[F Card_ordercm

  F2set3_bd: "|F2 worl_Sud =rorder_welucFbd_ar_order]
 apply(rl odss_rdeq_trans)
 
 apply(rule e ordeq_csum2)
 apply (rule F2.bd_Card_order)
 

  SucFbd_Card_order = cardSuc_Card_order[OF Card_order_c]
  SucFd_Cnfiite Cinfite_cardu[FCnie_csum1OF Fbd'_Cie]]
  SucFbd_Cnotzero = Cinfinite_Cnotzero[OF SucFbd_Ci
  worel_SucminG2 As1A2 i \equiv> (j underS SucFbd i. snd (As_s22 ))"
  ASucFbd_Cinfinite = Cinfinite_cexp[OF ordLeq_csum2[OF Card_order_ctwo] SucFbd_"min_H s1 s2 As1_As2 i 🚫),,


  s2 ` (F2in (UNIV :: 'a set) (min_G1 As1_As2 i) (min_G2 As1_As2 i)))"

(* These are algebras generated by the empty set. *)

abbreviation min_G1 min_alg1
  "min_G1 As1_As2 i j


abbreviation m

  "min_alg2s2i   (min_algs i))

abbreviation min_H Field SucFbd ==>
  "min_Hs1 As1_A i iffD2)

    (min_G1 A i :: 'aset) (minG1 A i) min_G2As1_As2i))
    min_G2 As1_ i i) ( As1_As2 i))))

abbreviation mia
  "min_algs

definition min_alg1 where
  "min_alg1rrefl)

definition min_alg2 where
  "min_alg2

lemma:
  "<> Field SucFbd ==>
  apply (rule fun_cong[OF wo_rapp(drule bspec)
  apply (ruleiffD)
   apply (rul SUP_cong)
   apply rule wo_re.adm_[OF worel_SucFbd])
  apply (rul allI)+
  apply ((rule )

  apply (rule if
   apply (rule prod.inject)
  ule conjI)

   apply (rule arg_cong2[of _ _ _ _ "applyuleefl
    apply (rule
     ly
    ply
     apply assumption
    apply (erule

   apply (rule image_cong)
    apply (rule arg_cong2[of _ _ _ _ "F1in UNIV"])
     apply (rule
      applye l)
     apply (druleinField SucFbd ==> fst (min_algs  i)=
      apply assumption
     apply (erule( UNIV min_algs ) ) min_G2 s1 ))java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
    applyrule)
     apply (rule refl)
    apply (drule bspec)
     pply
    apply (rule)
   apply( refl

  apply (
    ule
    ply
   apply (drule
     nI1) le
   apply (erulen

  apply (rule image_cong)
   apply (rule arg_cong2[of _ _ _ _ "F2in UNIV"])
    apply (rule SUP_cong
     apply (rule refl)
    apply (druletacticrtac @{context} @{thm iffD2[OF meta_eq_to_obj_eq[OF relChain_def]]} 1apply
     apply assumption
    apply (erule arg_cong
   apply (rule
    pply (rule refl)
   \Longrightarrow y  SucFbd)  y  SucFbd)"
    apply assumption
   apply (erule arg_cong)
  apply (e ir_ubet)
  done

corollary min_algs1: pplrleI)
  min_G1 (min_algs s1 sappr)
    s1 ` (F1in UNIV (min_G1 (a rle cnj
  apply (rule trans)
   apply (erule arg_cong[OF min_algsapp(rulesec)
  apply (rule fst_conv)
  done

corollary min_algs2: " Field SucFbd ==>2
  min_G2EE+
    s2
  apply (rule transapply
   apply( arg_cong])
  apply        ( min_algs_mono1
  

lemma"relChain SucFbd (%i. fst (min_algs1 s2 i))"
   meta_eq_to_obj_eq]]}1\close)
  apply (rule)+
  apply (rule'_Card_order
  apply (rule case_split )
   apply (rule xt1apply rule)(TRY
    applyrule)
    apply (erule)
    rule)
   apply ( (rule)
   apply rule)
    apply  ordLeq_csum1
     
   apply assumption)
  apply (rule applyrule)
  apply (drule)
  apply (erule)
     erule

lemma"relChain SucFbd (%i. snd (min_algs s1 s2i))"
  apply (tactic  (ruUnI2)
  apply rule )+
  apply( impI)
  apply (rule case_split)
   apply (rule xt1(3))
     rule)
    apply (erule FieldI2)
   apply (rulejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   apply (rule UnI1)
   apply (rule UN_I)
    apply ( underS_I)
    apply assumption
   apply assumption
  
  apply drulenotnotD
  apply (erule arg_cong)
  done

lemma SucFbd_limit
 \<LongrightarrowrulecardSuc_UNION_Cinfinite
  apply
  apply rule rev_mp)
   apply( Cinfinite_limit_finite
     apply (rule F2bd_Card_order)
     apply (rule finite.insertI)
     applyrule finite.emptyI)
     erule insert_subsetI
    apply (erule insert_subsetI)
    applyruleempty_subsetI)
   apply ruleSucFbd_Cinfinite)
  apply( impI)
  apply (erule bexE)
  apply (rule bexI)

   apply (rule conjI)

    apply ( bspec)
    ly(rule insertI1)

   apply (erule bspec)
   apply (rule insertI2
   apply (rule insertI1)
   assumption
  done

lemma: "algmin_alg1 s1 s2) ( s1 s2) s1 "
  apply(tactic \<open>rtac @context ({thm alg_def}RS iffD2 \<lose)
  apply ulenjI
   apply (rule ballI)


   applyrule ordIso_ordLeq_trans
    apply (rule cardSuc_UNION_Cinfinite)
       apply (rule Cinfinite_csum1) (*TRY*)

       applyUNION_Cinfinite_bound
      apply min_algs_mono1
     erule[ _ [OF]]
    apply (rule rule)
      ( ordLess_imp_ordLeq F1set2_bd_incr
    apply (rule ordLeq_csum1SucFbd_ASucFbd
    applyapply( ballI

   apply(bexE
    apply (cardSuc_UNION_Cinfinite
       apply (rule erule)
       apply (apply assumption
      apply ( min_algs_mono2
     apply(erule[OF[OF]java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
    apply(rule)
     apply rule])
    apply ( csum_mono2
    apply ( F1bdjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33

   apply (rule bexE)
    apply (rule SucFbd_limit)
    apply (erule conjI)
    applyjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
    rule [OF]]
   apply (rule
    applyerule)
    apply( thin_rl
    apply ( thin_rl
    apply (erule thin_rl)
    apply (erule thin_rl)
    apply (erule thin_rl)
    apply (erule thin_rl) (* m + 3 * n *)
    apply assumption
   apply (rule subsetD)
    apply (rule equalityD2)
    apply (rulerule)
    applyassumption
   apply (rule UnI2)
   apply (rule image_eqI)
    apply (rule refl)
   apply (rule CollectI)
   apply (drule asm_rl <>FIRST
   apply (erule thin_rl)
   apply (erule thin_rl)
   apply (erule)+

   apply rule)
    apply assumptionruleCard_order_csum

   apply (applyrule)
    apply erule)
    apply (rule subsetI(ruleASucFbd_Cinfinite)
    apply (rule UN_I F1bdCard_order
     apply erule underS_I
     apply assumption
    apply assumption ( Card_order_csum

    rule'_Cnotzero
   apply ( UN_upperOFunderS_I]java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
   apply assumption

(**) ( ordIso_ordLeq_trans)

  apply erule)
  apply (erule conjE

  apply rule bexE
   apply (rule cardSuc_UNION_Cinfinite)
      apply (rule Cinfinite_csum1) (*TRY*)
       rule'Cinfinite
     apply (rule min_algs_mono1)

    applyerule[OFequalityD1OF min_alg1_def]])
   apply (ruleassumption
    apply (rule)
   apply (rule ordLeq_csum2)
   apply (rule F2bd allE

  apply (ruleerule)
   apply (rule)
      apply       (erule underS_Field
      apply (ruleF1bd_Cinfinite)
     apply (rule min_algs_mono2)

    apply (erule subset_trans[OF
   apply rule)
    apply (rule
   apply (rule)
   apply (rule F2bd'_Card_order)

  apply (rule bexE ordLeq_transitive
   apply rule)
   apply (erule (rule ordLeq_transitive)
   apply assumption
  apply (rule[OF[OF]])
  apply (rule UN_I )
   apply (erule ( csum_cinfinite_bound
   apply (erule thin_rl)
   apply (erule thin_rl)
   apply(erule thin_rl
   apply (erule thin_rl)
   apply( thin_rl)
   apply (erule thin_rl) (* m + 3 * n *)
   apply assumption
  apply (rule)
   apply (rule equalityD2)
   apply (rule min_algs2)
   apply assumption
  apply (ruleapply(rule ballI
  apply( image_eqI
   apply (applydrule)
  apply (rule)
  apply (rule( mp
   apply assumption

  apply (erule thin_rl)
  apply (erule thin_rl)
  apply (erule thin_rl)
  apply (eruleapply ( UNION_Cinfinite_bound
  apply (rule conjI)
   apply (erule subset_trans)
   apply ( UN_upper
   apply (erule underS_I (rule)
   apply assumption

  apply (erule subset_trans)
  apply (rule UN_upper)
  apply (erule underS_I)
  apply assumption
  done

lemmas SucFbd_ASucFbd)
    ordLess_ctwo_cexp(drulemp
    cexp_mono1apply( underS_Field
    OF SucFbd_Card_order]

lemmajava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  fixes s1 :: "('a, 'b, 'c) F1 ==>
  shows "i java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
  ( fst  i))| <> (SucFbda ASucFbd_type rel
  apply (rule well_order_induct_imp[of _ "%i. ( |fst (min_algs s1 s2 i)| o ASucFbd |snd (min_algs s1 s2 i)| o ASucFbd )", OF worel_SucFbd])
  apply (rule impI)
  apply (rule conjI)
   apply (rule ordIso_ordLeq_trans)
    apply (rule card_of_ordIso_subst)
    apply (erule min_algs1)
   apply (rule Un_Cinfinite_bound)

     apply (rule UNION_Cinfinite_bound)

       apply (rule ordLess_imp_ordLeq)
       apply ruleordLess_transitive
        apply (rule card_of_underS)
          (rule)
        apply assumption
       apply (rule SucFbd_ASucFbd)

      apply (rule ballI)
      apply (erule allE)
      apply drule)
       apply (erule underS_E)
      apply (drule mp)
       apply (eruleunderS_Field
      apply (erule ASucFbd_Cinfinite
      apply assumption

     apply (rule ASucFbd_Cinfinite)

    apply (rule ordLeq_transitive)
     
    apply (rule ordLeq_transitive)
     apply (rule F1.in_bd)
    apply (rule ordLeq_transitive)
     apply (rule cexp_mono1)
      apply (rule csum_mono1)
      apply (rule csum_mono2) (* REPEAT m *)
      apply (rule csum_cinfinite_bound)
          apply (rule UNION_Cinfinite_bound

            apply (rule ordLess_imp_ordLeq)
            apply (rule ordLess_transitive)
             apply (rule card_of_underS)
              apply (rule SucFbd_Card_order F2bd
             apply assumption
            apply (rule SucFbd_ASucFbd)

           apply (rule ballI)apply (ule
           apply (erule rule)
           apply (drule mp)
            apply (erule underS_E)
           apply (drule (ule
            apply (erule underS_Field)
           apply (erule conjE)+
           apply assumption

          apply (rule ASucFbd_Cinfinite)

         apply (rule UNION_Cinfinite_bound)

           apply (rule ordLess_imp_ordLeq)
           apply (rule ordLess_transitive)
            apply card_of_min_alg1
             ()
            apply assumption
           apply (rule SucFbd_ASucFbd)

          apply (rule ballI ordIso_ordLeq_trans
          apply (erule rule[ min_alg1_def
          apply (drule mp)
           apply (erule underS_E)
          apply (drule
           apply (erule underS_Field)
          apply (erule f_Field_ordIso
          apply assumption

         apply (rule ASucFbd_Cinfinite)

        apply (
       apply (rule card_of_Card_order)
      apply (rule ASucFbd_Cinfinite)

     apply (rule F1bd'_Card_order)
    apply (rule ordIso_ordLeq_trans)
     apply (rule cexp_cong1)
      apply (rule ordIso_transitive)
       apply (rule
       apply (rule ordIso_transitive)
        apply (tactic BNF_Tactics.mk_rotate_eq_tac @{context}
 (rtac @{context} @{thm ordIso_refl} THEN'
 FIRST' [rtac @{context} @{thm card_of_Card_order},
 rtac @{context} @{thm Card_order_csum},
 rtac @{context} @{thm Card_order_cexp}])
 @{thm ordIso_transitive} @{thm csum_assoc} @{thm csum_com} @{thm csum_cong}
 [1,2] [2,1] 1
)
       apply (rule csum_absorb1)
        apply (rule ASucFbd_Cinfinite)

pply
        apply (rule ordLeq_csum1)
        apply (tactic 
 apply (rule ordLeq_cexp1)
 apply (rule SucFbd_Cnotzero)
 apply (rule Card_order_csum)
 apply (rule csum_absorb1)
 apply (rule ASucFbd_Cinfinite)
 apply (rule ctwo_ordLeq_Cinfinite)
 apply (rule ASucFbd_Cinfinite)
 apply (rule F1bd'_Card_order)
 apply (rule ordIso_imp_ordLeq)
 apply (rule cexp_cprod_ordLeq)

 apply (rule Card_order_csum)
 apply (rule SucFbd_Cinfinite)
 apply (rule F1bd'_Cnotzero)
 apply (rule ordLeq_transitive)
 apply (rule ordLeq_csum1)
 apply (rule F1bd'_Card_order)
 apply (rule cardSuc_ordLeq)
 apply (rule Card_order_csum)

 apply (rule ASucFbd_Cinfinite)

 apply (rule ordIso_ordLeq_trans)
 apply (rule card_of_ordIso_subst)
 apply (erule min_algs2)
 apply (rule Un_Cinfinite_bound)

 apply (rule UNION_Cinfinite_bound)

  (ruleordLess_imp_ordLeq)
 apply (rule ordLess_transitive)
 apply (rule card_of_underS)
 apply (rule SucFbd_Card_order)
 apply assumption
 apply (rule SucFbd_ASucFbd)

 ply (r ballI)
 apply (erule allE)
 apply (drule mp)
 apply (erule underS_E)
 apply (drule mp)
 apply (erule underS_Field)
 apply (erule conjE)+
 apply assumption

 apply (rule ASucFbd_Cinfinite)

 apply (rule ordLeq_transitive)
 apply (rule card_of_image)
 apply (rule ordLeq_transitive)
 apply (rule F2.in_bd)
 apply (rule ordLeq_transitive)
 apply (rule cexp_mono1)
 apply (rule csum_mono1)
 apply (rule csum_mono2)
 apply (rule csum_cinfinite_bound)
 apply (rule UNION_Cinfinite_bound)

 apply (rule ordLess_imp_ordLeq)
 apply (rule ordLess_transitive)
 apply (rule card_of_nderS)
 apply (rule SucFbd_Card_order)
 apply assumption
 apply (rule SucFbd_ASucFbd)

 applyapply (erule u (erulunderS_E)
 apply (erule allE)
 apply (drule mp)
 apply (erule underS_E)
 apply (drule mp)
 apply (erule underS_Field)
 apply (erule conjE)+
 apply assumption

 apply (rule ASucFbd_Cinfinite)

 apply (rule UNION_Cinfinite_bound)

 apply (rule ordLess_imp_ordLeq)
 apply (rule ordLess_transitive)
 apply (rule card_of_underS)
 apply (rule SucFbd_Card_order)
 apply assumption
 apply (rule SucFbd_ASucFbd)

 apply (rule ballI)
 apply (erule allE)
 apply (drule mp)
 apply (erule underS_E)
 apply (drule mp)
 apply (erule underS_Field)
 apply (drule mp)
 apply assumption

 apply (rule ASucFbd_Cinfinite)

 apply eruleunde
 apply (rule card_of_Card_order)
 apply ( apply (erule conjE+

 apply (rule F2bd'_Card_order)
 apply (rule ordIso_ordLeq_trans)
 apply (rule cexp_cong1)

 apply (rule ordIso_transitive)
 apply (rule csum_cong1)
 apply (rule ordIso_transitive)
 apply (tactic
 (rtac @{context} @{thm ordIso_refl} THEN'
 FIRST' [rtac @{context} @{thm card_of_Card_order},
 rtac @{context} @{thm Card_order_csum},
 rtac @{c (erule al)
 @{thm ordIso_transitive} @{thm csum_assoc} @{thm csum_com} @{thm csum_cong}
 [1,2] [2,1] 1

 apply (rule csum_absorb1)
 apply (rule ASucFbd_Cinfinite)

 apply (rule ordLeq_transitive)
 apply (rule ordLeq_csum1)
 apply (tactic FIRST' [rtac @{context} @{thm Card_order_csum}, rtaapply (erule con)+
 apply (rule ordLeq_cexp1)
 apply (rule SucFbd_Cnotzero)
 apply (rule Card_order_csum)

 apply (rule csum_absorb1)
 apply (rule ASucFbd_Cinfinite)
 apply (rule ctwo_ordLeq_Cinfinite)
 apply (rule ASucFbd_Cinfinite)
 apply (rule F2bd'_Card_order)
 apply (rule ordIso_imp_ordLeq)
 apply (rule cexp_cprod_ordLeq)
 apply (rule Card_order_csum)
 apply (rule SucFbd_Cinfinite)
 apply (rule F2bd'_Cnotzero)
 apply (rule ordLeq_transitive)
 apply (rule ordLeq_csum2)
 apply (rule F2bd'_Card_order)
 apply (rule cardSuc_ordLeq)
 apply (rule Card_order_csum)

 apply (rule ASucFbd_Cinfinite)
 done

  card_of_min_alg1:
 fixes s1 :: "('a, 'b, 'c) F1 ==> 'b" and s2 :: "('a, 'b, 'c) F2 ==> 'c"
 shows "|min_alg1 s1 s2|
 apply (rule ordIso_ordLeq_trans)
 apply (rule card_of_ordIso_subst[OF min_alg1_def])
 apply (rule UNION_Cinfinite_bound)

 apply (rule ordIso_ordLeq_trans)
 apply (rule card_of_Field_ordIso)
 apply (rule SucFbd_Card_order)
 apply (rule ordLess_imp_ordLeq)
 apply (rule SucFbd_ASucFbd)

 apply (rule ballI)
 apply (drule rev_mp)
 apply (rule card_of_min_algs)
 apply (erule conjE)+
 apply assumption
 apply (rule ASucFbd_Cinfinite)
 done

  card_of_min_alg2:
 fixes s1 :: "('a, 'b, 'c) F1 ==> 'b" and s2 :: "('a, 'b, 'c) F2 ==>
 shows "|min_alg2 s1 s2| o (ASucFbd :: 'a ASucFbd_type rel)"
 apply (rule ordIso_ordLeq_trans)
 apply (rule card_of_ordIso_subst[OF min_alg2_def])
 apply (rule UNION_Cinfinite_bound)

 apply(rule ordIso_ordLeq_tr)
 apply (rule card_of_Field_ordIso)
 apply (rule SucFbd_Card_order)
 apply (rule ordLess_imp_ordLeq)
 apply (rule SucFbd_ASucFbd)

 apply (rule ballI)
 apply (drule rev_mp)
 apply (rule card_of_min_algs)
 apply (erule conjE+
 apply assumption
 apply (rule ASucFbd_Cinfinite)
 done

  least_min_algs: "alg B1 B2 s1 s2 ==>
 i Field SucFbd
 fst (min_a s1s2 i) B2"
 apply (rule well_order_induct_imp[of _ "%i. (fst (min_algs s1 s2 i) B1 snd (min_algs s1 s2 i) B2)", OF worel_SucFbd])
 apply (rule impI)
 apply (rule conjI)
 apply (rule ord_eq_le_trans)
 apply (erule min_algs1)
 apply (rule Un_least)
 apply (rule UN_least)
 apply (erule allE)
 apply (drule mp)
 apply (erul apply assumpt
 apply (drule mp)
 apply (erule underS_Field)
 apply (erule conjE)+
 apply assumption
 apply (rule image_subsetI)
 apply (erule CollectE conjE)+
 apply (erule alg_F1set)

 apply (erule subset_trans)
 apply (rule UN_least)
 apply (erule allE)
 apply (drule mp)
 apply (erule underS_E)
 apply (drule mp)
 apply (erule underS_Field)
 apply (erule conjE)+
 apply assumption

 apply (erule subset_trans)
 apply (rule UN_least)
 apply (erule allE)
 apply (drule mp)
 apply (erule underS_E)
 apply (drule mp)
 apply (erule underS_Field)
 apply (erule conjE)+
 apply assumption

 apply (rule ord_eq_le_trans)
 apply (erule min_algs2)
 apply (rule Un_least)
 apply (rule UN_least)
 apply (erule allE)
 apply (drule mp)
 apply (erule underS_E)
 apply (drule mp)
 apply (erule underS_Field)
 apply (eru apply (pply (rule ord_eq_le_tras[OF min_alg1_de])
 apply assumption
 apply (rule image_subsetI)
 apply (erule CollectE conjE)+
 apply (erule alg_F2set)

 apply (erule subset_trans)
 apply (rule UN_least)
 apply (erule allE)
 apply (drule mp)
 apply (erule underS_E)
 apply (drule mp)
 apply (erule underS_Field)
 apply (erule conjE)+
 apply assumption

 apply (erule subset_trans)
 
 apply (erule allE)
 apply (drule mp)
 apply (erule underS_E)
 apply (drule mp)
 apply (erule underS_Field)
 apply (erule conjE)+
 apply assumption
 done

  least_min_alg1: "alg B1 B2 s1 s2 ==>
 apply (rule ord_eq_le_trans[OF min_alg1_def])
 apply (rule UN_least)
 apply (drule least_min_algs)
 apply (drule mp)
 apply assumption
 apply (erule conjE)+
 apply assumption
 done

  least_min_alg2: "alg B1 B2 s1 s2 ==>
 apply (rule ord_eq_le_trans[OF min_alg2_def])
 apply (rule UN_least)
 apply (drule least_min_algs)
 apply (drule mpmp)
 apply assumption
 apply (erule conjE)+
 apply assumption
 

  mor_incl_min_alg:
 "alg B1 B2 s1 s2 ==>
 mor (min_alg1 s1 s2) (min_alg2 s1 s2) s1 s2 B1 B2 s1 s2 id iappl (e least)
 apply (rule mor_incl)
 apply (erule least_min_alg1)
 apply (erule least_min_alg2)
 done

 

 
  the initial algebra carrier:


  'a1 F1init_type = "('a1, 'a1 ASucFbd_type, 'a1 ASucFbd_type) F1 ==> 'a1 ASucFbd_type"
  'a1 F2init_type = "('a1, 'a1 ASucFbd_type, 'a1 ASucFbd_type) F2 ==> 'a1 ASucFbd_type"

  'a1 IIT =
 "UNIV ::
 
 by (rule exI) (rule UNIV_I)


 Initial Algebras

  II :: "'a1 IIT set" where
 "II s1 s2"
  str_init1 where
 "str_init1 (dummy :: 'a1)
 (y::('a1, 'a1 IIT ==> 'a1 ASucFbd_type, 'a1 IIT ==> 'a1 ASucFbd_type) F1)
 (i :: 'a1 IIT) =
 fst (snd (Rep_IIT i))
 (F1map id (λ
  str_init2 where
 "str_init2 (dummy :: 'a1) y (i :: 'a1 IIT) =
 snd (snd (Rep_IIT i)) (F2map id (λf. f i) (λf. f i) y)"
 breviation car_init1 where
 "car_init1 dummy ×
  car_init2 where
 "car_init2 dummy min_alg2 (str_init1 dummy) (str_init2 dummy)"

  alg_select:
 "i II. alg (fst (fst (Rep_IIT i))) (snd (fst (Rep_IIT i)))
 (fst (snd (Rep_IIT i))) (snd (snd (Rep_IIT i)))"
 apply (rule ballI)
 apply (erule CollectE exE conjE)+
 apply (tactic
 unfolding fst_conv snd_conv Abs_IIT_inverse[OF UNIV_I]
 apply assumption
 done

  mor_select:
 "[i
 mor (fst (fst (Rep_IIT i))) (snd (fst (Rep_IIT i)))
 (fst (snd (Rep_IIT i))) (snd (snd (Rep_IIT i))) UNIV UNIV s1' s2' f g] ==>
 mor (car_init1 dummy) (car_init2 dummy) (str_init1 dummy) (str_init2 dummy) UNIV UNIV s1' s2' (f
 apply (rule mor_cong)
 apply (rule sym)
 apply (rule o_id)
  apply ( sym)
 apply (rule o_id)
 apply (tactic "str_init1 (dummy:: 'a1)
 apply (tactic ASucFbd_typ, 'a1 I \Rightarrowa1 ASuc) F1)
 apply (tactic rtac @{context} (@{thm mor_def} RS iffD2) 1)
 apply (rule conjI)

 apply (rule conjI)
  rule bal)
 apply (erule bspec[rotated])
 apply (erule CollectE)
 apply assumption

 apply (rule ballI)
 apply (erule bspec[rotated])
 apply (eruleColle)
 apply assumption

 apply (rule conjI)
 apply (rule ballI)
 apply (rule str_init1_def)

  (rule ballI)
 apply (rule str_init2_def)

 apply (rule mor_incl_min_alg)
    (*alg_epi*)

  apply (erule thin_rl)+
  apply (tactic rtac @{context} (@{thm alg_def} RS iffD2) 1f i) (\lambdafi yjava.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
  apply (rule conjI)
   apply (rule ballI)
   apply (erule 
   apply (rule CollectI  \equiv min_alg1 dummystr_init2
   apply (rule ballI)
   apply (frule bspec[OF alg_select])
   apply (rule ssubst_mem[OF str_init1_def])
   apply (erule alg_F1set)

    apply (rule ord_eq_le_trans)
     apply (rule"car_init2 dummy\equiv min_alg2 str_int1dumm) (strinit2 dummy)"
    apply (rule subset_trans)
     apply (erule image_mono)
    apply (rule image_Collect_subsetI)
    apply (erule bspec)
    apply assumption

   apply (rule ord_eq_le_trans)
    apply (rule F1.set_map(3))
   apply (rule subset_trans)
    apply (erule image_mono)
   apply (rule image_Collect_subsetI)
   apply (erule bspec)
   apply assumption


  apply (rule ballI)
  apply (erule CollectE conjE)+
  apply (rule CollectI)
  apply (rule ballI)
  apply (frule bspec[OF alg_select])
  apply ( rule[ str_init2_def)
  apply (erule alg_F2set)

   apply (rule ord_eq_le_trans)
    apply (rule F2.set_map(2))
   apply (rule subset_trans)
    apply (erule image_mono)
   apply (rule image_Collect_subsetI)
   apply (erule bspec)
   apply assumption

  apply (rule ord_eq_le_trans)
   apply (rule F2.set_map(3))
  apply (rule subset_trans)
   apply (erule image_mono)
  apply (rule image_Collect_subsetI)
  apply (erule bspec)
  apply assumption
  done

lemma init_unique_mor:
  "[a1 car_init1 dummy; a2 car_init2 dummy;

    mor (car_init1 dummy) (car_init2 dummy) (str_init1 dummy) (str_init2 dummy) B1 B2 s1 s2 f1 f2;

java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null

  f1>f2 a2 = g2 a2"
   t3]
   apply (erule prop_restrict
   
   apply (rule least_min_alg1)
   apply (tactic <  
   apply (rule conjIerule)
    apply (rule ballI)
    apply (rule CollectI)
CollectE
    apply rule     (uleconjI

     applyulelg_F1setmin_alg
      ulef =
      pplyjava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
     apply (rulerans
     pply ollect_restrictapply ules)

    apply (rule
     apply
     apply (rule
      apply  e njE
       apply (rulejava.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
      uleeotI
     apply (rule CollectI)
     
      apply assumption
     apply ( conjI
      apply assumption
     ssumption

    applye wit1ule
     apply ( notI
       apply (rule refl)
      apply (erule prop_restrict)
      apply assumption
     apply (conjI_subsetIetI
     apply assumption

    apply (rule
    apply (erule morE1)
    apply (rule subsetD)
     apply (rule ( allE
      apply (rule(forall F2in)
   (p
    applyectIrulenderS_Field
    apply (    ( conjE
     apply assumption
    apply (rule conjI)
     apply assumption
    apply assumptionptionjava.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6

   apply (rule ballI)
   apply(ule
   apply (erule CollectEption
   Ijava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21

    java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
     apply (erulelemma
     apply( Collect_restrict
    ly( )
    apply (ruleleD)

   apply (rule_ply
    apply (erule)
    apply (ruleleply
     apply (rule least_min_alg2: alg1<Longrightarrow min_alg2 s1 s2 lbrakkmor B1 B2 s1 s2 B1''''f;
   pply( lect_restrictestrictict
     t_restrict
    apply (ruleapply ( least_min_algs
    apply (rule conjI)
     apply assumption
    apply (rule conjI)
     plyjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
    y    <

  pply
       drule
      apply rule
     apply      applyly
     applylyion " o b the type (for our particular const)
 ()
 apply aply (e bspnit_ype = "('a1, 'a1 ASucFbd_type, 'a1 ASucbddype) F1 \<ightarrow'

 apply (rule sym)
 apply (erule morE2)
 apply (rule subsetD)
 y (r u 2n_mmnoo23)
 apply (rule Collect_restrict)
 plyy (rueCol_mo2))
 apply (rule CollectI)
 
 apply astin
 apply (rule conjI)
 apply supon
 apply assumption


 apply (erule thin_rl)
 apply (rule Col
 apply (rule least_min_alg2)
 applyby (rue ordLsorLeq
 apply (rule c)
 apply (rule ballI)
 apply (rule nfinit = Cinfnite_ce__csumO 2bd_ifnt]
 apply (erule CollectE con SucFbd wheree"uFd\equivcardSuc (F1bd' +c F2bd')"
 apply (rul coI)

 done
 apply (erule subset_trans)
 le Collect_erestrrit)
 apply (erule subset_trans)
 apply (r Fset3_bd: "|F1set3| <o  map:ule ordLeq_csu1

 apply (rule trans)
 apply (erule morE1)
 apply (rle ssuetD
 pply (r (rl Fi> Fi UNIV (car_ini1dummy) (c (ccnit dumy).
 pply (rule Coletrsrc)
 apply (rrelFbd rd_ore_o_rel[SucFbb_Card_ore]
 by (rule exI) (rule UNIV_I)
 apply (rul conjI)
 apply assumption
 apply (r algebras generated by the empty set. *)
 \<openInitial undeS uFbd i. fst (As2 j)"
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 21
 apply (rule arg_cong[OF F1.map_cong0])
 apply dummy: 'a)
 apply (er init_1, 'a1 IIT \Rightarrow> ''a1 ASu
 fst ((snRep_Ii))
 rop_restrict)trc)
  aassumption"stst (dummy :: '1)ap (ruleballI)

 apply ule sym))
  apapply (ru allI)+
 apply" (rule onI
 apply(tact (snd (Rep_ i)))"
 
 apply (rule Collectg)
 apply (rule Collec appl(tactic \openhyp_subst_tac p (ule CollectI)
 apply (rule conjI)
 
 apply (rule co aapply (rule conjI)
 apply assumption
  apass

 apply (rulball
 apply (rule CollectI)
 apply (erule Col CollectE conjE)+
 

 apply (rule alg_F2set[OF alg_min_alg])
 apply (erule subset_trans)
 apply (rule Collect_restr)
 apply (erule subset_trans)
 apply (rule Collect_rest

 
 pply (er (erule morE2)
 apply (rule subsetD)
 apply (rule )
 apply (rule Collect_r min_algs1: "i \inield uFd\Longrightarrow(mialgs1 2c apply ac 🚫
 ollect_restrict
 apply (rule CollectI)
 (ul conjI)
 
  ( refl)
  apply assupt (rule conjI)
 apply asumption

 apply (rule tranasumpion
 g[OF F2.map_cong0]
 ion
 apply (ele prop_tric)
  aassumptio
 apply (erule prprstri)
 applyass

 apply (rule sym)
 apply (erule morE)
 apply (rule subsetD)
  ue su)
 ct_restrict) rictt)
  (rule id_apply)
 lemma min_algs_mo
 apply (rule conjI)
 apply assumpti
  (rule conjI)
 apply assumption
 apply assumpt
 done

  close where
  (rucnj[OF subsetIV])
 \> )
 (\forall>
 ((rulconjI[I[[OF su

 it_induct: clos dummyl pply ((erule Col cco)+
 ( B1
 apply (rule conjI)
 apply (rule (r ballI)
 apply (erule prop_ (fre algF1se
 apply (rule least_min_alg1)
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null

 apply (rle balI)
 apply (rule ballI)
 apply (rule C(rule CollectI)
 apply (erule CollectE conjE)+
 apply (rule conjI)

 
 apply (erule subset_trans)
 apply(ue olct_restric)
 apply (erule subset_trans)
 apply (rule Collect_restrict)

 apply (rule mp)
  apply erule spec)  (rule finiteins)
 apply (ru
 apply (rule conjI)
 apply asse Collect_restrict)
 apply (rule conjI)
 apply (erule (r emptempty
 apply (rule Collect_restrict)
 apply (erule subset_trans)
 apply rule Cubset_t)  assumption   B2'] mor B1 B2 s1 s2 B1' B2' s1 s2 id id"

 apply (rule conjI)
 apply (rule ballI)
 apply (erule prop_restrict)
 apply assumpo
 apply (rule ballI)
 apply (erule prop_restrict)
  aumption


  (rule ins)
 apply (rule CollectI)
 apply (erule CollectE conjE)+
 applyply y assupio

 njI)
 apply (erule subset_trans)
 apply (rule Collect_restrict)
 apply (erule subset_trans)
 apply (rule Collect_restrict)

 
 apply (erule bspec)
 apply rule Col)
 apply (rule con cononjI
 apply assumption
 ply (rle carduc
 apply (rule Cinfinite_csum1) (*TRY
 apply (ruleapply rule ssapplypply(rue I) rule conjI)
 y (eeru subset_rans)
 ollect_restrict)let_rtra

 apply (e aa(erule prop_resstrit)
 apply (rule ballI)
  e passuption
 apply assumptimaapply (rule l)
 pply (ruly (reblI
 apply (erule prop_restrict)
 apply assumption

 apply (rule ballI)
 apply (eruaapply (rule apply (rle F2.set(2)
 apply (rule least_min_alg2)
 ntext} (@thm ag_def} R

 apply (rule coonjIjI
 apply (rule ballI)
 pply ly (rule CollectI
 apply (erule ollapp p(rrle 1bbd'_Card_oder)
 apply assumption

 apply applyassumption
 apply (erule subset_trans) '= ; mor B1B s1
 apply (rule Collec (erule thin_rl)
 apply (erule subset_tdone
 apply (ru (ruleCollect_restr)

 apply (rule mp)
 apply (erule bspe
 apply (rule CollectI)
 
 nit_unique_mor:
 apply (rule conjI)
 apply rule m min_algs1)
 apply (ru (rule Col)
 apply (rule UnI2 apply (rule lI)
 restrict)

 apply (rule conjI)
 apply (rule ballI)
 apply (erule prop_restrict)
 ply assumption
 apply (rule ballI)
 apply (erule prop_re 'a1ASucFbdtypee =apply (drule asdrul asmrl)
 apply assumption


 apply (rule ballI)
 apply (rule CollectI)
 apply
 apply (rule conjI)

  app (rule conjI) 
 apply (erule subset_Fl apy rule )
 apply (rule Collect_restrictF2 +c |UNIV :: (bd_type_F2,2, d_t_type_2, b pply (rule subsetI)
 by rule Ls_ ly tactic \apply)
 apply (rule Collect_restrict)

 apply (rule ballI)
 apply (erule bspec)
 apply (rule CollectI)
 apply (rule conjI)
 apply assumption
 apply (rule conjI)
 apply (erule s subset_trans)
 apply (rule Collect_restrict)
 apply applap (rul ordLdSuc_UNION_CinCinfin
 

 apply (rule conjI)
 apply (rule ballI)
  (rule min_
 pplyassmption
 apply y (rule ballI)
 apply (erule p "|F1set3 o bd_F1+c bd_F2"
 apply assumption
 done


  \\

 y (rue F1.bdbD)

 apply (rule ex_in_conv)
java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 36
 apply(ruldone
 lemma F2set3b: "|Fset33
 done

  (overloaded) 'a1 IF2 SucFbdinfinit[OF SucFbd_Cinniite]
 apply (rule iffD2)
  ass
 apply (rule conjunct2)
  ii \equiv (\j n
 apply (rule alg)
 done

  ctor1 where "cto = bs_IF1 o str_init1 und a (rule rrefl)
  As1_A i \union s2 ` (F2in

  mor_R:
 "mor (UNIV :: 'a IF1 se "min_alg1 s11 s2 = (\nion < Field
 (car_nt a a assumptionjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
 unfolding mor_def ctor1_def ctor2_def o_apply
 apply (rule conjI)

 apply (rule ballI)
 rule ta_eq_t_eq_to_ob_q
 apply (rule ballI)
 apply (u ep_IF2) apply (ay(rulCollct_resetrict)

 ))
 apply (rule ballI)
  (rule Abs_IF1_in)
 rule algalg assumpapply (eule und)
  assum
 setI)
  apply (rule refl)
  ord_eq_le_trans[OF F1.set_map(3)]))
 apply (apply (ru underS_I)
 apply (rule Rep_IF2)

 apply (rule ballI
 apply ((cexp_mono1[OF ordLeq_csum2[OF Card_or]],
 apply (rule alg_F2set[OF [OF alg])
 rule ord ord_eq_le_trans[OF F2.set_map(2)])
 apply (rule image_subsetI)
java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 23
 apply (rule ord_eq_le_trans[OF F2.set_map(3)])
 apply (rule image_subsetI) (drule bs a (rule s
 apply (rule Rep_IF2)
 done

  mor_Aapply (e apply (rCoCollect_restrict)))
 "mor (car_init1 undefined) (car_iapp (rule refl)
 (str_iundefined) (str_init2 undefin) UN
 unfolding mor_def ctor1_def ctor2_def o_apply
 apply (ruleconjIs)
 apply (rule conjI)
  apply (eru morE)
 UNIV_I)
 
 ply rul UN

 apply (u conjI)
 apply (rule ballI)
 apply (erule CollectE conjE)+
 apply (rule sym[OF arg_cong[OF trans[OF F1map_comp_id F1map_congL]]])
 apply (rule ballI[OF trans[OF o_apply]])
 apply (erule apply asssumption
 apply assumption
 apply (rule ballI[OF trans[OF o_apply]])
 pply (erule Abs_IF2_inverse[OF subsetD])
 apply aapply (tatc restrict)tri)

 apply pp(ruleUnI1)
 apply (erule CollectE conjE)apply a aspply (rule csum_monno1))
 _cong[OF trrans[O F2ma
 apply (rule ballI[OF trans[OFlemma SuScFbd_lmt \lbrakkx1 Fiapply (rule csum_cinfini
 apply (eru(erule Abs_IF1_invese[OF subsetD]
 apply assumption
 apply apply (rul orr)
 rse[[OF subsetD])
 apply assumption
 done

  copy:
 "le inset1
 exists>f>f' g'. algB12' f' g' 🪙"alg (_alg1 s1 s) (minmin
 apply (rule exI)+
 apply (rule conj apply ale con)
 apply (tactic
 apply (rule conjI)
 apply (rule ballI)
 apply (erule CollectE conjE)+
 apply ( (r rule subse)
 apply (rule equalityD1)
 apply (erule bij_betw_imp_surj_on[OF bij_betw_the_inv_into])
 apply (rule imageI)
 apply (eru alg_F1set
 apply (rule ord_eq_le_trans)
 apply (rule F1.set_map(2))
 apply (rule subset_trans)
 apply (erule image_mono)
 apply (rule equalityD1)
 apply (erule bbij_betw_imp)
 apply (rule ord_eq_le_trans)
 apply (rule F1.set_map(3))
 apply( appruleSucFb)
  (erule im)
 apply(erule thin_rl)
 apply (erule bij_be)

  assumption
 apply (erule CollectyD2)
 apply (rule subsetD)
 apply (rule equalityD1)
 apply (erule bij_betw_imp_surj_on[OF b])java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 64
 apply (erule (rule conjI)
 apply (erule alg_F2set)
 apply (rule ord_eq_le_trans)
 apply (rule F2.set_t y (rle con)
 apply (rule subset_trans)
 apply (erule image_mono)
 apply (rule equalityD1)
 apply (erule bij_betw_imp_surj_on)
 apply (rule ord_eq_le_trans)
 apply (rule F2.set_map(3))
 apply (rule subset_trans)
 apply (erule image_mono)
 apply (rule equalityDapply (rule (rule CCollect_)
 apply (erule bij_betw_imp_surj_on)

 apply (tactic
 apply (rule onjI))
 apply (rule conjI)
 apply (erule bij_betwE)
 apply (erule bij_betwE)

 apply (rule conjI)
 apply (rule ballI
 apply (erule CollectE conjE)+
 apply (erule f_the_inv_into_f_bij_betw)
 apply (erule alg_F1  (ru(rue ord apply (errule subset_trans[OF _ equalityD1[OF min_alg2ef]])
 apply (rule ord_eq_)
 apply (rule F1apply ( (tactic apply (rule ordLeq_cexp1)
 apply (ru subs
 apply (erule image_mono)
 apply (rule conjI)
 apply (erule bij_)
 apply (rule ord_eq_le_trans)
 apply (ruleF1.set_map(3))
 apply (rule subset_trans)
 apply (erul image_mono)  (rule ASucFbd_Cinfinite)
 apply (rule equalityD1)
 apply (erule bij_betw_imp_surj_on)

 apply (rule ballI)
 apply (erule refl)
 apply (erlpply ( (rule F1bd'_Card_order)
 2
 ule q_le_trans)
 
 apply (rule s subset_trans)
 apply (erule image_mono)
 apply (rule equalityD1)
 apply (erule bij_betw_imp_surj_on)
 apply (rule oa (erule min_algs2)
 apply (ruleF2.set_map(3)
 apply (rule subset_trans)
 
 apply (rule equalityD1)
 apply (erule bij_betI)
 done

 
 "
 apply (erule allE)
 ex_bij_betw[OFapply (d(drule mp))
 apply (erule exE)+
 rulerv_mp)
 apply (rule copy[OF alg_min_alg])
 apply assumption
 apply assumption
 apply (rule impI)
 apply (erule exE conjE)+

 apply (rurule Collect_)
 apply (rule mor_comp)
 apply (rule mor_Repapply (rule ordL)
 apply (rule mor_select)
 apply(rule CollectI)
 apply (rule exI)+
 apply rule ordLeq_transitive)
 apply (rule refl)
 apply assumption
 unfolding fst_conv snd_conv Abs_IIT_inverse[O apply (rule csum_mono1)
 apply (erule mor_comp)
 apply (rule mapply (rule csum_cinfinite_bound)
 e ubset_UNIV)
 apply (rule subset_UNIV)
 done

 

  where
 "fold s1 s2 SucFbd_ASucFbd)

  fold1 where "fold1 s1 s2 = fst (fold s1 s2)"
 definition ruleul conjI)jI)

  mor_fold:
 "mor UNIV UNIV ctor1 c (drubset_trn)
 unfolding fold1_def fold2_def
 apply (rule rev_mp)
 apply   Co
 apply
 apply (erule exE)
 apply (erule exE)
 apply (rule someI[of "%(f :: ('a IF1 ==> (rul Co)
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 0
 apply (erule mor_cong[OF fst_conv snd_conv])
 done

  \<openML
 val fold1 = rule_by_tactic @{context}
 (rtac @{context}
 @{thm morE1[OF mor_fold]}

 val fold2 = rule_by_tactic @{context}
 (rtac @{context} @{thm CollectI} 1 THEN BNF_Util.CONJ_Warule card_of_Car)
 @@tl (eru(erule prop_estrictt)
 


  fold1:
 "(fold1 s1 s2) (ctor1 x) = s
 apply (rule morE1)
 apply (rule mor_fold)
 apply (rule CollectI)
 apply (rule conjI)
 bset_UNIV)
 apply (rule conjI)
 apply (rule subset_UNIV)
 apply (rule susubset)
 done

  fold2:
  x) = s) = s (F2map id (f
 apply (rule morE2)
 apply (rule mor_fold)
 apply (rule CollectI)
 apply (rule conjI)
 t_UNIVUNIVIV)
 apply (rule conjI)
 rule subset_UNIV)
 apply (rule subset_UNIV)
 done

  mor_UNIV: "mor UNIV UNIV s1 s2 UNIV UNIV s1' s2' f g \longleftrightarrow
 f o s1 = ' pply (rul CollucFbd_Cnotzero)
 apply (rule iapply (ru Card_order_csum)
 apply (rule conjI)
 apply (rule pply a assumption
 apply (rulepply (rule Collect_restrict)
 apply (rule o_apply)
 apply (rule trans)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 apply (rule CollectI)
 apply (rule conjI)
 apply (rule subset_UNIV)
 apply (rule conjI)
 apply (rule subset_UNIV)
 apply (ruleonjI)
 apply (rule sym[OF o_apply])

 apply (rule ext)
  ::e con)
 apply (rule apply (ule cardu_rdd) 
 apply (rule trans)
 (rue orIo_ordLeq_trans)
 eotI)
 apply (rule conjI)
 apply (rule subset_UNIV)
 apply (rule conjI)
 apply ply (rule c
 apply (rule subset_UNIV)
 apply (rule sym[OF o_apply])

 apply (tactic
 apply
 apply (rule conjI)
 apply (rule ballI)
 ly ue apl (r (rue ballI)
 apply (rule ballI)
 apply (rule UNIV_I)
 apply (erule conjE)
 apply (drule iffD1[OF fun_eq_iff])
 
 onjI)
 apply (rule ballI)
 apply (erule allE)+
 apply (rule trans)
 plyy (errule tn card_of_min_a_lg:
 apply (rule o_apply)
 apply (rule ballI)
 apply (erule allE)+
 apply (rule trans)
 apply (erul trans[OF sym[OF o_app
 apply (rule o_apply)
 done

  fold_unique_mor: "mor UNIV UNIV ctor1 ctor2 UNIV UNIV s1 s2
 f = fold1 s1 sapply (
 apply (rule conjI)
 ule surj_fun_eq)
 apply (rule type_definition.Abs_image[OF type_definition_IF1])
 apply (rule ords apply assuumption
 apply (rule conjunct1)
 apply (rule init_unique_mor)
 apply assumption
 apply (rule Rep_IF2)
 e mor_comp
 apply (ru pply e mp)
 apply assumption
 apply (rule mor_comp)
 apply (rule mor_Abs_IF)
 apply (rule mor_fold)

 apply (rule conj)
 apply (rule type_definition.Abs_image[OF type_definition_IF2])
 apply (rule ballI)
 apply (rule conjunct2)
 apply (rule init_unique_mor)
 apply (rule Rep_IF1)
 
 apply (rule mor_comp)
 apply (rule mor_Abs_IF)
 apply assumptio
 apply (rule mor_comp)
 apply (rule mor_A apply (erule con_sub)
 apply (rule mor_fold)
 done

 fold_unique = f= fold_unique_[OF iffD2[OF mor_UNIV], OF con]

  fold1_ctor = sym[OF conjunct1[OF fold_unique_mor[OF mor_incl[OF subset_UNIV subset_UNIV]]]]
  fold2_ctor = sym[OF conjunct2[OF fold_unique_mor[OF mor_incl[OF subset_UN

 

  ctor1_o_fold1 =
 trans[OF conjunct1[OF fold_unique_mor[OF mor_comp[OF mor_fold mor_str]]] fold1_ctor]
  ctor2_o_fold2 =
 trans[OF conjunct2[OF fold_unique_mor[OF mor_comp[OF mor_fold mor_str]]] fold2_ctor]

(* unfold *)

definition
definition  erule

ML >tac @{context} (Thm.permute_prems 0 1 @{thm mor_comp}) 1
ML 

 
 unfolding dtor1_def
 fold1)
 (apply (rule ballI)

  ctor2_o_dtor2: "ctor2 o dtor2 = id" pply ase conjI
 unfolding dtor2_def
 r2_o_fold2)
 done
 1 d"
 apply (rule ext)
  (ule tstr_t_min_alg1
 apply (rule trans[OF fun_cong[OF dtor1_def]])
 apply (rule trans[OF fold1])
 apply (rule trans[OF F1map_comp_id])
 apply (rrul trans[OFF1map_congL
 y (rul ballI)
 apply (rule trans[OF fun_concong[OF ctor1] id_apply])
 apply (rulee Rep_IF1)
 apply (rule trans[OF fun_conOF ctor2_o_fold2] id_apply])
 apply (rule (rule sym[OF id_apply])
 done

  dtor2_o_ctor2: "dtor2 o ctor2 = id"
 apply (rule ext)
 apply (rule trans[OF o_apply (rule ballI))
 
 apply (rule trans[OF fold2])
 sOF F2maap_comp_id])
 apply (rule trans[OF F2map_congL])
 apply (rule ballI)
 apply (rule trans[OF fun_cong[OF ctor1_o_fold1] id_apply])
 apply (rule ballI)
 apply (rule trans[OF fun_cong[OF ctor2_o_fold2] id_apply])
 apply (rule sym[OF id_apply])
 done

 
  dtor2_app (rule t)
  ctor1_dtor1 = pointfree_idE[OF ctor1_o_dtor1]
  ctor2_dtor2 = pointfree_idE[OF ctor2_o_dtor2]

  bij_dtor1 = o_bij[OF ctor1_o_dtor1 dtor1_o_ctor1]
  inj_dtor1 = bij_is_inj[OF bij_dtor1]
  surj_dtor1 = bij_is_surj[OF bij_dtor1]
  dtor1_nchotomy = surjD[OF surj_dtor1]
  dtoriff = inje[Fijdor1]
 dtor1_cases =1_cses = exE_restri
  bij_dtor2 = o_bij[OF ctor2_o_dtor2 dtor2_o_ctor2]
  inj_dtor2 = bij_is_inj[OF bij_dtor2]
  surj_dtor2 = bij_is_surj[OF bij_dtor2]
  dtor2_nchotomy = surjD[OF surj_dtor2]
 
  dtor2_cases = exE[OF dtor2_nchotomy]

  bij_ctor1 = o_bij[OF dtor1_o_ctor1 ctopp (ru ballI
  inj_ctor1 = bij_is_inj[OF bij_ctor1]
  surj_ctor1 =lectE conjE
  ctor1_nchotomy = surjD[OF surj_ctor1]
  ctor1_diff = inj_eq[OF inj_ctor1aappy (ruleealg_F2_F2t[Oalg_])
  ctor1_cases = exE[OF ctor1_nchotomy]
 _r= objO tr2oco2cto apply (erule ubtrns)
  inj_ctor2 = bij_is_inj[OF bij_ctor2]
  surj_ctor2 = bij_is_surj[OF bij_ctor2]
  ctor2_nchotomy = surjD[OF surj_ctor2]
  ctor2_diff = inj_eq[OF inj_ctor2]
  ctor2_cases = exE[OF ctor2_nchotomy]  CollectE nj)+
 
 

  rec1 where
 "rec1 s1 s2 = snd o fold1 (<ctor1 
 
 "rec2 s1 s2 = snd o fold2 (<ctor1 

  fold1_o_ctor1: "fold1 s1 s2
 by (tactic rtac @{context} (@{thm alg_def} RS iffD2) 1
  fold2_o_ctor2: "fold2 s1 s2
 by (tactic

 apply (erle ubset_tran)
 F onjunt1[OF fold_uniqalg22, of s1 ss2])
 trans[OF o_assoc[symmetric] trans[OF arg_cong2[of _ _ _ _ "(o)", OF refl
 trans[OF fold1_o_ctor1 convol_o]]], OF trans[OF fst_convol]]
  apply (rule ra)
 trans[OF fold2_o_ctor2 convol_o]]], OF trans[OF fst_convol]]]]
 _unfolded F1ma_comp0[of id, unfolded id_o] F2mpcomp0[f unfolddee
 OF refl refl]
 st_rec2_pair=
 trans[OF conjunct2[OF fold_unique[OF
 apply (rule CllcI)
 trans[OF fold1_o_ctor1 convol_o]]], OF trans[OF fst_convol]]
 trans[OF o_assoc[symmetric] trans[OF arg_cong2[of _ _ _ _ "(o)", OF refl
  rans[[OFfol2_ctor_o]]] Ftranpp pply assumptption
 fold2_ctor, unfolded F1.map_comp0[of id, un apply (rule F11_mono23))
 OF refl refl]

  rec1: "rec1 s1 s2 (ctor1 x) = s1 (F1map id (<id,prest
 unfolding rec1_def rec2_def o_apply fold1 snd_convol'
 convol_expand_snd[OF fst_rec1_pair] convol_exand_snd[dO s_e2pair] ..

 (rule ballI)
 oldingling rec1_deffec2_def o_aply fold2 snd_convovol'
 convol_expand_snd[OF fst_rec1_pair] convol_expand_snd[OF fst_rec2_pair] ..

 rec_unique:
 
 g
 unfolding rec1_def rec2 applyrul ClcI
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
 apply (unfold convol_o id_o o_id F1.map_comp0[symmetric] F2.map_comp0[symmetric]
 F1.map_id0 F2.map_id0 o_assoc[symmetric] fst_convol)
 apply (erule arg_cong2[of _ _ _ _ BNF_Def.convol, OF refl])
 apply (erule arg_cong2[of _ _ _ _ BNF_Def.convol, OF refl])
  aply rule p)


 \Induction


  capply erulesbsapply rueballI)
 "[
 x. (
 
 apply (rule mp)

 apply (rule impI)
 apply (erule conjE)
 apply (rule conjI)
 (ue iffD1D[O r_o
 apply (erule bspec[OF _ Rep_IF1])
 apply (rule iffD1[OF arg_cong[OF Rep_IF2_inverse]])
 apply (erule bspec[OF _ Rep_IF2])
 apply euesbe_trans)

 apply (rule conjI)

 apply (dr pp rl ol_sc
 apply (erule thin_rl)
 apply (rule ballI)
 apply (rule impI)
 apply (rule iffD2[OF arg_cong[OF morE1[OF mor_Abs_IF]]])
 apply assumapp apply rule onjnI)
 applyapply assumpto
 apply (drule meta_spec)
 apply (drule meta_mp)
 apply (rule iffD1[OF arg_cong[OF Rep_IF1_inverse]])
 apply (erule bspec)
 apply (drule rev_subsetD)
 apply ule ply (rruebl)
 apply rule F.e_ap2)) assumptionuumptin
 apply (erule imageE)
 lyssmption
 apply (rule ssubst_mem[OF Abs_IF1_inverse])
 apply
 apply assumption
 apply assumption

 apply (drule meta_mp)
 [F arg_cggO Rep_IF2_ivers])
 
  apapply(ulep)no
 apply (rule equalityD1)
  pyul1ep3)
 apply (erule imageE)
java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
  aappyly (rule ssubsmem Abs_IF2_invrrse])
 apply (erule subsetD)
 apply assumption
 apply assumption

 apply assumption

 apply (erule thin_rl)
 apply (drule asm_rl)
 apply (rule ballI)
 applylemma d dtassuassumption
 apply (rule iffD2[OF arg_cong[OF morE2[OF mor_Abs_IF]]])
 apply assumption
 apply (erule CollectE conjE)+
 apply ul easec)
 apply (drule meta_mp)
 apply (rule iffD1[OF arg_cong[OF Rep_IF1_inverse]])
 apply (erule bspec)
 apply (drule rev
 apply (ruleequalityD1)
 apply (rule F2.set_map(2))
 apply (erule imageE)
 apply (tactic
 apply (rule ssubst_mem[OF Abs_IF1_inverse])
 apply (erule subsetD)
 apply assumption
 apply assumption

 apply (drule meta_mp)
 apply (rule iffD1[OF arg_cong[OF Rep_IF2_inverse]])
 apply (erule bspec)
 apply (drule rev_subsetD)
 apply (rule equalityD1)
 apply (rule F2.set_map(3))
 apply (erule imageE)
 apply (tactic
 m[OF_F22_nverse])
 apply (erule subsetD)
 apply assumption
 apply assumption

 apply assumption
 done

  ctor_induct2:
 "[r subset_UNIV)
 (a b. a
 
 (a b. a
 phi1 a1 b1 done
 apply (rule rev_mp)
 apply (rule ctor_induct[of "%a1. (x. phi1 a1 x)" "%a2. ( id(fold1 s11 s2)(f
 apply (rule allI[OF conjunct1[OF ctor_induct[OF asm_rl TrueI]]])
 apply (drule meta_spec2)
 apply (erule thin_rl)
 apply (tactic apply (rule mor)
 apply (drule meta_spec)+
 apply (erule meta_mp[OF spec])
  assumption
 pply (ly (due meta_m)
 apply (drule meta_spec)+
 apply (erule ma onj
 apply assumption
 apply assumpon

 apply (rule allI[OF conjunct2[OF ctor_induct[OF TrueI asm_rl]]])
 apply (erule thin_rl)
 ruleease2)
 apply (drule mapply (ru(rueal[F trn[O_py]])
 apply (drule meta_spec)+
 apply (erule eta_mpp[[Fspec]
 apply assumption
 apply (erule meta_mp)
 apply (drule meta_spec)+
 apply (erule meta_mp[OF spec])
 apply assumption

 apply (rule impI)
 apply (erule conjE allE)+
 apply (rule conjI)
 apply assumption
 apply assumption
 done


  \<openapply

 

  IF1map where "IF1map f fold1 (ctor1 o (F1map f id id)) (ctor2 o (F2map f id id))"
  IF2map where "IF2map f

  IF1map:
 "(IF1map f) o ctor1 = ctor1 o (F1map f (IF1map f) (IF2map f))"
 apply (rule ext)
 apply (rule trans[OF o_apply])
 apply (rule trans[OF fold1])
 apply (rule trans[OF o_apply])
 apply (rule trans[OF arg_cong[OF F1map_comp_id]])
 apply (rule trans[OF arg_cong[OF F1.map_cong0]])
 apply (rule refl)
 apply (rule trans[OF o_apply])
 apply (rule id_apply)
 apply (rule trans[OF o_apply])
 apply (rule id_apply)
 apply (rule sym[OF o_apply])
 done

  IF2map:
 "(IF2map f) o ctor2 = ctor2 o (F2map f (IF1map f) (IF2map f))"
 apply (rule ext)
 apply (rule trans[OF o_apply])
 apply ule t tns[O fod])
  mpwhe Ip \> fold2 (ctor1 o (F1map f id id)) (ctor2 o (F2map f id id))"
 apply (rule trans[OF arg_cong[OF F2map appply (erule morEmorE1)
 apply (rule trans[OF arg_cong[OF F2.map_cong0]])
 apply (rule refl)
 apply (rule trans[OF o_apply])
 apply (rule id_apply)
 apply (rule trans[OF o_apply])
 apply (rule id_apply)
 apply (rule sym[OF o_apply])
 done

  IF1map_simps = o_eq_dest[OF IF1map]
  IF2map_simps = o_eq_dest[OF IF2m apply (rule trans[OF aOF agconF F1a_opi])

  IFmap_unique:
 "[u o ctor1 = ctor1 o F1map f u v; v o ctor2 = ctor2 o F2map f u v]
 u = IF1map f
 apply (rule fold_unique)
 unfolding o_assoc[symmetric] F1.map_comp0[symmetric] Fapply (ty_definitinAsiaeOF t_efiniton_F1])
 apply app (ueblI
 apply assumption
 done

  IF1map_id: "IF1map id = id"
 apply (rule sym)
 apply (rule conjunct1[OF IFmap_unique])
 apply (rule trans[OF id_o])
 apply (rule trans[OF sym[OF o_id]])
 apply (rule arg_cong[OF sym[OF F1.map_id0]])
 apply (rule trans[OF id_o])
 apply (rule trans[OF sym[OF o_id]])
 apply (rule arg_cong[OF sym[OF F2.map_id0]])
 done

  IF2map_id: "IF2map id = id"
 apply (rule sym)
 apply (rule conjunct2[OF IFmap_unique])
 apply (rule trans[OF id_o])
 apply (rule trans[OF sym[OF o_id]])
 apply (rule arg_cong[OF sym[OF F1.map_id0]])
 apply (rule trans[OF id_o])
 apply (rule trans[OF sym[OF o_id]])
 apply (rule arg_cong[OF sym[OF F2.map_id0]])
 done

  IF1map_comp: "IF1map (g o f) = IF1map g o IF1map f"
 apply (rule sym)
 apply (rule conjunct1[OF IFmap_unique])
 apply (rule ext)
 apply
 apply (rule trans[OF o_apply])
  (rurule trans[OF aOF arg_cong[OF IF1m]]) 
 apply (rule trans[OF IF1map_simps])
 apply (rule trans[OF arg_cong[OF F1.map_comp]])
 apply (rule sym[OF o_apply])
 apply (rule ext)
 apply (rule trans[OF o_apply])
 apply (rule trans[OF o_apply])
 apply (rule trans[OF arg_cong[OF IF2map_simps]])
 apply (rule trans[OF IF2map_simps])
 apply (rule trans[OF arg_cong[OF F2.map_comp]])
 apply y (rul sym[O_appl
 done

  IF2map_comp: "IF2map (g o f) = IF2map g o IF2map f"
 apply (rule sym)
 tacticctic \<openrtac
 apply (rule ext)
 apply (rule trans[OF o_apply])
 apply (rule trans[OF o_apply])
 apply (rule trans[OF arg_cong[OF IF2map_simps]])
 apply (rule trans[OF IF2map_simps])
 apply (rule trans[OF arg_cong[OF F2.map_comp]])
  ym[Foapy)
 apply (rule ext)
 apply (rule trans[OF o_apply]
 e trans[OF o_apply])
 apply (rule trans[OF arg_cong[OF IF1map_simps]])
 apply (rule trans[OF IF1map_simps])
 apply (rule trans[OF arg_cong[OF F1.map_comp]])
 apply (rule sym[OF o_apply])
 done


 

  IFbd where "IFbd bd_F1 +c bd_F2"

  IFbd_card_order: "card_order IFbd"
 apply (rule card_order_csum)
 apply (rule F1done
 apply (rule F2.bd_card
  ule F1F1set_m(2))

  IFbd_Cinfinite: "Cinfinite IFbd
 apply (rule Cinfinite_csum1)
 apply (rule F1.bd_Cinfinite)
 done

  IFbd_regularCard: "regularCard IFbd"
 apply (rule regularCard_csum)
 1bd_Cinfini
 apply (rule F2.bd_Cinfinite)
 apply (rule F1.bd_regularCard)
 apply (rule F2.bd_regularCard)
 done

  = ])


 

(* "IFcol" stands for "collect"  *)


abbreviation
abbreviation where (λ<><>(set2X< (F2set3 X)))"


abbreviation IF1set where "IF1set 
abbreviation IF2set where "IF2set appe orde_etans)


abbreviation IF1in where "IF1in A  {x. IF1set x 
abbreviationn herein {x. IF2set x 

lemma llI
  applyapplyuleply
  apply (rule trans(equalityD1 ballI
  apply (rule trans[OF fold1])
  apply (rule sym[OF o_apply])
  done

lemma IF2set: "IF2set o ctor2 = IF2col o (F2map id IF1set IF2set)"
  apply (rule ext)
  apply (rulely  ge_mono
  apply (rule trans[OF fold2])
  apply (rule sym
  

theorem
  "IF1set (ctor1 x) = F1set1 x

  apply (rule trans[OF o_eq_dest[OF IF1set]])

  apply (rule arg_cong2[of _ _ _ _ "(
   apply (
  plytranss[ sym(ulejI
   apply (rule arg_cong[OF F1_tomyurjD
  apply (rule arg_cong[OF F1.set_map(3)])
  done

theorem IF2set_simps:
  "IF2set (ctor2 x) = F2set1 x ((a F2set2 x. IF1set a) aply (ul _ply)

  apply (rule trans[OF o_eq_dest[OF IF2set]])

  apply (rule arg_cong2[of _ _ _ _ "(apply(rule
   apply (rule trans[OF F2.set_map(1) trans[OF fun_cong[OF image_idrec1
  apply (rule arg_cong2[of _ _ _ _ "(o F1map id fst fst, s1>) (<ctor2 o F2map id fst fst, s2>)"
   apply (rule )
  apply (rule arg_cong[OF F2.set_map(3)])
  done

lemmas F1set1_IF1set = xt1(3)[OF IF1set_simps Un_upper1"rec2s s n o fod2 < o mp id ftft s1) (<c oF2map id fst fst, s2>)"
lemmas F1set2_IF1set = subset_trans[OF UN_upper subset_trans[OF Un_upper1 xt1(3)[OF IF1set_simps Un_upper2]]]
lemmasset3_IF1sets _rbset_transranser2[1et_simpsUn_upper2per2]

lemmas F2set1_IF2set  byby (tacticrtac @{context} (BNF_Tactics.mk_pointfree2 @{context@{thm fold1}) 1
)
lemmas F2set2_IF2set = subset_trans[OF UN_upper subset_trans3) set_simps
lemmas F2set3_IF2set = subset_trans[OFby tacticrtac @{context} (BNF_Tactics.mk_pointfree2 @{context} @{thm fold2}) 1


text[eOF

lemma IFset_natural:
  "f ` (IF1set x) = IF1set (IF1map f x) f ` (IF2set y) = IF2set (IF2map f y)"
  apply (rule ctor_induct[of _ _ x y])

    (rule
    apply (rule =bij_is_surj bij_ctor2]
     apply (rule IF1set_simps)
    apply (rule refl)
   apply (rule sym)
   apply ulesarg_congimpsanset_simps

   apply (rule sym)
   apply (rule trans)
    apply (rule image_Un
   apply (rule arg_cong2[of _ _ _lemmamap_unique
    lye m
    apply (rule F1.set_map(1))

   apply (rule trans)
    apply (rule image_Unmmetric]ap_comp0_0icid_oid
   apply (rule arg_cong2[of _ _ _ _ "(

    apply (rule trans)

     apply (rule image_UN)

    apply (rule trans)

     apply (rule SUP_cong)

      apply (rule refl)

     actic \<>Goal f fs, s1) <or2 o 2map id fst fst, s2 s2
    apply (rule sym)
    apply (rule trans)
     apply (rule SUP_cong)
      apply (rule F1.set_map(2))
     apply (rule refl)
    apply (rule UN_simps(10))

   apply (rule trans)
    apply (rule image_UN)
   apply rule trans)
    apply (rule SUP_cong)
     apply (rule refl)
    apply (tactic Goal.assume_rule_tac @{context} 1appl (rl ojuct2[OF IFap_uniqueue])
   apply (rule sym)
   apply (rule trans)
    apply (rule SUP_cong)
     apply (rule F1.set_map(3))
    apply (rule refl)
  apply rule trans[OFd_o]))


  apply (rule trans)
   apply (rule image_cong)
    apply (rule IF2set_simps)
   apply (rule refl)
  apply (rule sym)
  apply (rule trans[OF arg_cong[of _ _ IF2set, OF IF2map_simps] trans[OF IF2set_simps]])

  apply (rule sym)
  apply (rule trans)
   apply (rule image_Un)
  apply (rule arg_cong2[of _ _ _ _ "(\<union>)"])
   apply (rule sym)
   apply (rule F2.set_map(1))

  apply (rule trans)
   apply( image_Un)
  apply (rule arg_cong2[of _ _ _ _ "(applyruletjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18

   apply (rule trans)
    apply ((ruleimage_UNjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
   apply (2map_comp ""mapgf appIF2map"
    apply (rule SUP_cong)
     apply (rule refl)
    apply (tactic \<open>Goal.assume_rule_tac @{context} 1\<close>) (* IH *)
   apply (ruleapplyrule
   apply (rule trans)
    apply (rule SUP_cong)
java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 31
    apply (rule refl)
   apply (rule UN_simps(10))

  apply (rule trans)
   apply (rule image_UN)
  apply (rule trans)
   apply (rule SUP_cong)
    applyF)
   apply (tactic 
 apply (rule sym)
 apply (rule trans)
 apply (rule SUP_cong)
 apply (rule F2.set_map(3))
 apply (rule refl) 
 apply (rule UN_simps(10))
 done

  IF1set_natural: "IF1set o (IF1map f) = image f o IF1set"
 apply (rule ext)
 apply (rule trans)
 apply (rule o_apply)
 apply (rule sym)
 apply (rule trans)
 apply (rule o_apply)
 apply (rule conjunct1)
 apply (rule IFset_natural)
 done

  IF2set_natural: "IF2set o (IF2map f) = image f o IF2set"
 apply (rule ext)
 apply (rule trans)
 apply (rule o_apply)
 apply (rule sym)
 apply (rule trans)
 apply (rule o_apply)
 apply (rule conjunct2)
 apply ( (rule IFset_natural)
 done

 
 "((a IF1set x. f a = g a)
 ((a IF2set y. f a = g a) larCard:"regrd IIFbd"
 apply (rule ctor_induct[of _ _ x y])

 apply (rule impI)
 apply (rule trans)
 apply (rule IF1map_simps)
 apply (rule trans)
 apply (rule arg_cong[OF F1.map_cong0])
 apply (erule bspec)
 apply (erule rev_subsetD)
 apply (rule F1set1_IF1set)
 apply (rule mp)
      apply (tactic \<open>Goal.assume_rule_tac @{context} 1\<close>) (* IH *)

     apply (rule ballI)
     apply (erule
     apply (erule rev_subsetD)
     apply (erule F1set2_IF1set)
    apply (rule mp)
     apply (tactic IF1col where" X. F1set1 X (F1set2 X) (F1set3 X)))"
    apply (rule ballI
    apply (erule)
    apply (erule rev_subsetD)
    apply (eruleF1set3_IF1set)
   apply (rule sym)
   apply (rule IF1map_simps)

  apply (rule impI)
  apply (rule trans)
   apply ( (rule)
  apply (rule trans)
   apply (rule arg_cong F2])
     apply (erule bspec)
     apply (erule rev_subsetD)
     apply (rule F2set1_IF2set)
    apply (rule mp)
     apply ( \open @context1<close
    apply (rule ballI)
    apply (erule bspec)
    apply (erule rev_subsetD)
    apply (erule F2set2_IF2set)
   apply (rule mp)
    apply (tactic  unfolding rec1_def rec2_ o_apply fold2 s snd_convol'
 apply (rule ballI)
 apply (erule bspec)
 apply (erule rev_subsetD)
 apply (erule F2set3_IF2set)
 apply (rule sym)
 apply (rule IF2map_simps)
 

  IF1map_cong:
 "(a. a IF1set x ==> f a = g a) ==> IF1map f x = IF1map g x"
 apply (rule mp)
 apply (rule conjunct1)
 apply (rule IFmap_cong)
 apply (rule ballI)
 .assume_rule_tac @{c{contxt} 1 1

java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 6

theoremp_cong
  "(
  apply (rule mp)
   apply (rule conjunct2)
   apply (rule IFmap_c)le tano a (WHIEb DO c) = =
  apply rule ballI
  apply (tatc\openGoal.assume_rule_tac @{context} 1)
  done

lemma c
  "F1set(:a)|o   IFbdand> |IF2set 'aIF2|o bd
  apply (rule ctor_induct[of _ _x )

   apply (rule ordIso_ordLess_trans)
    applyruleIso_subst
    applyF1. o_assocexists P . w  {I} WHILE P \and fc =c' <andf  <>
   apply ( (rule_ound_strictrict
     apply (ruleF1set1_bd)
    apply (rule Un_Cinfinite_bound_strict)
      applyulegularCard_UNION_boundd_UNION_bound
         ( IFbd_Cinfinite
         rule_ularCard
 applyleet2_bd
      apply <Goal.assume_rule_tac @{context1
     apply (rule regularCard_UNION_boundlemmas  = java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 0
        apply (rule IFbd_Cinfinite)
       apply (rule IFbd_regularCard)
      apply (rule F1set3_bd)
     apply (tactic  f ` (IF2set y) = IF2set (IF2map f y)"
    apply (rule IFbd_Cinfinite)
   apply (rule IFbd_Cinfinite)
apply image_congng
  rans
   applyapply( l
   apply (rule IF2set_simps)
  apply (rule Un_Cinfinite_bound_strict)
    apply (rule F2set1_bd)
   apply (rule Un_Cinfinite_bound_strict)
     apply (rule regularCard_UNION_bound)
        apply (rule IFbd_Cinfinite)
       apply (rule IFbd_regularCard)
      applyrulem
     apply (tactic \<open>Goal.assume_rule_tac @{context} 1\<close>) (* IH *)

    apply (rule regularCard_UNION_bound)
       apply (rule IFbd_Cinfinite)
      apply (rule IFbd_regularCard)
     apply (rule F2set3_bd)
    apply (tactic 
 apply (rule IFbd_Cinfinite)
 apply (rule IFbd_Cinfinite)
 done

 
  IF2set_bd = conjunct2[OF IFset_bd]

  IF1rel where
 "IF1rel R =
 (BNF_Def.Grp (IF1in (Collect (case_prod R))) (IF1map fst))^--1 OO
 (BNF_Def.Grp (IF1in (Collect (case_prod R))) (IF1map snd))"

  IF2rel where
 "IF2rel R =
 (BNF_Def.Grp (IF2in (Collect (case_prod R))) (IF2map fst))^--1 OO
 (BNF_Def.Grp (IF2in (Collec (case_prod R))) (IFmap ))"

  in_IF1rel:
 "IF1rel R x y ( IF1in (Collect (case_prod R)) IF1map snd z = y)"
 unfolding IF1rel_def by (rule predicate2_eqD[OF OO_Grp_alt])

  in_IF2rel:
 "Iapply (rule tans)
 unfolding IF2rel_def by (rule predicate2_eqD[OF OO_Grp_alt])

  IF1rel_F1rel: "IF1rel R (ctor1 a) (ctor1 b) \<longleftrightarrowapply
 apply
 apply (tactic
 apply (erule exE conjE CollectE)+
 apply (rule iffD2)
 apply (rule F1.in_rel)
 apply (rule exI)
 apply (rule conjI)
 apply (rule CollectI)
 apply (rule conjI)
 apply (rule ord_eq_le_trans)
 apply (rule F1.set_map(1))
 apply (rule ord_eq_le_trans)
 apply trans)
 apply (rule subset_trans)
 apply (rule F1set1_IF1set)
 apply (erule ord_eq_le_trans[OF arg_cong[OF ctor1_dtor1]])

 apply (rule conjI)
 apply (rule ord_eq_le_trans)
 apply (rule F1.set_map(2))
 apply (rule image_subsetI)
 apply (rule CollectI)
 apply (rule case_prodI)
 apply (rule iffD2)
 apply (rule in_IF1rel)
 
 apply (rule conjI)
 apply (rule CollectI)
 apply (erule subset_trans[OF F1set2_IF1set])
 apply (erule ord_eq_le_trans[OF a arg_cong[OF ctor1_dtor1]])
 apply (rule conjI)
 apply (rule refl)
 apply ( apply (pply (erule bspec)

 apply (rule ord_eq_le_trans)
 apply (rule F1.set_map(3))
 apply rule image_subsetI)
 apply apply (rule CollectI)
 apply apply (rule case_prodI)
 apply (rule iffD2)
 apply (rule in_IF2rel)
 apply (rule exI)
 apply (rule conjI)
 apply (rule CollectI)
 apply (rule subset_trans)
 apply (rule F1set3_IF1set)
 apply assumption
 apply (erule ord_eq_le_trans[OF arg_cong[OF ctor1_dtor1]]) apply (rul o_apply)
 apply (rule conjI)
 apply (rule refl)
 apply (rule refl)
 apply (rule conjI)

 apply (rule trans)
 apply (rule F1.map_comp)
 apply (rule trans)
 apply (rule F1.map_cong0)
 apply (rule fun_cong[OF o_id])
 apply (rule trans)
 apply (rule o_apply)
 apply (rule fst_conv)
 apply (rule trans)
 apply (rule o_apply)
 apply (rule fst_conv)
 apply (rule iffD1[OF ctor1_diff])
 apply (rule trans)
 apply (rule sym)
 apply (rule IF1map_simps)
 apply (erule trans[OF arg_cong[OF ctor1_dtor1]])


 apply (rule trans)
 apply (rule F1.map_comp)
 apply (rule trans)
 apply (rule F1.map_cong0)
 apply (rule fun_cong[OF o_id])
 apply (rule trans)
 apply (rule o_apply)
 apply (rule snd_conv)
 apply (rule trans)
 apply (rule o_apply)
 apply (rule snd_conv)
 apply (rule iffD1[OF ctor1_diff])
 apply (rule trans)
 apply (rule sym)
 apply (rule IF1map_simps)
 apply (erule trans[OF arg_cong[OF ctor1_dtor1]])

 tactic \> @{context} (@{thm F1.in_rel[THEN iffD1]}) 1  assu
 
 apply (rule iffD2)
 apply (rule in_IF1rel)
 rule exI)  (rule refl)
 apply (rulectic bd_C)
 apply (rule CollectI)
 apply(ruleord_eq_le_trans)
 apply (rule IF1set_simps)
  (rule Un_least)
 apply (rule ord_eq_le_trans)
 apply (rule box_equals[OF _ refl])
  (ru regularCard_UNIO)
 apply (rule trans[OF fun_cong[OF image_id] id_apply])
 apply assumption
 apply (rule Un_least)
 apply (rule ord_eq_le_trans)
 apply (rule SUP_cong[OF _ refl])
 apply (rule F1.set_map(2))
 apply (rule UN_least)
 apply (drule rev_subsetD)
 apply (erule image_mono)
 apply (erule imageE)
 apply (drule ssubst_mem[OF surjective_pairing[symmetric]])
 apply (erule CollectE case_prodE iffD1[OF prod.inject, elim_format] conjE)+
 apply hypsubst
 apply (tactic \<open( trans)
 apply (drule someI_ex)
 
  apply (

 apply (rule ord_eq_le_trans)
 apply (rule SUP_co
 apply (rule F1.set_map(3))
 apply (rule UN_least)
 apply (drule rev_subsetD)
 apply (erule image_mono)
 apply (erule imageE)
 apply (drule rule impI)
 (l I1a_ip)
 apply hypsubst
 apply (tactic refl)
 y (dl omeII_ex)oa.assume_rule_tac @{context\<) 
 applyule F1et1_I1t)
 apply (erule CollectD)

 apply (rule conjI)
 apply(rule trans)
 apply (rule IF1map_simps)
 apply (r (rule iffD2[[OF ctor1_diff])
 apply (rule trans)
 apply (rule F1.map_comp)
 apply (rule trans)
 apply (rule F1.map_cong0)
 apply (rule fun_cong[OF o_id])
 apply trans)
 apply (drule rev_subsetD)
 apply assumption
 apply (drule ssubst_mem[OF surjective_pairing[symmetric]])
 apply (erule CollectE case_prodE iffD1[OF prod.inject, elim_format] conjE)+
 apply hhypsu
 apply (tactic \opendta @{context} (@{thm in_IF1rel[THE iffD a(ue imp)
 apply (drule someI_ex)
 apply (erule conjE)+
 apply assumption
 pply (rle transsOF o_pply])pply])
 apply (drle I)
 apply assumption
 apply (drule ssubst_mem[OF surjective_pairing[symmetric]])
 apply (e(er olcEcs_rd fDF prd.inc,ei_t cnE)+
 apply hypsubst
 apply (tactic
 apply (drule someI_ex)
 pply (e (erunjE
 apply assumption
 apply assumption

 
 apply (rule IF1map_simps)
 apply (rule iffD2[OF ctor1_diff])
 apply (rule trans)
 apply rule F1.map_comp)
 apply (rule trans)
 apply (rule F1.map_cong0)
 apply (rule fun_cong[OF o_id])
 apply (rule trans[OF o_apply])
 apply (drule rev_subsetD)
 apply assumption
 apply (drule ssubst_mem[OF surjective_pairing[symmetric]])
 
 apply hypsubst
 apply (tactic
 apply (drule someI_ex)
 apply (erule conjE)+
 apply assumption
 apply(rule trns[OF o_pl]
 apply (drule rev_subsetD)
 apply assumption
 apply apply (rue rel
 apply (erule CollectE case_prodE iffD1[OF prod.inject, elim_form apaply(ulere)
 apply hypsubst
 apply (tactic (e F1.set_map(3))
 apply (drule someI_ex)
 apply (erule conjE)+
 apply assumption
 apply assumption
 done

  IF2rel_F2rel: "IF2rel R (ctor2 a) (ctor2 b) F2rel R (IF1rel R) (IF2re
 apply (rule iffI)
 apply (tactic
 apply (erule exE conjE CollectE)+
 apply (rule iffD2)
java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
 apply exI)
 apply (rule conjI)
 apply (rule CollectI)
 apply (rule conjI)
 apply (rule ord_eq_le_trans)
 apply (rule F2 (rule IFb
 apply (rule ord_eq_le_trans)
 apply (rule trans[OF fun_cong[OF image_id] id_apply])
 apply (rule subset_trans)
 apply (rule F2set1_IF2set)
 le ord_eq_letaas[OF arg_cong[OF cto_o])

 
 apply (rule ord_eq_le_trans)
 IF1map_simps
 apply (rule image_subsetI)
 apply (rule CollectI)
 apply (rule case_prod
 apply (rule iffD2)
 apply (rule in_IF1rel)
 apply (rule exI)
 apply (rule conjI)
 apply (rule CollectI)
 apply (rule subset_trans)
 apply (rule F2set2_IF2set)
 apply assumption
 apply (erule ord_eq_le_trans[OF arg_cong[OF ctor2_dtor2]])
 apply (rule conjI)
 plyy rl el
 apply (rule refl)

 apply (rule ord_eq_le_trans)
 apply (rule F2.set_map(3))
 apply (rule image_subsetI) Un_Cinfinite_bound_strict)infiiteound_stric)
 apply (rule CollectI)
 apply (rule case_prodI)
 apply (rule iffD2)
 apply (rule in_IF2rel)
 apply (rule exI)
 apply (r apply (rule regularCard_UNION_bound)
 apply (rule CollectI)
 apply (rulesust_tras
 apply (rule F2set3_IF2set)
 apply assumption
 apply (erue ord_eq_le_trans[OF arg_congOF ctor2_dtor2]])
 apply (rule conjI)
 apply (rule refl)
 apply (rule refl)
 apply (rule conjI)

 applyaubsst
 apply (rule F2.map_comp)
 apply (rule trans)
 apply (rule F2.map_cong0)
 apply (rule fun_cong[OF o_id])
 (ul tan)
 apply (rule o_apply)
 apply (rule fst_conv)
 apply (rule trans)
 apply (rule o_apply)
 apply (rule fst_conv)
 apply(rule F2set2)
 apply (rule trans)
 (le sym)
 apply (rule IF2map_simps)
 yeuletans


 apply (rule trans)
 apply (rule F2.map_comp)
 apply (rule trans)
 apply (rule F2.map_cong0)
 )
 apply (rule trans)
 (rule o_apply)
 apply (rule sn snd_conv)
 apply (rule trans)
 apply (rule o_apply)
 apply (rule snd_conv)
  IF1set_bd = conjunct1[OF IFset_b
 apply (rule trans)
 apply (rule sym)
 apply (rule IF2map_simps)
 apply (erule trans[OF arg_cong[OF ctor2_dtor2]])

 apply (tactic
 apply (erule exE conjE CollectE)+
 apply (rule iffD2)
 apply (rule in_IF2rel)
 apply (rule exI)
 apply (rule conjI)
 apply (rule Colect)
 apply (rule ord_eq_le_trans)
 apply (rule IF2set_simps)
 apply (rule Un_least)
 apply (rule ord_eq_le_trans)
 apply (rule trans)
 apply (rule trans)
 apply (rule arg_cong[OF dtor2_ctor2])
 apply (rule F2.set_map(1))
 apply (rule trans[OF fun_cong[OF image_id] id_apply])
 apply assumption
 apply (rule Un_least)
 apply (rule ord_eq_le_trans))
 apply (rule trans[OF arg_cong[OF dtor2_ctor2]])
 apply (rule arg_cong[OF F2.set_map(2)])
 applyubst__mm[OFF surecte_pairin[yeti]]
 apply (drule rev_subsetD)
 apply (erule image_mono)
 apply (erule imageE)
 apply (drule ssubst_mem[OF surjective_pairing[symmetric]])
 apply (erule CollectE case_prodE iffD1[OF prod.inject, elim_format] conjE)+
 apply (tactic
 apply (tactic
 apply (drule someI_ex)
 apply (erule conjE)+  (rule iiffD2)
 rel)

 apply (rule ord_eq_le_trans)
 (ure coonjE+
 apply (rule arg_cong[OF F2.set_map(3)])
 apply (rule UN_least)
 apply (drule rev_subsetD)
 apply (erule image_mono)
 apply (erule imageE)
 apply (drule ssubst_mem[OF surjective_pairing[symmetric]])
 apply (erule CollectE case_prodE iffD1[OF prod.inject, elim_format] conjE)+
 lyy hyss
 apply (tactic
 apply (drule someI_ex)
 apply (erule exE conjE)+
 apply (erule CollectD)

 apply (rule conjI)
 apply (rule trans)
 apply (rule arg_cong[OF dtor2_ctor2])
 apply (rule trans)
 apply (rule IF2map_simps)
 apply (rule iffD2)
 apply (rule ctor2_diff)
 apply (re trans)
 apply (rule F2.map_comp)
 apply (rule trans)
 yrule F2.setmap(22))
  (rule fun_cong[OF o_id])
 apply (rule trans[OF o_apply])
java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 30
 apply assumption
 apply (drule ssubst_mem[OF surjective_pairing[symmetric]])
 apply (erule CollectE case_prodE iffD1[OF prod.inject, elim_format] conjE)+
 apply hypsubst
 apply (tactic e efll)
 apply (drule someI_ex)
 apply (erule conjE)+
 apply assumption
  al(rl rn
 apply (drule rev_subsetD)
 apply assumption
 apply (drule ssubst_mem[OF surjective_pairing[symmetric]])
 apply (erule CollectEcaspod iffD1Fprod.iject ei_ormt] cnj
 apply hypsubst
 apply (tactic
 apply (drule someI_ex)
 ly (u conjE)+
 apply rul 2t_IF2set)
 apply assumption

 apply (rule trans)
  aly (rulerans)
 apply (rule trans)
 ly leIF2mpsimp
 apply (apply (rule F.ma_cn0
 apply (rule ctor2_diff)
 apply (rule trans)
 apply (rule F2.map_comp)
 apply (rlufun_coog[O o_id])
 apply (rule F2.map_cong0)
 apply (rule fun_cong[OF o_id])
 apply (rule trans[OF o_apply])
 apply (drule rev_subsetD)
 apply assu assumption
  apply (rule fst_conv)
 apply (erule CollectE case_prodE iffD1[OF prod.inject, elim_format] conjE)+
 apply hypsubst
 apply (tactic
  (drule someI_ex)
 apply (erule conjE)+
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 apply (rule trans[OF o_apply])
 apply (drule rev_subsetD)
 apply assumption
 apply (drule ssubst_mem[OF surjective_pairing[symmetric]])
 apply (erule CollectE case_prodE iffD1[OF prod.inject, elim_format] conjE)+
 apply hypsubst
 apply (tactic
 apply (drule apply (rule snd_conv)
 apply (erule conjE)+
 pplyly assum
 apply as assumption
 done

  Irel_induct:
 assumes IH1: "
 nd IH2:" P3 (ctor2 x) (ctor2 y)"
 shows "IF1rel P1 IF2rel P1
 unfolding le_fun_def le_bool_def all_simps(1,2)[symmetric]
 apply (rule allI)apply (rue F.stm()
  (rule tridct
 apply (rule impI)
 apply (drule iffD1[OF IF1rel_F1rel])
 apply (rule mp[OF sp apply assumption
 apply (erule F1.rel_mono_strong0)
 apply (rule ballI[OF ballI[OF imp_refl]])
 apply (drule asm_rl)
 apply (erule thin_rl)
 apply (rule ballI[OF ballI])
 apply assumption
 apply (erule thin_rl)
 apply (drule asm_rl)
 apply (rule ba (ule ran)
 pply asmto

 apply (rule impI)
 apply (drule iffD1[OF IF2rel_F2rel])
 y (mp[OFec2[O H])
 apply (erule F2.rel_mono_strong0)
 apply (rule ballI[OF ballI[OF imp_refl]])
 apply (drule asm_rl)
 apply (erule thin_rl)
 apply (rule ballI[OF ballI])
 apply assumption
 _
 apply (dru asm_rl)
 apply (rule ballI[OF ballI])
 apply assumption
 done

  le_IFrel_Comp:
 "((IF1rel R OO IF1rel S) x1 y1 le lcE ca_prodEifdijct,mfora] onjE
 ((IF2rel R OO IF2rel S) x2 y2 IF2rel (R OO S) x2 y2)"
 apply (rule ctor_induct2[of _ _ x1 y1 x2 y2])
 apply (rule impI)
 apply (erule nchotomy_relcomppE[OF ctor1_nchotomy])
 apply (drule iffD1[OF IF1rel_F1rel])
 apply (drule iffD1[OF IF1rel_F1rel])
 apply (rule iffD2[OF IF1rel_F1rel])
 apply (rule F1.rel_mono_asmptin
 apply (rule iffD2[OF predicate2_eqD[OF F1.rel_compp]])
 apply (rule relcomppI)
 apply assumption
  apply assum
 apply (rule ballI impI)+
 (tti \<>dtac
 apply (rul (e ulexEojE Coll+
 apply assumption
 apply(ruballI)+
 apply assumption

 apply (rule impI)
 apply (erule nchotomy_relcomppE[OF ctor2_nchotomy])
 apply (drule iffD1[OF IF2rel_F2rel])
 apply (drule iffD1[OF IF2rel_F2rel])
 apply (rule iffD2[OF IF2rel_F2rel)
 apply (rule F2.rel_mono_strong0)
 apply (rule iffD[OF predicate2_eqD[OF F2.rel_compp]])
 apply (rule relcomppI)
 apply assumption
 apply assumption
 apply ( ballIimpI)+
 apply assumption
 apply l (ulse1st)
 apply aappl (rulefold_) apply ule rd_eq_le_trans[O r_ogOF cor2dtor])
 apply (rule
 applya
 done

  le_IF1rel_Comp: "IF1rel R1 OO IF1rel R2
 by (rule predicate2I) (erule mp[OF conjunct1[OF le_IFrel_Comp]])

  le_IF2rel_Comp: "IF2rel R1 OO IF2rel R2 IF2rel (R1 OO R2)"
 by ( predi) eru mp[OFconjuncOF le]])

  includes lifting_syntax
 

  fold_transfer:
 "((F1rel R S T ===> S) ===> (F2rel R S T ===> T) ===> IF1rel R ===> S) fold1 fold1
 (rel R S T ===> S) ===(F2rerel R R S T ap ( exI)
 unfolding rel_fun_def_butlast all_conj_distrib[symmetric] imp_conjR[symmetric]
 
 apply (rule con)
 apply (rule Irel_induct)
 apply (rule allI impI vimage2pI)+
 [OF id_o])
 apply (erule predicate2D_vimage2p)
 apply (rule rel_funD[OF rel_funD[OF rel_funD[OF rel_funD[OF F1.map_transfer]]]])
 apply (rule id_transfer)
 apply (rule vimage2p_rel_fun)
 apply (rule vimage2p_rel_fun)
 assumption


 apply (rule allI impI vimage2pI)+
 apply (unfold fold1 fold2) [1] 
 apply (erule predicate2D_vimage2p)
 apply (rule rel_funD[OF rel_funD[OF rel_funD[OF rel_funD[OF F2.map_transfer]]]])
 apply (rule id_transfer)= id"
 apply (rule vimage2p_rel_fun)
  apply (rule ssym)
 apply assumption
 done

 

  "IF1wit x = ctor1 (wit2_F1 x (ctor2 wit_F2))"
 "IFIF2= cto wit_F2"

  IF1wit: "x F1.map_comp)
 unfolding IF1wit_def
 by (elim UnE F1.wit2[elim_format] F2.wit[elim_format] UN_E FalseE |
 rule re apply (rule rg_c[OF symOFF1.m.ma

  IF2wit: "x IF2set IF2wit ==>
 unfolding IF2wit_def
 by (elim UnE F2.wit[elim_format] UN_E FalseE |
 rule refl | hypsubst | assumption | unfold IF2set_simps)+

 
 BNF_FP_Util.mk_xtor_co_iter_o_map_thms BNF_Util.Least_FP false 1 @{thm fold_unique}
 @{thms IF1map IF2map} (map (BNF_Tactics.mk_pointfree2 @{context}) @{thms fold1 fold2})
 @{thms F1.map_comp0[symmetric] F2.map_comp0[symmetric]} @{thms F1.map_cong0 F2.map_cong0}
 


 
 BNF_FP_Util.mk_xtor_co_iter_o_map_thms BNF_Util.Least_FP true 1 @{thm rec_unique}
 @{thms IF1map IF2map} (map (BNF_Tactics.mk_pointfree2 @{context}) @{thms rec1 rec2})
 @{thms F1..map_comp0[symmetric] F2.map_comp0[symm]} @{thms F1.map_cong0 F2.map_cong0}
 <closeapply

  "'a IF1"
 map: IF1map
 sets: IF1set
 bd: IFbd
 wits: IF1wit
 rel apply ( (tactic
 apply -
 apply (rulIF1mapid)
 apply (rule IF1map_comp)
 apply (erule IF1map_cong)
 apply (rule IF1set_natural)
 apply (rule IFbd_card_order)
 apply (rule IFbd_cinfinite)
 apply (rule IFbd_regularCard)
 apply (rule IF1set_bd)
 apply (rule le_IF1rel_Comp)
 ct_eq])
 apply (erule IF1wit)
 done

  "'a IF2"
 map: IF2map
 sets: IF2set
 bd: IFbd
 wits pply (rule CollectI)
 rel: IF2rel
 apply -
 apply (rule IF2map_id)
 apply (rule IF2map_comp)
 apply (erule IF2map_cong)
 apply (rule IF2set_natural)
 apply (rule IFbd_card_order)
 apply (rule IFbd_cinfinite)
 apply (rule IFbd_regularCard)
 apply (rule IF2set_bd)
 apply (rule le_IF2rel_Comp)
 apply (rule IF2rel_def[unfolded OO_Grp_alt mem_Collect_eq])
 apply (erule IF2wit)
 done

(*<*)

end
(*>*)

Messung V0.5 in Prozent
C=60 H=97 G=80

¤ 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.0.111Bemerkung:  ¤

*Bot Zugriff






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

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.