Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/Isabelle/Archive-of-Formal-Proofs/thys/LambdaMu/   (Sammlung formaler Beweise Version 2026-5©)  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
    VF1mapids2 2idd  V s1 1 java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
*)


section e_F2 + (bd_e_F22e2, b_tyF

(*<*)

theory
  imports dequivbd_F1 +c |UNIV :: (bd_type_F1, bd_type_F1, bd_type_F1) F1 set
egin(s_ordLeq_trans_der
(*>*)crx. |F1set2  o'"

unbundle cardinal_syntax

ML ])
notation BNF_Def.convol ()

java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
\begin{tabular1bd'_Cnotzr = nfinit_Czer[F F1d_Cininte]
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "macro" is null
  'b2 &=& ('a, 'b1, 'b2) F2
\end{tabular}

To 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}
\<close>

declare [[bnf_internals]]
bnf_axiomatization (F1set1: 'a, F1set2: 'b1, F1set3: 'b2) F1
  [wits: " a ==>f1 a1 a1 = g1 a1 \<and 
 for map: F1map rel: F1rel
  (F2set1: 'a'a, F2set2: 'b1, F2set3: 'b2) F2
 [wits: "('a, 'b1, 'b2) F2")
 for map: F2map rel: F2rel


  F1in :: "'a1 set ==>
 "F1in A1 A2 A3 open>rtac @{context} (@{(@{thmalg_def} RS iffD2) 1
  F2in : :"a1set 🚫
 " (rule alg_F1set[OF alg_m])

  F1maumptionn
 apply (rule trans)
 apply (rule F1.map_comp)
 unfolding o_id
 apply (rule refl)
 done

  F1in_mono23 = F1.in_mono[OF subset_refl]

  F1map_con subset_trans)
 F1map id g x = x"= x"
 apply (rule trans)
 apply (rule F1.map_cong0)
 apply (rule refl)
 apply (rule trans)
 
 apply assumption
 apply (rule sym)
 apply (rule id_apply)
 apply (rule trans)
 apply (erule bspec)
 apply assumption
 apply (rule syl (rule Collect_restrict)
 apply (rule id_apply)
 apply (rule F1.map_id)
 done

  F2map_comp_id: "F2map g1 g2 g3 (F2map id f2 f3 x) = F2map g1 (g2 o f2) (g3 o f3) x"
 apply (rule trans)
 apply (rule F2.map_comp)
 unfolding o_id
 apply (rule refl)
 done

  F2in_mono23 = F2.in_mono[OF subset_refl]

  F2map_congL: "\<apply erulesubset_trans)
 mption
 apply (rule trans)
 apply (rule F2.map_cong0)
 apply (rule r p(drulpp(rule Cool)
 apply(r trans)
 apply (erule bspec)
 applyassumpto
 apply (rule sym)
 apply (rule id_apply)
 apply (rule tr
 apply (erule bspec)
 apply assumption
 apply (rule sym)
 apply (rule id_apply)
 apply (rule F2.map_id)
 done


  trans)

  alg where
 "alg B1 B2 s1 s2 =
 umption

  alg_F1set: "[alg B1 B2 s1 s2; F1set2 x
 apply (tactic apply(drule mp) mp)
 apply (erule conj)+
 (erubspc S_ield)
 apply (rule CollectI)
 apply (rule conjI[OF subset_UNIV])
 apply (erule conjI)
 apply assumption
 done

 ply (erule conjE)+
 apply (tactic )
 apply (erule conjE)+
 apply (erule bspec)
 apply (rule CollectI)
 apply (rule conjI[OF subset_UNIV])
 apply (erule conjI)
 apply assumption
 done

  alg_not_empty:
 "alg B1 B2 s1 s2 ==> B1
 apply (rule conjI)
 apply (rule not
 apply (tactic
 apply (frule alg_F1set)

(* ORELSE of the following three possibilities *)


      ruleUn_least)
     applyapply assumption

    apply (rule subsetI)
    apply (drule F1rule)

**)
    apply (tactic assumption
    apply (tactic apply assuapply (drule mp)

 apply  (e underS_E)
 apply (erule F1.wit1 F1.wit2 F2.wit)

 apply (rule subsetI)
 apply (drule F1F1.wit1 F1.wit2 apply (drule mp)
 apply (erule FalseE)
    (**)


   apply (erule emptyE)

  apply(rule)
  apply (tactic  CollectI)
 apply (drule alg_F2set)

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

 apply (rule subset_emptyI) 
 apply (erule F1.wit1 F1.

 apply (e(erule emptyE)
 done


  UN_least)

  mor where
 "mor B1 B2 s1 s2 B1' B2' s1' s2' f g =
 (((a
 (()
 (\forall>z

  morE1: "[dr mp)java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
 ==>
 apply (tactic
 apply (erule conjE)+
 apply (erule bspec)
 apply assum
 

  morE2: "[mor B1 B2 s1 s2 B1' B2' s1' s2' f g; z UN_least)
 ==> allE)
 apply (tactic
 apply (erule co (r CollectI)
 apply (dule mp
 apply assum
 done erule underS_F)

  mor_incl: "\<I)))
 apply (tactic
 apply (rule conjI)

 apply (rule conjI)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 apply apply (erule (dru E2)
 apply (erule ssubst_mem[OF id_apply])

 apply(ru mp)
 apply (erule subsetD)
 apply le seD

 apply (rule conjI)
 apply (rule ballI)
  (rulconjE)+
 apply (rule id_ap)
 apply (tactic \applyn_oo3)
 apply (rule refl

 apply (rule ba don
 apply (rule trans)
 apply (ru id_apply)
 <>stac
 apply (rule refl)
 done

  mor_comp:
 "[ B2' s1 s2 f g; g;
  mor B1' B2' s1 s1's2'B1'' B2'' s1'' s2' apply (rul Collect_restrict)
 mor B1 B2 s1 s2 B1'')
 apply (tactic
 apply (tactic
 c
 apply (erule conjE)+
  apply ( (rlepp s

 apply (rule conjI)
 apply ( ballI)
 apply (rule ssubst_mem[OF o_apply])
 apply (erule bspec)
 apply (erule bspec)
 apply assu1s1 s2 ==>

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

 apply aapply (rule trans)
 apply (rule ballI)
 apply (rule trans[OF o_apply])
 apply (rule trans)
 pply rl rn)
 apply (drule bspec[rotated])
 apply assumption
 apply (erule arg_cong)
 apply (erule CollectE conjE)+
 apply (erule bspec)
 apply (rule CollectI)
 apply aapply (rrefl)
 apply (rule subset_UNIV)
 apply (rule conjI)
 apply (rule ord_eq_le_trans)
 apply (rule F1.set_map(2))
 apply (r(rule im image_subsetI)
 ply (eru bspe
 apply l (
 apply assumption
 apply (rule ord_eq_le_trans)
 apply (rule F1.set_map(3))
 apply (rule image_subsetI)
 apply (erule bspec)
 apply (erule subsetapp assumption
 apply assumption
 apply (rule arg_cong[OF F1map_comp_id])

 apply (rule ballI)
  tran
 apply (rule trans)
 apply (rule trans)
 apply (drule bspec[rotated])
 apply T
 apply (erule arg_cong)
 apply (erule CollectE conjE)+
 apply (erule bspec)
 apply (rule CollectI) 
 apply (rule conjI)
 apply (rule subset_UNIV)
 apply (rule conjI)
 apply (rule ord_eq_le_trans)
 apply (rule F2.set_map(2))
 apply (rule image_subsetI)
  (erule spe tit_type == "('a1,1, 'a11 ASuFFd_type, 'a1 ASucFbtype) F1 \<RightarrowRightarrowbd_ype"
 apply (erule subsetD)
 apply assumption
 apply (rule ord_eq_le_trans)
 apply (rule F2.set_map(3))
 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' B
 apply (tactic hyp_subst_tac @{context} 1 UNIV :
 apply assumption
 done

  mor_str:
 "mor UNIV UNIV (F1map id s1 s2) (F2map id s1 s2) UNIV UNIV s1 s2 s1 s2"
 apply (rule iffD2)
 apply (rule mor_def)
 apply (rule conjI)
 apply (rule conjI)
 apply (rule ballI)
 apply (rule UNIV_I)
 apply (rule ballI)
 apply (rule UNIV_I)

 apply (rule conjI)
 apply (rule ballI)
 apply (rule refl)
 apply (rule ballI)
 apply (rule refl)
 done


java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

  bd_type_F1' = "bd_type_F1 + (bd_type_F1, bd_type_F1, bd_type_F1) F1"
  bd_type_F2' = "bd_type_F2 + (bd_type_F2, bd_type_F2, bd_type_F2) F2"
 SucFbd_type cFdtype =ply ruleF2in_mnmono23)
  'a1 ASucFbd_type = "(SucFbd_type ==> ('a1 + bool))"

  "F1bd' bd_pply (rul ol_mono2)
  F1set1_bd_incr: "x. |F1set1 x| <o 
 by (rule ordLess_ordLeq_trans[OF F1.set_bd(1) ordLeq_c
  F1set2_bd_incr: " assumpton
 njI
  F1set3_bd_incr: "pion
 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_card_order_on]

  "F2bd'
  F2set1_bd_incr: "
 by (rule ordLess_ordLeq_trans[OF F2.set_b apply (rull)
  F2set2_bd_incr: "x. |F2set2 x| <apply 
 rulelLs_ordeq
  F2set3_bd_incr: "onjI)
 by (rule ordLess_ordLeq_trans[OF F2.set_bd(3) ordLeq_csum1[OF F2.bd_Card_order]])

  F2bd'_Card_order = Card_order_csum
 initeite = Cinfninite_csuu1[FF.bdCniie
  F2bd'_Cnotzero = Cinfinite_Cnotzero[OF F2bd'_Cinfinite]
  F2bd'_card_order = card_order_csum[OF F2.bd_card_order card_of_card_order_on]

 cFbdbd whr Scb <> 
 enjI)

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

  F1set2_bd: "|F1set2 x| < x cl>
 apply ecl[[bnf_intern]]
 apply (rule F1.set_bd(2))  (F1set1: 'a, F1set2: 'b1, F1set3: 'b2) F1
 applyple Colct_rect)
 apply (r [wits: "'a : "'a ==> ('a, 'b1, 'b2) F1" "'a ==>
 done

  Fset3_bd: "|F1se3 x| <oo +c bd_F2""
 apply (rule ordLess_ordLeq_trans)
 apply ( F1.et_bd(3)
 ule e odLeq_csum1)
 apply (rule F1.bd_Card_order)
 

 F2set1_bd:
 apply (rule ordLess_ordLeq_trans)
 apply (rule F2.set_bd(1))
 apply (rule ordLeq_csum2)
 apply (rule F2.bd_Card_order)
 done

  F2set2_bd: "|F2set2 x| <o bd_F1 +c bd_F2"
 apply (rule ordLess_ordLeq_trans)
 apply (rule F2.set_bd(2))
 apply (rule ordL_sm)
 apply (rule F2.bd_Card_order) le sstD)
 done

  F2set3_bd: "|F2set3 x| <o bd_F1 +c bd_F2"
 apply (rule ordLess_ordLeq_trans)
 apply (ruppply (rue F1in> F2i UIV (ccr_inidummy) (car_r_initt2dumy)).
 apply (rule ordLeq_csum2)
 apply (rule F2.bd_Card_order)
 done

  SucFbd_Card_order =p (rule ullc_etit
  SucFbd_Cinfinite = Cinfinite_cardSuc[OF Cinfinite_csum1[OF F1bd'_Cinfinite]]
  SucFbd_Cnotzero = Cinfinite_Cnotzero[OF SucFbd_Cinfinite]
  wo_SucFbd = = Card_orddrwOF ucFd_Card_odr
  ASucFbd_Cinfinite = Cinfinite_cexp[OF ordLeq_csum2[OF Card_order_ctwo] SucFbd_Cinfinite]


 <open 

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

abbreviation min_G1 whereopengebras
  "min_G1 As1_As2 i (j st (A1A j))"

abbreviation min_G2 where
  "min_G2 As1_As2 i : "a1 IIT" where


abbreviation min_H where

  "min_H s1 s2 As1_As2"II \\<equv {bs_IT ((1, 2) (s, s) B1 B2s 2 lB B 1s}"
    (min_G1 As1_As2 i 
    min_G2 ummyjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27

abbreviation min_algs where
  "min_algs s1 s2 e_I )


definition min_alg1 where

   (F1map id (\lambda:a1I<Rig> ppy (ue prprestrt))


definition min_alg2 where

  "min_alg2 s1apply ssumptionstr_init2mmy:')rulelIjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21

lemma min_algs:
  " \apply (rule s sym)
  apply (rule fun_cong[OF wo_rel.worec_fixpoint[OF worel_SucFbd]])
  apply (rule iffD2)
   apply (rule meta_eq_to_obj_eq)
   apply (rul(rule wo_rel.adm_wo_de[OF worel_Suc])
  apply ply(rule allI+
  apply (rule impI)

  apply (rule iffD2)
   apply (rule prod.inject)
   rrecon)

   apply (rule arg_cong2[of _ _ _ _ "(acticrtac @{  car_init2   🚫
    
     apply (rule refl)
    applyelectI applyactic<>_ acapply CollectII
     apply assumption
    apply (erule arg_cong fst_conv Abs_IIT_inverseOF]

   apply ((ruleg)
    apply(rule[of _  __ "F1in UNIV"apply assumption
     apply (rule
      apply (rule reflsumption
     apply (drule bspec)
      apply
     apply (erule arg_cong)
    apply (rule SUP_cong)
     apply (rule refl)
pplypec(ule
     apply assumption
    apply (erule arg_cong)
    apply ( refl)

  apply (rule arg_cong2[ofle
   apply (rule)
    apply (rule refl)
   apply (drule bspec)
     assumption
   apply (erule arg_cong)

  
   apply (rule arg_cong2[of _ _ _ _ "F2in UNIV" ( mor_cong
    apply (rule SUP_congulect_restrictjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
     apply (rule refl)
    apply (drule bspec)
     apply assumption
    apply (erule(uleerule    
   apply (rule SUP_cong)
    pply
   applyapply drule)
    apply assumption
   apply (erule arg_cong)
  apply (rule refltactic\open>tacF2in_mono23
  done

corollarygs1"<i> FelScb <> fst n_algs s1 s pply ass <open>rtac @{context} (@{thm mor_} RS iffD2) 1
  min_G1 (min_algs s1 s2) i 🚫
     a(erule alalg_F1)
  apply(ru trans)
   apply (erul
  apply (rule fst_conv)
  done

corollaryapply (ru ap (r) sym)
erule bspec)     (rue subset
    s2 ` (F2iruleollect_restrict)
  apply (rule trans)
   apply (erule arg_cong[OF min_algs])
  apply (rule snd_conv)
  done

lemmain_algs_mono1: "s_mono1
   tactic
  apply (rulemption
  apply (rule impI
  applyapplyrule
   apply (rule xt1(3
    apply (ule)
    apply (erule FieldI2
       (ord_eq_le_trans
   pply
   applyruleUN_Iapplytacticclosed
    apply ( erule)
    apply assumption"(ruleojI[OF sububseset_UNIUNV])
   apply a assumption
  apply (rule equalityD1)
  apply (drule notnotD)
  apply (erule arg_cong)
  done

lemma(eru bspec
  apply (tactic le connjI[OF su
  apply (rule allI)+
  apply (rule impI)
  apply (erule conjI)
   apply (rule xt1(3))
    apply (rul alglemm init:"seddummyy  pply ( leollectEconjEonjEjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
    RELSE  followinge sibilities)
     subsetI)
   apply (rule UnI1)
   apply (rule UN_I)
    apply (erule underS_I)
    apply assumption
   apply assumption
  applyy  ualityD1
  lydrule otnotD
  apply     apply ruleeubsetI
  one

lemma SucFbd_limit: "\<apply(rulele emptyE
 \<Longrightarrow> \<exists>y \<in> Field SucFbd. (x1 \<noteq> y 
  
  erule1wit1 1wit2apply lejava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
    B1 s2 ' B2 'min_al]java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
     apply\<Longrightarrow  1z  '
     uleiniteinsertI
     apply (     le
    apply (erule insert_subsetI)
    apply (erule insert_subsetI)
    applyule mpty_subsetIty_subsetI)
   apply (rule SucFbd_Cinfinite)
  apply (rule impI)(lerans)  ssumptionptionion
  apply (erule bexE)
  apply

   apply (rule conjI)

    ly(ulebspec)
    

   applyulebst_memm     pplymption
   apply (rule insertI2)
   applyinsertI1
  apply assumption
  done

lemma alg_min_alg: "alg (@context {hmF2.pplyassumptiontion
  apply (tactic \<open>rtac @{context} (thm lg_def ffD2D2 <close>
  applyapply (rule mp)
   apply (rule ballI)
   apply(rulelectI

   apply (rule bexEapplyruleonjIjI
     dSuc_UNION_Cinfinite
       apply (rule Cinfinite_csum1) (*TRY*)
       apply  conjI
      apply rule
_java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 22
    apply spec
     apply (ruleapplyesubset_UNIV
    apply (rule)
apply     ly llI

   apply (apply sumption
    apply apply     yulejava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
       apply (ruleuleallI
       apply (    apply    plye.)
      apply (rule min_algs_mono2(leOF@mf
     apply)
    apply (rule
     apply (rule onjI
    apply (rule ordLeq_csum1
    (1Card_order)

   apply (rule
    applymption leord_eq_le_trans
    apply (erule
  ssumption
   apply (rule subsetD ;=morB2
   apply erule
    pply
   ( thin_rl
    applyerule
    apply (erule thin_rl)
    apply (erule thin_rl)
    apply (erule
    apply (erule+ java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
    app
   apply(rule
    yulenit_unique_mor
ule
    applyapplyCollect_restrict
    rulerule)
   applye image_eqI
    apply (rule
   apply (rule CollectI<>ounds bd_type_F2 (bd_type_F2d_type_F2
   lyulel
   applyF1bd bd_F1
   apply (erulex. |F1set1 x| <o F1bd
   apply java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0

   apply (rule conjI)
   ply

    rulenjIule
plyjava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
(leetI
    apply (rule UN_I
      
     apply assumption
    applyassumption

   apply(le(elI
   apply (erule UN_upperule
   apply assumption

(**)

  apply (rule ballI
  apply (erulerule

  apply (rule bexE)
iteUNION_CinfiniteCinfinite
      apply(le
      lyjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 0
     applymin_algs_mono1applyule

    (esubset_trans     lyulejava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
   apply (rule)
    apply (rule ordLess_imp_ordLeq[OF F2set2_bd_incrdone
   apply 
   apply (rule rule

  apply (rule bexE morE1
yrulebd_Card_order
        applyCinfinite_csum1
      ly
      lemmaF2set2|

    apply (erule subset_trans[OF _ equalityD1( )
   apply rule
    apply (ruleule
   y done
   apply (rule

  apply applybd
   apply (rule
   apply (erule conjI'F2cFbd_Cnotzerote_Cnotzerobd_Cinfinitenfinitejava.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
   applyssumption
  apply (rule subsetD
  apply > n>   ifst
   applyulerl
   applyapplyg_min_alg
   apply (erule
   apply( thin_rl
   apply (erule thin_rlor1ctor1tr_init1ndefined(fl
   apply (erule thin_rl  \>2 in
   apply (erule
   apply     :
  apply (rule  _112<nion . min_algs
   apply (rule equalityD2)
   apply (rule min_algs2)
applyyumptionjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
  applyrule
  apply (rule min_algsrule
   apply (rule refl   apply (rule conjI)
  apply CollectI
  applyonjI
   

  apply ulelect_restricttrict
  apply (erule thin_rl
      )
  apply (erule conjE)
ply   rules_IF1_inverse
   apply(conjIalg_F1setOF
pply)
   (ederS_Iassumption
   apply ssumption

  apply (erule subset_trans( SUP_cong
  apply (rule UN_upperd_eq_le_trans[[ et_map)
 S_I
  apply assumption
  done

lemmas SucFbd_ASucFbd = (rule)
    ordLess_ctwo_cexp
    cexp_mono1dLeq_csum2csum2 rd_order_ctwo
    OFrule g_min_alg

lemmaCollectE
  fixes : "' 'c) F1  conjI)
  shows "
  ( |fst (min_algs)
 applyrule
  apply (rule impI)
  apply (rule SUP_cong
   apply(uleordIso_ordLeq_trans
    apply
    lyplyruleect_restrictct
   apply (rule Un_Cinfinite_bound)

     apply (rule defined UNIV

       apply( ordLess_imp_ordLeq
       apply (rule ordLess_transitive)
         fst_conv
         
        apply assumptionyerule
       min_algs( min_G1min_algsalgs

      apply  rulejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
      
      apply (drule mp)
       applye_split
      apply (drule
       enderS_Field
      apply (eruleassumption
      apply assumption

     applydruleeruleplyumption

    apply
     applyapplyule
    apply ( ruleAbs_IF2_inverse
     apply (rulec< @{context} @{thm iffD2[OF meta_eq_to_obj_eq[OF relChain_def]]} 1
    apply (rulein_algs2
     apply (rulejava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
      lyemono1 )
      applyotnotDcong nsjava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 20
      plyjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 0
          apply (applyAbs_IF1_inversenverseFsetD

            apply(le)
            apply (rulersesubsetD
             apply (rule
              apply java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 0
             apply assumption
            applyapply\existsg'g<>r 'f

           apply:alg1  (java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 24
           allE    yeconjI
           apply (drule 
            applyapply ardSuc_UNION_Cinfinite
           apply (drulemp
            applyapply
           apply (erule)java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
           apply assumption ordLeq_csum1

          apply(rule)1t

         rule)

           apply (rule ordLess_imp_ordLeq)
           apply (rule ordLeq_transitive
            apply (rule ordLeq_csum1e)etw_imp_surj_on)
             apply (rule SucFbd_Card_orderrule)
            apply assumption
 eSucFbd_ASucFbd

           rulege_mono
          apply ( ( thin_rl
          apply(rule)
           apply (eruleption
          applylectE
           apply (erulebsetDassumption
          apply ( UnI2) le__nij_betw_the_inv_into
           refl

         apply (rule ASucFbd_Cinfiniteapply)

        
       apply 
      (conjI

     apply (rule F1bd'_Card_order)
    (rule)
     apply (ule)
      apply
       pply    uleCollect_restrict
       apply (rule ordIso_transitive)
        apply (
           (rtac cardSuc_UNION_Cinfinite
           FIRST' [rtac F1bdCinfinite
           rtac @{context} @{thmonjI
           rtac @{context} @{thm Card_order_cexp ( ordLeq_transitive
           ule)
           [,
       apply (java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
        apply (rule ASucFbd_Cinfinite

        (    lyrule[ansqualityD11min_alg2_def]f
        applyord_eq_le_trans
        lyapply rule
ply
        applysubset_trans
       apply (rule
      apply (rule csum_absorb1)
       apply (rule ASucFbd_Cinfiniteapplyjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
      apply (rule ctwo_ordLeq_Cinfinite)
      applyule)
     apply (rule F1bd)
    applyrule)
    apply (rule

       apply (rule
       assumption
     apply (rule rule)
    apply (rule ordLeq_transitive)
     apply (rule ordLeq_csum1)
     pply
    apply (rule cardSuc_ordLeq)
    applyrulejava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21

   apply (rulele

   rule
   apply (rule card_of_ordIso_subst)
   applyle
  apply (rule Un_Cinfinite_bound

    apply (rule UNION_Cinfinite_bound)

      apply (rule
      apply (ruleapplyleetw_imp_surj_on
       apply (rule card_of_underS)
        apply (rule SucFbd_Card_order)
       apply assumption
      apply (rule SucFbd_ASucFbd)

     apply (rule ballI)
     llE
     plymp
      apply( morE1 leEjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
      rule
      apply (erule underS_Field)
     apply (erule
     apply assumption

    apply (rule ASucFbd_Cinfiniteapplylect_restrict

   applyordLeq_transitive
    apply (rule card_of_imageselect
   apply  ( ordLeq_transitiveapply (ellectI)estrict
    apply (rule F2.in_bd)
    ruletransitive
         java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
     pply
     apply rule
     em_cinfinite_bound
         apply(lepplye  bset_UNIVV

           apply (rule ordLess_imp_ordLeq)
           apply java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
            apply (rule card_of_underS)
             apply (rule SucFbd_Card_order)
            apply rulefold
           apply (ruleFbd

          apply (rule ballI)
          applyapplyleIjI
          apply (drule mp)
           apply (erule underS_E)
          pplyet_t
           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 (erule conjE
         apply assumption

        apply (rule ASucFbd_Cinfinite)

       apply (ruleapply (java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 0
      apply leCard_order
     apply (rule ASucFbd_Cinfinite(rule@{ly(erulep_restrictrict)

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

     apply (rule ordIso_transitive)
      apply (rule csum_cong1ule
      apply (rule ordIso_transitive)
       apply (tacticapply  ( conjI
           (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
           [1,2] eubset_UNIV
      apply (rule
       apply  ( trans

      apply (rule ordLeq_transitive)
java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 32
       apply (tactic  '\<longleftrightarrow>
      apply (rule ordLeq_cexp1)
SucFbd_Cnotzerod_Cnotzeronotzero)ro
      applyule)rder_csummjava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34

     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 )
      apply (rule Card_order_csum)
     apply (rule SucFbd_CinfiniteulejI
    apply (rule F2bd'_Cnotzero)
   apply (rule ordLeq_transitive)
    apply (rule ordLeq_csum2)
    apply (fixes s1: njI
   applyyerdSuc_ordLequc_ordLeqdLeq
   apply (rule Card_order_csum)

  apply (applyule conjIjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
  done

lemma card_of_min_alg1:
  fixes applyy lejava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 0
  
  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 SucFbd_Card_order)
lyle ballIIjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
    apply (rule SucFbd_ASucFbd)

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

lemmaard_of_min_alg2_f_min_alg2_alg2java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 22
  transsm _ply
  shows "|min_alg2 s1 s2| \done
  apply
   applyule onjI
  apply (rule

    uleply yssumptionionjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
     apply (rule card_of_Field_ordIso)
pplye)
    
    apply (rule SucFbd_ASucFbd)

   apply (rule ballI)
   apply (drule rev_mp)
    apply (rule card_of_min_algs)
   apply (erule conjE)+
   apply assumption
  apply( ucFbd_Cinfinite   applyrulejava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
  done

lemma least_min_algs "B12s1o_refl EN
   \inield ucFbdFbd\longrightarrowhtarrowarrowjava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
    fst (min_algs 
  apply (rule well_order_induct_imp[of _ "%iabbreviationclosed
  apply (rule impI)
  apply (rule conjI)
   apply (rule ord_eq_le_transe Leq_cexp1
    apply (erule min_algs1)
   apply (rule Un_least)
    apply (rule UN_leastleSucFbd_Cinfinite
    apply (erule allE)
    apply (drule mp)
     apply (erule underS_E)
    apply (drule mp)
     apply (erule underS_Field)
    uledLeq_transitiveransitiveive
    apply assumption
  applyrulemage_subsetIge_subsetI)
   apply (erule CollectE conjE)+
 lyeruleeg_F1sett

    apply (erule subset_trans)
    apply (rule UN_least)
    applyrulelE
    apply (drule mp)
     apply (erule underS_E)
    apply apply rule rd_of_underS_underS
     apply (erule underS_Field)
     ( )
    apply assumption

   ply eruleubset_transet_trans
   applyule _east
   pplyrulelE
   apply (drule mp)
    apply (erule underS_E)
  pplydrulep
    applyerulenderS_FieldrS_Field
   apply (erule conjE)+
       le conjIjIjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21

  ( )
   apply (erule min_algs2)
  apply (rule Un_least)
   apply ord_eq_le_transq_le_trans 
   apply (erule allE)
   apply (drule mp)
    apply (erule underS_E)
   apply (drule mp)
    apply (erule underS_Field)
   apply   conjEsubsetIjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
   apply assumption
  apply (rule image_subsetI)
  apply (erule CollectE conjE)+
  apply (erule alg_F2set)

   apply( 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    ruleUNIV_I
  apply (rule UN_least)
  apply (erule allE)
  apply (drule mp)
   apply ( underS_E)
  apply (drule mp)
   apply (erule underS_Field)
   ( subset_trans
  apply assumptionsum_mono1
  pule Itrans)

lemma (ule e dLess_imp_ordLeqordLeqLeq
   (rule _  applyruleeballIFrans
  apply (rule UN_leastssumptiontionjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
  erulep)
  apply (drule mp)
   apply assumption
  apply (erule conjE)+
  apply assumption
  done

lemma least_min_alg2: "alg B1 applyassumptionption
  apply (rule ord_eq_le_trans[OF min_alg2_def])
  
  applyuleeast_min_algss
  apply (drule mp)
   apply assumption
  apply (erule conjE)+
  apply assumption
  apply (rule CollectI)

lemma
  "alg B1 B2 s1 s2 \<Longrightarrow>
   mor (min_alg1 s1 s2) (min_alg2 s1 s2) s1 applyruleSucFbd_Cinfiniteinite
  \<existsf'_ong1
   applyrulee I)
  apply (erule least_min_alg2)
  one

subsection \<open>Initiality\<close>

text\<open>The following ``happens" to be the type (for our particular construction)
of the initial algebra carrier:\<close>

type_synonym 'a1 F1init_type = "( (ticapply  uleualityD1yD1
type_synonym 'a1 F2init_type = "('a1, 'a1 ASucFbd_type, 'a1 ASucFbd_type) F2 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

typedefeF1._))
  "UNIV ::
    ( cFbd_typesetapplyuleimage_mono
  by (rule exI) (rule UNIV_I)


applyset_map)

abbreviation II :: "'a1 IIT set" where
  "II \<equiv> {Abs_IIT ((B1, B2), (s1, s2)) |B1 B2 s1 s2. alg B1 B2 s1 s2}"
definition str_init1 where
  "str_init1 (dummy :: 'a1)
    (y(a1'a1 
    (i ::
      rule_min_algss
        (F1map id (\<lambda>f :: 'a1 IIT ASucFbd_Cinfinite
definition str_init2where
  "str_init2 (dummy :: 'a1) y (i :: 'a1 IIT) =
      snd (snd (Rep_IIT i)) (_)
abbreviation car_init1 where
  "car_init1 dummy \<equiv> min_alg1 (str_init1 dummy) (str_init2 dummy)"
abbreviation car_init2java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  "car_init2 dummy \<equiv> min_alg2 (str_init1 dummy) (str_init2 dummy)"

lemma alg_select:
  "\<forall>i \<in> II. alg (fst (fst (Rep_IIT i))) (snd (
                      (fst (snd (Rep_IIT i))) (snd (snd (Rep_IIT i)))"
  apply (rule ballI)
  apply (erule CollectE exE conjE)+
  apply (tactic \<open>hyp_subst_tac @{context} 1\<close>)
  unfolding fst_conv snd_conv Abs_IIT_inverse[OF UNIV_I]erulesubset_transjava.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
  apply assumption
  done

lemma mor_select:
  "\<lbrakk>i \<in> II; ( prop_restrictapply subset_transjava.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
     underS_Field
        (fst (snd (Rep_IIT i))) (snd (snd (Rep_IIT i))) UNIV UNIV s1'apply assumption
   (  (rule)
  apply (rule mor_cong)
    apply (rule sym)
    apply (rule o_id)
   apply (rulesym
   apply (rule o_id)
  apply apply (alg_F2set[OF])
   apply (tactic \<open>etac @{context} (Thm.permute_prems 0 1 @{thm mor_comp}) 1\<close>)
    ((erule)
   apply (rule conjI)

    apply (rule)
     apply (rule ballI)
     apply (erule bspec[rotated])
     apply (erule CollectE)
     apply java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21

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

    rule conjI)
    apply (rule ballI)
    ruleCollect_restrict

   apply (rule ballI)
   apply (rule str_init2_def)

  apply (rule mor_incl_min_algapply(eruleprop_restrict)
        (*alg_epi*)
least_min_alg2>B2"
  apply (uerde_e_trasOF in_2_d]
  apply (tactic \apply
  apply (rule conjI)
   apply (rule ballI)
   apply (erule CollectE conjE)+
   apply (rule CollectI)
   apply (rule ball)
   apply (frule bspec[OF alg_select])
   apply (r (rule ssub[OF str_init1_def])
   apply (erule alg_F1set)

    apply (rule ord_eq_le_trans)
     apply (rule F1.set_map(2))
    (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 " :
   apply
   
   apply


  ply
  "str_init1 (dummy _con
  apply rul Co
ply (rule ballI
  apply (frule bspec[OF alg_select])
  apply (rule ssubst_mem[OF str_init2_def])
  apply (erule alg_F2set)

    ord_eq_le_trans)
    
   apply (rule subset_trans)
    apply (erule image_mono)
    (rule iae_ollect_subseI)
   apply (erule bspec)
   apply assumption

  apply (rule ord_eq_le_trans)
   apply (rule F2.set_map(3))
  pply ( sub) mor_select:elet:
   apply (erule image_mono)
  apply (rule i fst sd(Rep_IIT i))
  apply (erule bspec)
  apply plaupin
  done

lemma init_unique_mor:
  "[
    r_t1
    mor (car_init1applyule
  f1 a1 = g1 a1
  applyapply(le
   apply (erule2or2plynjI
   applythin_rl(lejava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
t_min_alg1
 pply<open
   apply (rule (ans gL
    apply (rule ballI_gtor1_o_fold1
    apply ( (actic fun_cong
    apply (erule
    apply (rule

     apply (ruley(ballI
      apply (erule subset_trans)
      apply (rule Collect_restrict)
     apply (eruleapply ()
     apply (rule ord_eq_le_trans

     ij_betw_imp_surj_on]]
     apply (erule morE1)
     apply (ruleapply assumption
      applyrule)
       apply (rule
      apply Collect_restrict
     apply (rule CollectI)
     apply(ruleconjI
      apply assumption
     apply (rule
      apply
     apply assumption

    apply (rule trans)
      (leg_cong[1p_cong0
       apply (rule refl)
      apply (erule prop_restrict)
      apply
     apply (erule prop_restrict)
mption

    apply (rule sym)
     morE1
    apply (rule subsetD)
     apply (rulejava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 0
       (ollect_restrictt_restrict

    apply (rule CollectI)
Ijava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 22
     applyssumption
    apply (rule conjI)
     apply assumption
    apply assumption

   apply (ruleulein_alg
   apply (rule CollectI)
   apply (erule CollectE conjE)+
   apply (rule conjIapply     pplyct_restrict

    apply (rule alg_F2set       ulerictransF2map_comp_idmp_id])
     le
     apply (rule Collect_restrict)
    apply (eruled_apply
    apply (rule Collect_restrict)

   applyrans
    apply (erule morE2)
    apply (ruleumption
     apply (rule F2in_mono23)
      apply (rule Collect_restrict)
_strict
    apply (rule CollectI)
    apply (rule conjI)
     apply assumption
    apply
     apply assumption
    apply assumption

   pply g_F2setg_min_algg
    apply (rule arg_congt
      apply (rule refl)
     apply
     apply
    apply (eruletor2_nchotomyruleectEjE
    apply assumption

   apply (rule sym)
   apply (erule morE2)
   apply (rule subsetDuleeq_le_trans
    apply (rule F2in_mono23applyulemap_cong0s2fold1 oF1map id fst fst, s1>) (<ctor2 o F2map id(efl
     apply (rule Collect_restrict)
    apply (rule Collect_restrict)
   apply (rule CollectI
   apply (rule conjI E2
    apply assumption
   apply (rule conjI)
    apply assumption
   applyption


  yerule
  apply
  apply (rule least_min_alg2rop_restricttyD1
  apply (tactic 
 
 apply (rule ballI)
 apply (rule CollectI)
 apply (erule CollectE conjE)+
 apply (rule conjppp (rule t cjunct1[O_unialg2, of s1

 apply (rule alg_F1set[OF alg_min_alg])
 apply (erule subs alg_min_alg]
 apply (rule Collfold1_nfolded F.mp_cpp0[fif id, nfoldedd_o] F2.ap_comp[o, nfolde
 apply (erule subset_trans)
 apply (rule Collect_restrict)

 apply (rule trans)
 apply (erule morE1)
 lyyly asssumptiotion
 pply ly rule Finmo23)
 apply (rule Collect_restrict)
 apply (rule Collect_restrict)
 apply (e eexI)+

 apply assumption
 apply (rule conjI)
 apply assumption
 apply assumption

 apply (rule trans)
 apply (rule arg_cong[OF F(r Co
 apply (rule refl)
 
 applyasmto
 apply (erule prop_restrict)
 apply assumption

 setD)
 apply ((eru morE)
 apply (rule subsetD)
 apply (rule F1iapp(ruleClet)
 apply (rule Collect_ ap aa
 apply (rule Collect_restrict)
 le e Collec))
 pply(rle tras)
 apply assumption
java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 21
  suit)
 apply as

 apply (rule ballI)
 apply (rul
 apply (erule CollectE comorNV UI ctor1 cto2 UI UNIVs1 s2(fs B' f' g' B1 B2
 apply (rule conjI)

 applyap
 apply (erule subset_trans)
 apply (rule Collect_restrict
 apply (erule subset_trans)
 apply (rule Collect_restrict)

 apply (rule trans)
 apply (erule morE2)
 apply (rule subsetD)
 pply l 2nmn23)
 apply (rule Collect
 apply (rule Collect_restrict)
 apply (rule CollectI)
 applyrleClect
 apply assumption
 apply (rule conjI)
 apply assumption
 apply assumption

 apply (rule trans)
 apply (rule arg_cong[OF F2.map_cong0])
 apply (rule refl)
 apply erl rpretric)
 apply assumption
 apply (erule prop_restrict)
 (rubse

  (rue ubs_tas
 applyrcnI)
 apply (rule subsetD)
 apply (rule F2in_mono23)
 apply (rule Collect_restrict)
 apply (rule Collect_restrict)
 apply I
 apply (rule conjI)
 umptionto
 apply (rule conjI)
 apply assumption
 apply assumption


  closed where
 "closed dummy phi1 phi2
 (
 (x F2in UNIV (car_init1 dummy) (car_init2 dummy).
 (z \<in    

  init_induct: "closed dummy phi1 phi2 \<Longrightarrow    
 (x
 apply (rulempt
 apply (rule ballIapply rapl e uolling rec1_def rec2_def oo_appply old2d__nvonvol'
 apply (erule prop_restrict)
 apply (rule least_min_alg1)
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 0

 apply (rule conjI)
  (rlebalI)
 
 apply (erule CollectE conjE)+
 apply (rule conjI)

 apply (rule alg_F1set[OF alg_min_alg])
 apply (erule subset_trans)
 apply (rule Collect_restrict)
 apply (erule subset_trans)
 apply (rule Collect_restrict)

 apply (rule mp)
 applyap(rule c ly (ee conjEb"
 ply le ClleI) ulerop_esrict)
 apply (rule conjI)
 apply assumption
 apply (rl ififf1Fagc
 apply (erule subset_trans)
 apply (rule Collect_restrict)
 ply(rl ust_ras
 apply (rule Collect_restrict)

 apply (rule conjI)
 apply (rule ballI)
 apply (er (l opl)
 apply asdone
 apply (rule ballI)
 pply (e apply ((rule conjI)
 y assumptn


 apply (rule ballI)
 apply (rule CollectI)
 apply (erul rlee apy (rule aI
 apply ((rl F1stmp2) apassmptio

 pplyl (rl lg_F2ain applasummptoonjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
 apply (erule subset_trans)
 apply (rule Collect_restrict)
 apply (erule subset_trans)
 e i apppp (rue mofD1[OF arg_cong[OFF Rep_IF2inver])

 pply rule mp)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
 apply (erule bspec)
 apply (ruapp(rule conjnt)
 apply (rule conjI)
  apply (erule alg_F2set)
 apply (rule conjI)
 apply (erule subset_trans)
 apply (rule Collect_restrict)
 y (eule su subsppl (rue mor_Abs_ apply (ule subset_trans)
 apply (rule Collect_restrict)

 apply (rule conjI)
 (ul or_fold)
 apply (unfor_dr1_dfco2_ _apply
 apply assumption
 apply (rule ballI)
 apply a (rule ord_)
 apply assumption

 apply (rule ballI)
 apply (erule prop_restrict)
  (ru_mi_l2
 apply (tactic

 apply (rule conjI)
 ballI
 apply (rule CollectI)
 apply (erule CollectE conjE)+
 apply (rule conjI)

 (ule alg_F1set[OF alg_min_alg])
 apply (erule subset_trans)
 apply (rule Collect_restrict)
 apply (erule subset_trans)
 apply (rule Collect_restrict)

 apply (rule mp)
 apply (erule bspec)
 apply (rule CollectI)
 apply (rule conjI)
 apply assumption
 y (rule rulule conon
 apply (erule subset_trans)
 apply (rule Collect_restrict)
 apply (erule subset_trans)
 apply (rule Collect_restrict)

 
 apply (rule ballI)
 apply (erule prop_restr apply (rule imaeII)
 apply assumption
 apply (rule ballI)
 apply (erule prop_restrict)
 apply assumption


 apply (rule ballI)
 apply (rule CollectI)
 apply (erule Co2 = pointfree
 apply (rule conjI)

 _et[OFalg_min_a
 apply (erule subset_trans)
 apply (rule Collect_restrict)
 apply (erule subset_trans)
 apply (rule Collect_restrict)

 ( mp)
 apply (erule bspec)
 apply (rule CollectI)
 apply (rul c)
 apply assumption
 apply (rule conjI)
 apply (erule subset_trans)
 apply (rule Collect_restrict)
 apply (erule subset_trans)
 apply (rule Collect_restrict)

 apply (rule conjI)
 apply (rule ballI)
 apply (erule prop_restrict)
 apply assump apply (rule subsett)
 apply (rule ballI)
 apply (erule prop_restrict)
 apply assumption
 done


 

  (overloaded) 'a1 IF1 = "car_init1 (undefined :: 'a1)"
 apply (rule ord_eq_le_tra
 pply (ry ( x_in_n)
 apply (rule conju"rec1 s1 s2s1 = snd nd o f o l1 ctor1 o F1mapid fst fst, s1>) (<ctor2 
 apply (rule alg_not_empty)
 apply (rule alg_min_alg)
 done

  (overloaded) 'a1 IF2 = "car_init2 (undefined :: 'a1)"
 apply (rule (rule iffD2)
 apply (rule ex_in_conv)
 apply (rule conjunct2)
 apply (rule alg_not_empty)
 apply (rule alg_min_alg)
 done

  ctor1 where "ctor1 = Abs_IF1 o str_init1 undefined o F1map id Rep_IF1 Rep_IF2"
  ctor2 where "ctor2 = Abs_IF2 o str_init2 undefined o F2map id Rep_IF1 Rep_IF2"

  mor_Rep_IF:
 "mor (UNIV :: 'a IF1 set) (UNIV :: 'a IF2 set) ctor1 ctor2
 (car_init1 undefined) (car_init2 undefined) (str_init1 undefined) (str_init2 undefined) Rep_IF1 Rep_IF2"
 unfolding mor_def ctor1_def ctor2_def o_apply
 pplyl oj)
 apply (rule conjI)
 apply (rule ballI)
 apply (rule Rep_IF1)
 apply (rulebal)
 apply (rule Rep_IF2)

 apply ( (rule conjI
 apply (rule ballI)
 apply (rule Abs_IF1_inverse)
 apply (rule alg_F1set[OF alg_min_alg])
 apply (rule ord_eq_le_trans[OF F1.set_map(2)])
 apply (rule image_subsetI)
 apply (rule Rep_IF1)
 apply (rule ord_eq_le_trans[OF F1.set_map(3)])
 apply (rule image_subsetI)
 apply (rule Rep_IF2)

 apply (rule ballI)
 apply (rule Abs_IF2_inverse)
 apply (rule alg_F2set[OF alg_min_alg])
 apply (rule ord_eq_le_trans[OF F2.set_map(2)])
 apply (rule image_subsetI)
 apply (rule Rep_IF1)
 apply (rule ord
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
 apply (rule Rep_IF2)
 done

  mor_Abs_IF:
 "mor (car_init1 undefined) (car_init2 undefined)
 (str_iit1 undefined) str__init2 undefined) UNIV comr UNIV UNIV ctor1 ctctor2 UNIV r UNIV UNU ctor1 ctorr1 ctor2r22 UNIV UNIV s1 2 (f(snd f))"
 unfolding mor_def ctor1_def ctor2_def o_apply
 apply (rule conjI)
 apply (rule conjI)
 (ebaI)
 apply (erule exE)
 apply pply (rule somIof"%(f( : ' F \<Rightarrow 
 apply (rule UNIV_I)

 apply (rule conjI)
 apply (rule ballI)
 apply (erule CollectE conjE)+
 apply (rule sym[OF arg_cong[OF trans[OF F1map_comp_id F1map_congL]]])
 pplyly ((rule bllI[OF tr NIV UIss (fold1 s1 s2 (fol12"
 apply (erule Abs_IF1_inverse[OF subsetD])
 
  (c {context}@{thm Cllt}1 THN BN_tlCNJ_WRAP (K (rtac applpplyruule ev_
 applyapply (rule iff[OF r_ogOF Rep_IF2_nese]])
 apply assumption

  (rue allI)lI)
 
 apply (rule sym[OF ar 1\and> phi2 a2 b2"
 apply (rule ballI[OF trans[OF o_apply]])
 apply (erule Abs_IF1_inverse[OF subsetD])
 apply assumption appl (drule mea_sec22)
  lebll[Ftrns[ oaply]
 apply (erule Abs_IF2_inverse[OF subsetD])
 apply assumption
 done

  copy:
 "[
 f' g'. alg B1' B2' f' g'
 apply (rule ballI)
 apply (rule conjI)
 apply (ti
 apply (
 apply
 )
 apply (rule subsetD)
 apply (rule equalityD1)
 apply (erule bij_betw_imp_surj_on[OF bij_betw_the_i ctor1_o_dtor1: "ctor o dtor1 = id"
  dtor1_def
 apply (erule alg_F1set)
 apply (rule ord_eq_le_trans)
 apply (rue ..s_map())
 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 (ru (rulF1.set_map(3))
 apply (rule (ruletraF1..b_Cnfini
  (e image_mono)
 apply (rule equalityD1)
 apply (erule bij_betw_imp_surj_on)

 apply (rule ballI)
 apply (erule CollectE conjE)+
 apply (rule subsetD)
 apply (rule equalityD1)
 apply (erule bij_betw_imp_surj_on[OF bij_betw_the_inv_into])
 apply (rule imageI)
 apply (erule alg_F2set)
 apply (rule o_ql_rns)
 apply (rule F2.set_ IF2in wwher "IF2in A A
 apply (rule ballI)
 pply y ul imag_ono)
 apply rule eq apply (ru balI)
 
 apply (rule ord_eq_le_trans)
 apply (rule F2.set_map(3))
 apply (rule subset_trans)
 erule le image_mn
 apply (rul emmas ctor2_dor2 pnfr_id[Octr2o_do]
 apply (erule bij_betw_imp_surj_on)

 apply (tactic IF1set_simps:
 apply (rule conjI)
 leconjI)
 apply (erule bij_betwE)
 apply (erule bij_betwE)

 apply (rule cn
 apply (rule ballI)
 apply (erule CollectE conjE)+
 apply (erule f_the_inv_into_f_bij_betw)
 apply (erule alg_F1set)
 
 apply (rule F1.set_map(2))
 apply (rule subset_trans)
 OFoascsmmmetric] rans[OF aog2[oof __ _ o)"F refl
 apply (rule equalityD1)
 apply (erule bij_betw_imp_surj_on)
  a
 apply (rule F1.set_map(3))
 apply (rule subset_trans)
 apply (erue age_moono)
 plyy (ruleequaly1
 apply (erule bij_betw_imp_suronvol_xpandsnd[OF fs_e1ar convol_expadsdO s_rec2pir] ..

 apply (rule ballI)
 
 apply (erule f_the_inv_into_f_bij_betw)
 apply (erule alg_F2set)
 apply (rule ord_eq apply (rule id_apply)
 apply (rule F2.set_map(2))
 apply (rule subset_trans)
 apply (erule image_mono)
 apply (rule equalityD1)
 apply (erule bij_betw_imp_surj_on)
 ly(rule ode_etran)
 apply (rule F2.set_map(3))
 apply appl (ererull argccong2[of _ _ _ _ BNFDef.con, rfl]
 apply (erule image_mono)
 
 apply (erule bij_betw_imp_surj_on)
 done

  init_ex_mor:
 "f g. mor UNIV UNIV ctor1 ctor2 UNIV UNIV s1 s2 f g"
 in_alg1 ss app ul fo_q)
 ex_bij_betw[OF card_of_min_alg2, of s1 s2])
 apply (erule exE)+
 apply (rule revapply (r apumption
 apply (rule copy[OF alg_min_alg])
 apply assumption
 applyply asupin
 apply (rule impI)
 apply (erule exE conjE)+

 apply (rule exI)+
 apply (rule mor_comp)
 apply (rule mor_Rep_IF)
 apply (rufD2agcn[Fmr1OF morAsI]]
 ly (ru ly assumtion
 apply (rule exI)+
 apply (rule conjI)
 pply (ruerel
 apply assumption
 unfolding heIF1map"IF1a d=i"
 apply (erule mor_comp)
 apply (rule mor_incl)
 apply (rule subset_UNIV)
 apply (rule subset_UNIV)
 done

 

  fold where
 "fold s1 s2 (SOME f. mor UNIV UNIV ctor1 c rule eta_mp apply (rue arg_ng[OF s ym[OF F

  fold1 where "fold1 s1 s2 = fst (fold s1 s2)"
  fold2 where "fold2 s1 s2 a (dule rev_subsetD)

  mor_fold:
 "mor UNIV UNIV ctor1 ctor2 UNIV UNIV s1 s2 (fold1 s1 s2) (fold2 s1 s2)"
 unfolding fold1_def fold2_def
 apply (rule rev_mp)
 uleinte_mor
 assumption
 apply (erule exE)
 
 apply (rule someI[of "%(f :: ('a IF1 \    (ru
 mor UNIV UNIV ctor1 ctor2 UNIV UNIV s1 s2 (fst f) (snd f)"])
 apply (eru apply (rule surj_funeq) 
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6

 
 val fold1 = rule_by_tactic @{context}
 rtac @c@conte} @{ @{thm CollectII} 1THN BFUil.CONJ_RAP K (rac @
 @{thm morE1[OF mor_fold]}

 val fold2 = rule_by_tactic @{context}
 (rtac @{context} @{thm CollectI} 1 THEN BNF_Util.CONJ_WRAP (K (rtac @{context} @{thm subset_UNIV} 1)) (1 upto 3))
 @{thm morE2[OF mor_fold]}
 


  fold1:
 "(fold1 s1 s2) (ctor1 x) = s1 (F1map id (fold1 s1 appasm
 apply (rule morE1)
 apply (rule mor_fold)
 apply (rule CollectI)
 apply (rule conjI)
 apply (rule subset_UNIV)
 apply (rule conjI)
 apply (rule subset_UNIV)
 apply (rule subset_UNIV)
 done

  fold2:
 "(fold2 s1 s2) (ctor2 x) = s2
 apply (rule morE2)
 apply (rul mor_fol)
 apply (rule CollectI)
 apply (rule conjI)
 apply (rule subset_UNIV)
 apply (rule conjI)
 apply (rule subset_UNIV)
 apply (rule subset_UNIV)
 done

 
 f o s1 = s1' o F1map id f g
 apply (rule iffI)
 apply (rule conjI)
 apply (rule ext)
 apply (rule trans)
 apply (rule o_apply)
 apply (rule t(rule trans)
 apply (erule morE1)
 apply (ruleCollectI)
 apply (rule conjI)
 apply (rule subset_UNIV)
 apply (rule conjI)
 apply (rule subset_UNIV)
 apply (ru asssumptin
 apply (rule sym[OF o_apply])

 apply (rule ext)
 apply (rule trans)
 apply (rule o_apply)
 apply (rule trans)
 apply (erule morE2)
 apply (rule CoCollect)
 apply (rule conjI)
 
 apply (rule conjI)
 apply (rule subset_UNIV)
 apply (rule subsetUNIV)
 apply (rule sym[OF o_apply])

 apply (tactic
 apply (rule conjI)
 apply (rule conjI)
 apply (rule ballI)
 apply (rule UNIV_I)
 apply (rule ballI)
 apply (rule UNIV_I)
 apply (erule conjE)
 apply (drule iffD1[OF fun_eq_iff])
 apply (drule iffD1[OF fun_eq_iff])
 apply (rule conjI)
 apply (rule ballI)
 apply (erule allE)+
 apply (rule trans)
 apply (erule trans[OF sym[OF o_apply]])
 apply (ru
 apply (rule ballI)
 apply (erule allE)+
 apply (rule trans)
 pply (erueta[FsmO o_apply]])
 apply rule oapply)
 done

  fold_unique_mor: "mor UNIV UNIV ctor1 ctor2 UNIV UNIV s1 s2 f g ==>
  IF1map_simps = o_eq_destOF IF1mp]
 apply (rule conjI)
 apply (rule surj_fun_eq)
 apply (rule type_definition.Abs_image[OF type_definition_IF1])
 apply(ueblI
 apply (rule conjunct1)
 apply (rule init_unique_mor)
 apply assumption
 apply (rule Rep_IF2)
 apply (rule mor_comp)
 apply (rule mor_Abs_IF)
 apply assumption
 
 apply (rule mor_Abs_IF)
 apply (rule mor_fold)

 apply (rule surj_fun_eq)
 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 assumption
 apply (rule mor_comp)
 apply (rule mor_Abs_IF)
 apply assumption
 apply (rule mor_comp)
 apply (rule mor_Abs_IF)
 r_fold)old)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

  fold_unique = fold_unique_mor[OF iffD2[OF mor_UNIV], OF conjI]

  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_UNIV subset_UNIV]]]]

  rtac @{context} (Thm.permute_prems 0 1 @{thm conjunct2[OF IFmap_unique]}) 1)

  ctor1_o_fold1 =
 trans[OF conjunct1[OF fold_unique_mor[OF mor_comp[OF mor_fold mor_str]]] foas[OFF oapy]
  ctor2_o_fold2 =
 trans[OF conjunct2[OF fold_unique_mor[OF mor_comp[OF mor_fold mor_str]]] fold2_ctor]

(* unfold *)

definition "dtor1 = fold1 (F1map id ctor1 ctor2) (F2map id ctor1 ctor2)"java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
definition "dtor2 = fold2 (F1map id ctor1 ctor2) applpply (rule trans[OF arg_[OFF1map_cmp]]


MLapply (ru trans[OF fold1])

ML

lemma ctor1_o_dtor1: " tor1 =
 unfolding dtor1_def
 apply (rule ctor1_o_fold1)
 done

  ctor2_o_dtor2: "ctor2 o dtor2 = id"
 oldingding do2e
 apply (rule ctor2_o_fold2)
 done
  dtor1_o_ctor1: "dtor1 o ctor1 = id"
 apply (rule ext)
 apply (rule trans[OF o_apply])
 apply (rule trans[OF fun_cong[OF dtor1_def]])
 apply (rule trans[OF fold1])
 apply (rule trans[OF F1map_comp_id])
 apply (rule trans[OF F1map_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_o_ctor2: "dtor2 o ctor2 = id"
 apply (rule ext)
 apply (rule trans[OF o_apply])
 apply (rule trans[OF fun_cong[OF dtor2_def]])
 apply (rule trans[OF fold2])
 apply (rule trans[OF F2map_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_appl
 done

  pointfree_idE[OF dtor1_o_ct]
  dtor2_ctor2 = pointfree_idE[OF dtorlapply (rule ext)
  ctor1_dtor1 = pointfree_idE[OF ctor1_o_dtor1]
  ctor2_dtor2 = pointfree_id

  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]
  dtor1_diff = inj_eq[OF inj_dtor1]
  dtor1_cases = exE[OF dtor1_nchotomy]
  bij_dtor2 = o_bij[OF ctor2_o_dtor2 dtor2_o_ctor2]
  inj_dtor2 = bij_is_inj[OF bij_dtor2]
 lemma IF1set: "IF1set o ctor1 = IF1col o (F1map id IF1set IF2set)"
  dtor2_nchotomy = surjD[OF surj_dtor2]
  dtor2_diff = inj_eq[OF inj_dtor2]
  dtor2_cases = exE[OF dtor2_nchotomy]

  = o_bij[OF dtor1_o_ctor1 ctor1_o_dtor1]
  doneone
  surj_ctor1 = bij_is_surj[OF bij_ctor1]
  ctor1_nchotomy = surjD[OF surj_ctor1]
  ctor1_diff = inj_eq[OF inj_ctor1]
 r1_cases = exE[[OF ctor1_chototomy]
  bij_cto= o_bij[OF dtor2_o_ctor2 ctor2_o_dtor2]
  inj_cle trans[OF arg_cng[OFp_comomp]])
  surj_ctor2 = bij_is_sur ule sy[OF o_ppl])
  ctor2_nchotomy = surjD[OF surj_ctor2]
  ctor2_diff = inj_eq[OF inj_ctor2]
  ctor2_cases = exE[OF ctor2_nchotomy]

 \<<open

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

  fold1_o_ctor1: "fold1 s1 s2
 by (tactic rule trans[OF o_eq_dest[OF IF2set]])
  fold2_o_ctor2: "fold2 s1 s2 rIF"
 by (tac (tactic

 fst_rec1_pair =
 trans[OF conj[OF fold_unique[OF
 trans[OF o_assoc[symmetric] trans[OF arg_cong2[of _ _ _ _ "(o)", OF refl
 trans[OF fold1_o_ctor1 convol_o]]], OF trans[OF fst_c
 trans[OF o_assoc[symmetric] trans[OF arg_cong2[of _ _ _ _ "(o)", OF refl
 trans[OF fold2_o_ctor2 convol_o]]], OF trans[OF fst_convol]]]]
 fold1_ctor, unfolded F1.map_comp0[of id, unfolded id_o] F2.map_comp0[of id, unfolded id_o] o_assoc,
 OF refl refl]
  fst_rec2_pair =
 trans[OF co[OF fold_unique[OF
 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]]
 trans[OF o_assoc[symmetric] trans[OF arg_cong2[of _ _ _ _ "(o)", OF refl
 trans[OF f fold2_o_ctor2 cvl_o]]], OF tran[OF f_convl]]
 fold2_ctor, unfolded F1.map_comp0[of id, unfolded id_o] F2.map_comp0[of id, unfolded id_o] o_assoc,
 OF refl refl]

 : "rec1 s1 s2 (ctor1 x) = s1 (F1m id (<id,lemm F2set2_IF2set = subset_trans[[OF UN_upper subset_trans[OF Un_upper1 xt1 xt1()[OF IF2set_sips Un_upper2]]]]]
 unfolding rec1_def rec2_def o_apply fold1 snd_convol'
 convol_expand_snd[OF fst_rec1_p] convol_expand_snd[OF fst_rec2_] ..

  rec2: "rec2 s1 s2 (ctor2 x) = s2 (F2map id (<id, IF1set x x \<subseteq 
 unfolding rec1_def rec2_def o_apply fold2 snd_convol'
 convol_expand_snd[OF fst_rec1_pair] convol_expand_snd[OF fst_rec2_pair] ..

 rec_unique:
 "f
 rule IF1sset_simps)
 foldingldinging e1e rec2de conol_exadsd[F st
 apply (rule fold_unique)
 apply (unfold convol_o id_o o_id F1.map_comp0[symmetric] F2.map_c
 F1.map_id0 F2.map_id0 o_assoc[symmetric] fst_convol)
 cong2[of _ _ _ _ "(
 apply (erule arg_cong2[of _ _ _ _ BNF_Def.convol, OF refl])
 done


  o_apply])

  ctor_induct:
 "[x. (\    (rule trans)
 \<>.
 phi1 a phi2 b"
 apply (rule mp)

 apply (rule impI)apply (rule refl)
  (erule conjE)
 apply (rule conjI)
 apply (rule iffD1[OF arg_cong[OF ROF Rep_IF1]])
 apply (erule bspec[OF _ Rep_IF1])
 apply (rule iffD1[OF arg_cong[OF Rep_IF2_inverse]])
 apply (erule bspec[OF _ Rep_IF2])
  (ru i init_induct)

 apply (rule conjI)

 apply (drule asm_rl)
 apply (erule thin_rl)
 apply (rule ballI)
 apply (rul (rule im
 apply (rule iffD2[OF arg_cong[OF morE1[OF mor_Abs_IF]]])
 apply assumption
 apply (erule CollectE conjE)+
 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 (rule equalityD1)
 apply (rule F1.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)
 pply rulule iffD1applyy (rule IF2set_t_simps)
 apply (erule bspec)
 apply (drule rev_subsetD)
 apply (rule equalityD1)
 apply (rule F1.set_map(3))
 apply (erule imageE)
 apply (tactic appapply (rule arg_cong[OF F2.set_map(2)])
 apply (rule ssubst_mem[OF Abs_IF2_inverse])
 apply (erule subsetD)
 apply assumption
 apply assumption

 apply assumption

 apply (erule thin_rl)
 apply (drule asm_rl)
 apply (rule ballI)
 apply (rule impI)
 apply (rule iffD2[OF arg_cong[OF morE2[OF mor_Abs_IF]]])
 apply assumption
 (erule Collec c)+
 apply (apply (rule F2.set_map(1))
 apply (dru meta_mp)
 apply (rule iffD1[OF arg_cong[OF Rep_IF1_inverse]])
 apply (erule bspec)
 apply (drule rev
 apply (rule equalityD1)
 apply (rule F2.set_map(2))
 apply (erule imageE)
 apply (tactic
 apply (rule ssubst_me
 (erule subsetD)
 apply assumption
 apply assumption

 
 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
 apply (rule ssubst_mem[OF Abs_IF2_inverse])
 apply (erule subsetD)
 apply assumption
 apply assumption

 apply assumption
 

  ctor_induct2:
 "\    (rule b ballI)
 (
 2 x 🚫
 (e ym)
 phi1 a1 b1 )
 apply (rul(rule _apply)l)
 apply (rule ctor_induct[of "%a1. (
 apply (rule allI[OF conjunct1[OF ctor_induct[OF asm_rl TrueI]]])
 apply (drule meta_spec2)
 apply (erule thin_rl)
 ply (tactic
 apply (drule meta_spec)+
 apply (erule meta_mp[OF spec])
 apply assumption
 apply (drule meta_mp)
 apply (drule meta_spec)+
 apply (eru (erule meta_mpOF spec])
 apply assumption
 apply assumption

 apply (rule allI[OF conjunct2[OF ctor
 apply (erule thin_rl)
 apply (drule meta_spec2)
 apply (drule meta_mp)
  druul meta_spec)+ctor1[OFl
 
 apply assumption
 apply (erule meta_mp)
 apply (drule meta_spec)+
 ulere_sust)
 apply assumption

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


 

 

 apply ras)
  IF2map where "IF2map f fold2 (ctor1 o (F1map f id id)) (ctor2 o (F2map f id id))"

  IF1map:
 "(IF1map f) o ctor1 = ctor1 o (F1map f (IF1map f) (IF2map f))"
 apply (rule ext)
 apply (rule trans[OF o_apply])
 apply (rule traapply (erle re_subst)
 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 (rule trans[OF fold2])
 apply (rule trans[OF o_apply])
 apply (rule trans[OF arg_cong[OF F2map_comp_id]])
 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 trans)
 apply (rule sym[OF o_apply])
 done

 apply(rule trans[OF a[of _ _ IF1set, OF IF1map_simps] trans[OF IF1set_s]])
  IFor2_ = inj_eq[OF inj_ctor2]

  IFmap_unique:
 or1 apply (rul sym)sym)
 u = IF1map f v = IF2map f"
 apply (rule fold_unique)
 unfolding o_assoc[symmetric F1.map_comp0[symmetric] F2.map_comp0[symmetric] id_o o_id
 apply assumption
 apply assumption
 done

  IF1map_id: "IF1map id = id"
 apply (rule sym)
 apply (rule<openopen.assume_rule_tac @{context} 1
ifst fst s> (tr2 map i fst fst, s2>)"
 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 (rue tratrans)
 done

  IF2map_id: "IF2map id = id"
 apply (rule sym)
 apply ruecnu2[OF IFmapap_uniq
 apply (rule trans[OF id_o])
 apply (rule trans[OF sym[OF o_id]])
 apply (rule arg_cong[OF sym[OF F1.map_id0]])
  trns[OF ido])
 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 trans[OF o_apply])
 apply (rule 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])
 apply (ruext)
 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 (rule sym[OF o_apply])
 done

 : "IF2 ( o f) = ) = IF2map g o IF2m f"
 apply (rule sym)
 apply (tactic
 apply (rule ext)
 apply (rule trans[OF o_apply])
 apply (rule trans[OF o_applytrans[F o_assoc[symmetric] trans] trans[[OF argcong2[of _
 apply (rule trans[OF arg_cong[OF IF2map_simps]])
 apply (rule trans[OF IF2map_simps])
 apply (rule
 apply (rule sym[OF o_apply])
 apply (rule ext)
 apply (rule trans[OF o_apply])
 rule 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

  IFbd_card_order: "card_order IFbd"
 apply (rule card_order_csum)
 apply (rule F1.bd_card_order)
 apply (rule F2.bd_card_order)
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6

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

  IFbd_regulrlarCad Fbd"
 apply (rule regularCard)
 apply (rule F1.bd_Cinfinite)
 apply (rule F2.bd_Cinfinite)
 apply (rule F1.bd_regularCard)
 apply (rule F2.bd_regularCard)
 done

  IFbd_cinfinite = conjunct1[OF IFbd_Cinfinite]


 <>  bspec)

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


abbreviation IF1col (λ ( 
abbreviation IF2col where "IF2col ballI)


abbreviation IF1set where "IF1set F1set3_IF1set
abbreviation IF2set where "IF2set


abbreviation IF1in where "IF1in A  {x. IF1set x  A}"

abbreviation IF2in where "IF2in A  {x. IF2set x [OF.map_cong0

lemma IF1set: "IF1set o ctor1 = IF1col o (F1map id IF1set IF2set)"
  apply
  apply (rule trans[OF o_apply])
  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 (rule trans[OF o_apply])
  apply (rule trans[OF fold2])
  apply (rule sym[OF o_apply])
  done

theorem IF1set_simps:
  "IF1set (ctor1 x) =(* Autho

_

  apply (rujava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

   apply (rule trans[OF F1.set_map(1) trans[OF fun_cong[OF image_id] id_apply]])

  apply(r rg_cong2o.assume_rule_tac @{conteext} 1\lose)

post(x ::== e

  apply (rstr x :::= {} x:=e"
  done

theorem IF2set_simps:
  "IF2set (ctor2 x) = F2set1 x

  apply (rule nno a (WL b DO c) =
  apply (rule argcog2[f_ (<>"
     [2maptrans
ply (IF1setaIF1o  <and (y ::' IF2)|<o IFbd
    ses
  apply (rule g_cong3
  done

lemmasrip_eq_SKIP
lemmas = subset_trans[OF UN_upper subset_trans[OF Un_upper1 xt1(3)[OFrule F1set1_bdjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
lemmasF1setset_transtransF_2t1F set_simps]

lemmas
lemmas F2set2_IF2set = subset_trans[OF UN_upper subset_trans[OF Un_upper1 xt1lemmasapply (tactic
 F2set3_IF2setsub

 

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

 apply (rule trans)
 apply (rule image_co)
 apply (rule IF1set_simps)r
  rule reflrefl)
 apply (rule sym)
 apply (rule trans[OF arg_cong[of _ _ IF1set, OF IF1map_simps] trans[OF IF1set_simps]])

 apply (rule sym)
 apply (rul trans)
 apply (rule image_Un)
  (rule arg_[of _ _ _ "
 apply ( (rule sym)
 apply (rule F1.set_map(1))

 apply (rule trans)
 apply (rule image_Un)
 apply (rule arg_cong2[of _ _ _ _ "()"])
 apply (rule trans)
 apply (rule image_UN)
 apply (rule trans)
 apply (rule SUP_cong)
 apply (rule refl)
     apply (tactic \<open>Goal.assume_rule_tac @{context} 1\<close>) (* IH *)

    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
    apply(rule[F  arg_cong]]
   apply (rule transNF_Defrpct)(2snd
    apply (rule SUP_cong)
     apply (rule refl)
    apply (tactic  z. z IF1map fst z = x
 apply (rule sym)
 pply rns))
 apply (rule SUP_cong)
 apply (rule F1.set_map(3))
 apply (rule refl)
 apply (rule UN_simps(10))


 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 _ _ _ _ "()"])
 apply (rule sym)
 apply (rule F2.set_map(1))

 
 apply (ruleimage_Un)
 apply (rule arg_cong2[of _ _ _ _ "()"])

 apply (rule trans)
 apply (rule image_UN)
 apply (rule trans)
 apply (rule SUP_cong)
 apply (rule refl)
    apply (tactic \<open>Goal.assume_rule_tac @{context} 1\<close>) (* IH *)

   apply (rule sym)
   apply (rule trans)
    apply (rule SUP_cong)
     apply (rule F2.set_map(2))
    apply (rule refl)
   apply (rule UN_simps(10))

  applyapplyule
   apply (rule image_UN)
  apply (rule trans)
   apply (ruleOFjava.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
    apply (rule refl)
   apply    apply(drule)
  apply (rule uleetI)
    y  ulellectI
       pply
    apply (rule F2.set_map(3))
   apply (rule refl)
  apply (rule UN_simps(10))
  done

theorem IF1set_natural: "IF1set o (IF1map f) = image f o IF1set"
  apply ext
  apply (rule trans)
   applyeo_apply
  apply (rule sym)
  apply (rule trans)
   apply (rule o_apply)
  apply (rule conjunct1)
  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  done

theorem IF2set_natural: java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  apply (rule
  apply (rule trans)
   apply (rule o_apply)
  apply ( sym
  apply (rule trans)
   apply (rule o_apply)
  apply (rule
  apply (rule IFset_natural)
  done

lemma IFmap_cong:
  "((.(2))

   ((a IF2set y. f a = g a(pply (rule UN_simps(10))
  apply (rule ctor_induct[of _ _ x y])

   apply (rl imppI)
   apply (rule trans)
    apply (ueIFapsms)
   apply (rule trans)
    apply (rule arg_cong[OF F1.map_cong0])
      apply (erule bspec)
      apply (erule re apply (d(druesomeex)oalassume_rule_tac @{context} 1
      apply (rF1set1Fset)
     apply (rule mp)
      apply (tactic F2set_m
     apply (rule ballI)
     apply (erule bspec)
     apply (erule rev_subsetD)
     apply (erule F1set2_IF1set)
    apply (rule mp)
     apply (tactic
    apply (rule ballI)
    apply (erule bspec)
    apply (erule rev_subsetD)
    apply (erule F1set3_IF1set)
   apply (rule sym)
   apply (rule IF1map_simps)

  apply rl im)
  apply (rule trans)
   apply (rule IF2map_simps)
java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 20
   apply (rule arg_cong[OF F2.map_cong0])
     apply (erule bspec)applyeruleClet aepoEifD1[od.inet lmforma] cojE)
     pply (erule lervsbeD
     apply (rule (upyle conjI)
    apply (rule mp)
     apply (tacapplye co)+
    apply (rule ballI)
    apply (erule bspec)
    apply (erule rev_subsetD)
    apply (erule F2set2_IF2set)
   apply (rule mp)
    apply (tactic \< le
   (rule ballI)
   apply (erule a (rule trtrans)
   apply apapply (rule IF1)
   apply (erule F2set3_IF2set)
  apply (rule sym)
  apply (rule IF2map_simps)
  apply (erule bspec)

theorem IF1map_cong:
  " )
 apply (rule mp)
 apply (rule conjunct1)
 apply (rule IFmap_cong)
 apply (rule ballI)
  r ras[F oapy)
 done

 
 "(
 apply (rule mp)
 apply (r(rule F1.set_t_mmap(3))
 apply (rule IFmap_cong)
 apply (rule ballI)
 apply (tactic
 done

  IFset_bd:
 "|IF1set (x :: 'a IF1)| <o  (ruexI)
 applyly (ule conjI)

  app(rule CollecI
 apply (rule card_of_ordIso_subst)
 apply (rule IF1set_simps)
 apply (rule Un_C)
 apply (rule F1set1_bd)
 apply (rule Un_Cinfinite_bound_strict)
 apply (rule regularCard_UNION_bound)
 apply (rule IFbd_Cinfinite)
 apply (rule IFbd_regularCard)
 apply (rule F1set2_bd)
      apply (tactic \<open>Goal.assume_rule_tac @{context} 1\<close>) (* IH *)

     apply
        apply le
       apply (ruleapply (rule
      apply (rule
     n>ume_rule_tac> (* IH *)
    apply )
   applyIFbd_Cinfinite

  apply (rule ordIso_ordLess_transle
   apply ( IF1map_cong:
   apply (rule\And IF1set x ==>rd_eq_le_trans[g_cong 2
  apply (le
    apply (rule F2set1_bd)
   applyule
     apply
        apply (rule
       apply (rule IFbd_regularCard)
      apply (rule F2set2_bd)
     apply (tactic 
 
 apply (rule IFbd_Cinfinite)
 apply (rule IFbd_regularCard)
 apply (rule F2set3_bd)
    apply (tactic \<open>Goal.assume_rule_tac @{context} 1\<close>) (* IH *)

   applyapply(rg_cong
  apply (rule IFbd_Cinfinite
  done

lemmasapply(rule F2set1_bd
lemmas IF2set_bd = conjunct2[OF IFset_bd]

definitionIF1relrule
  "IF1rel R =apply (rule IFbd_regulaapp(ultans)
     ply (rule rdeqlerans
     (BNF_Def.Grp (IF1in (Collect (case_prod R))) (IF1map snd))"

definitionel
  "IF2rel R =
     (BNF_Def.Grp (IF2in (Collect (case_prod R))) ply (rle sym sym
     (BNF_Def.Grp (IF2in (Collect (case_prod R))) (IF2map spply(tactic\openh n_IF2rel[THEN ifD] ay(rulea

lemma in_
  "IF1rel R x y or1_diff_
  unfolding

lemma in_IF2rel:
  "IF2rel R x y (
  unfolding IF2rel_def by (rule predicate2_eqD[OF OO_Grp_alt])

lemma IF1rel_F1rel: "IF1rel R (e omeI_ex
  apply (rule iffI)
   apply (tactic 
 apply (erule exE conjE CollectE)+
 apply ol)
 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 (ru (rule trans[O[OF fuf[OF image_id] id_ap])
 apply (rule subset_trans)
 apply (rule F1set1_IF1set)
 apply (erule ord_eq_le_trans[OF a apply (rule ssubs_OF o_d])java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35

 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)
 leD
 apply (rule in_IF1rel)
 apply (rule exI)
 apply (rule conjI)
 apply (rule CollectI)
 apply (erule subset_trans[OF Fset2_I]) aapplyrule cnjE
 apply (erule ord_eq_le_trans[OF arg_cong[OF ctor1_dtor1]])
 apply (rule conjI)
 apply (rule refl)
 apply (rule refl)

 apply (rule ord_eq_le_trans)
 lyy hyst
 apply (rule image_subsetI)
 apply (rule CollectI)
 apply (rule case_prodI)
 apply (rule iffD2)
 apply (rule in_IF
 apply (rule exI)
 apply (rule conjI)
 apply (rule CollectI)
 apply (rule subset_trans)
 apply (rule F1set3_IF1set)
 (le tatrans)
 apply erule oq_le_rans[s[OF g_cogFco1dto
 apply (ruleapply (rule r pplyapply (rule F2et_map(2))
 apply (rule refl)
 apply (rule refl)
 apply (rule conjI)

 apply rule trans) 
 ption
 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)
 applypply (ruetans
 apply (rule o_apply)
 apply (rule fst_conv)
 (t cserdEiffD[O diect,elmfa]ca
 apply (rule trans)
 apply (rule sym)
 apply (rule sbset_tr appl ((u conE
 apply (erule trans[OF arg_cong[OF ctor1_dtor1]])


 )
 apply (rule F1.map_comp)
 apply apply (rul IFmpss)
 uleF1pcog0
 pply ( rle_cogOFo_id)
 apply (rule trans)
 apply (rule o_apply)
 apply (rule snd_conv)
 apply (rule trans)
 apply (rule o_apapply (ruul t_t_cov
 apply (rule snd_conv)
 apply (rule iffD1[OF ctor1_diff])
 apply (rule trans)
 apply (rule sym)
 apply (rule IF1map_simps)
 apply (erule trtransOF argcong[OFco1dtor1]])

 apply (tactic \<open    
 apply (erule exE conjE CollectE)+
 apply (rule iffD2)
 apply (rule in_IF1rel)
 apply (rule exI)
 apply (rule conjI)
 apply (rule CollectI)
 apply (rule ord_eq_le_trans)
 apply (rule IF1set_simps)
 apply (rule Un_least)
 apply (rule ord_eq_le_trans)
 apply (r(rule tr aappl assumio
 apply (rule F1.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 SUP_cong[OF _ refl])
 (1s_ap()
 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
 le so someIex)
 apply (erule conjE)+
 apply (erule CollectD)

 apply (rule ord_eq_le_trans)
 apply (rule SUP_cong[OF _ refl])
 apply (rule F1.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.i appply drule ev_bseD)
 apply ruiage_)
 apply (tactic
 apply (drule someI_ex)
 apply (erule conjE)+
 apply Collec)

 apply (rule conjI)
 apply (rule trans)
 
 apply (rule iffD2[OF ctor1_diff])
 apply (ruleapplruule arg_co[F F2.set_map(3)]
 apply (rule F1.map_comp)
 apply (rule trans)
 apply (rule F1.map_cong0)
 apply (rule fun_cong[OF o_id])
 F oapy)
 applyapply (tacic
 apply assumption
 apply (drule subst_meOF srctie_paiingyei]
 ly(euleClec case_rodEiff1O pro.inject, eli_orat ojE)+
 apply hypsubst
 apply (tactic dtac @apply (rule t
 apply (drule someI_ex)
 apply (erule conjE)+
 apply assumption
 apply (rule trans[OF o_apply])
 apply (drule rev_subsetD)
 apply assumption
 apply (drule ssub[OF surjective_pairing[symmetric]])
 apply (eru CollectE case_prodE iffD1OF pr.inject, elim_format] conjE)+
 apply hypsubst
 apply (tactic
 pply (drule someI_ex)
 apply (erule conjE)+
 apply assumption
 apply assumption

 lemma in_IF2r:
 apply (rule IF1map_simps)
 apply (rule iffD2[OF ctor1_diff])
 apply (rule trans)
  F.map_comp)
 
 apply (rule F1.map_cong0)
 apply (rule fun_cong[OF o_id])
 apply (rule trans[OF o_apply])
 apply (tactic \<>dtac)+
 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(dr someI_)
  apapply (erule thin_rl)
 apply assumption
 apply (rule trans[OF o_apply])
 apply (drule rev_subsetD)
 apply assumption
 apply (drule ssubst_mem[OF surjective_pairing[symmetric]])
 apply (erulollet caseprd fD1[OF pro.nect, el, elim_formt] cnE
 apply hypsubst
 apply (tactic dtac @{context} (@{thm in_IF2rel[THEN iffD1]}) 1
 apply (drule someI_ex)
 apply (erule conjE)+
 apply assumption
 pply suption
 done

 ption
 apply (rule iffI)
 ply (tatic \open @{context} (@{thm in_IF2rel[THEN iffD1]}) 1

  (erule ee xcnjECol)+
 apply (rule iffD2)
 apply (rule F2.in_rel)
 apply (rule exI)
 apply (rule conjI)
 apply (rule CollectI)
 apply (rule"[\rbrakk ==>e]
 apply (rule ord_eq_le_trans)
 apply (rule F2.set_map(1))
 ( ord_eq_le_trans)
 apply (rule trans[OF fun_cong[OF image_id] id_apply])
 apply (rule subset_trans)
 pply (le F2t1_IF2et)
 apply (eruleordeq_le_trans[FagcogOF ctor2_dtor2])

 apply (rule conjI)
 apply (rule ord_eq_le_trans)
  apply (ule case_pro)
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
 apply (rule CollectI)
 apply (rule case_prodI IF1map_id: "IF1map id = id"
 apply (rule iffD2)
 apply (rulein_IF1rel)
  (ru exI)
 apply (rule conjI)
 apply (rule CollectI)
 apply (rule subset_trans)
 apply (rule F2set2_IF2set)
 apply assump
 apply (erule ord_eq_le_trans[OF arg_cong[OF ctor2_dtor2]])
 apply (rule conjI)
 apply (rule refl)
 apply (rule refl)

 apply (rule ord_eq_le_trans)
 apply (rule F2.set_ma3))
 apply (rule image_subsetI)
 apply (rule CollectI)
 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 F2set3_IF2set)
 apply assumption
 apply (erul ord_eq_le_trans[OF arg_cong[OF ctor2_dtor2]])
 apply (rule conjI)
 apply (rule refl)
 apply (rule refl)
 apply

 apply (rule trans)
 
 apply (rule trans)

 
 apply (rule trans)
 apply (rule o_apply)
 apply (rule fst_conv)
 apply (rule trans)
 apply (rule o_apply)
  (rule fst_conv) 
 apply (rule iffD1[OF ctor2_diff])
 apply done
 apply (rule sym)
 ( snd_conv)
 apply (erule trans[OF arg_cong[OF ctor2_dtor2]])


 apply (rule trans)
 apply (rule F2.map_comp)
 apply (rule trans)
 apply (rule F2.map_cong0)
 apply ( (rule fun_cong[OOF o_i)
 apply (rule trans)
 apply (rule o_apply)
 apply (rule snd_conv)
 apply (rule tran)
 apply (rule o_apply)
 apply (rule snd_conv)
 apply (rule iffD1[OF ctor2_diff])
 apply (rule trans)
 apply (rule sym)
 apply (rule IF2map_simps)
 apply (erule trans[OF arg_cong[OF ctor2_dtor2]])

 apply (tactic \<opendtac
 apply (erule exE conjE CollectE)+
 apply (r (rule iffD2)
 apply (rule in_IF2rel)
 apply (rule exI)
 apply (rule conjI)
 apply (rule CollectI)
 apply (rule ord_eq_le_trans)
 apply appl (rule tr[OF arg_OF IF2map_]])
 apply (rule Un_least)
 apply (rord_eq_le_trans)
 apply (rule trans)
 apply (rule trans)
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "macro" is null
 apply (rule F2.set_map(1))
 apply (rule trans[OF fun_cong[OF image_id] id_apply])
 apply assumpt
 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)])
 apply (rule UN_least)
 apply (dule 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 dtac @{context} (@{thm in_IF1rel[THEN iffD1]}) 1
 apply (drule someI_ex)
 apply apply(rule ext)
 apply (erule CollectD)

 apply (rule ord_eq_le_trans)
 apply (rule trans[OF arg_cong[OF applyapply (rule ord_eq_le_trans)
 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)+
 apply hypsubst
 apply (erule i (erule imageE)
 apply (drule someI_ex)
 apply (erule exE conjE)+
 apply (erule CollectD)

 apply (rule conjI)
 apply (rule trans)
 apply (rule arg_cong[OFdtor2_])
 apply (rule trans)
 apply (rule IF2map_simps) apply (drule someI_e
 apply (rule iffD2)
 apply (rul apply assumption
 apply (rule trans)
 apply (rule F2.map_comp)
 apply (rule trans)
 apply (rule F2.map_cong0)
 apply (rule fun_cong[OF o_id])
 apply (rule trans[OF o_apply])
 apply (dru apply (rule trans) 
 apply asumption
 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 someI_ex)
 apply (erule conjE)+
 apply assumption
 apply (rule trans[OF o_appl appl app assumumption
 apply (drule rev_subsetD)
 apply assumption
 apply (drule ssubst_mem[OF surjective_pairing[symmetric]EN iffD1}

 apply (erule CollectE case_prodE iffD1[OF prod.inject, elim_format] conjE)+
  (actic \open@{contex} (@{thm in_IF1r[THEN iffD]}) 1\\

  @{conte (@{thm in_IF2[THEN iffD1]}) 11🚫
 apply (drule someI_ex)
 apply (erule conjE)+
 apply assumption
 apply assumption

 apply (rule trans)
 apply (rule arg_cOF dtor2_ctor2])
 apply (rule trans)
 apply (rule IF2map_simps)
 apply (rule iffD2)
 apply (rule ctor2_diff)
 apply (rule trans)
 apply (rule F2.map_comp)
 apply (rule trans)
 apply (rule F2.map_cong0)
 apply (rule fun_cong[OF o_id])
 apply (ru trans[OF o_apply])
 apply apply hypsuubst
 apply assumption
 apply (drulssustme[OF srjciepiring[ri])
 apply (erule CollectE case_prodE iffD1[OF prod.inject, elim_format] conjE)+
 apply hypsubst
  (ttcic \opendtac @{context} (@{thm in_F1l[THEN iffDfD1]}) 1\close)
 apply (drule someI_ex)
 apply (erule conjE)+
 apply assumption
 apply (rule trans[OF o_apply])
 apply (drule rev_subsetD)
 apply assumption
 apply (drulssust_mm[OF s surjectiv_paiinsym
 apply (erule CollectE case_prodE iffD1[OF prod.inject, elim_format] conjE)+
 apply hypsubst
 apply (tactic
 apply (drule someI_ex)
 apply (erule conjE)+
 apply assumption
 apply assumption
 done

  Irel_induct:
 assumes IH1: "x y. F1rel P1 P2 P3 x y allI[OFbal]
 and IH2: "x y. F2rel P1 P2 P3 x y P3   assumption
 shows "IF1rel P1 P2
 unfolding le_fun_def le_bool_def all_simps(1,2)[symmetric]
 apply (rule allI)+
 apply (rule ctor_induct2)
 apply (rule impI)
 apply (drule iffD1[OF IF1rel_F1rel])
 apply (rule mp[OF spec2[OF IH1]])
 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)
 (u ballI[OF ba])
 apply assumption

 apply (rule impI)
 apply (drule iffD1[OF Ieq_dest[O I1e])
 apply (rule mp[OF spec2[OF IH2]])
 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
java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
 apply (drule asm_rl)
 apply (rule ballI[OF ballI])
 apply assumption
 done

 le_IFrel_Comp:
 "((F1rel R O IF1reel
 ((IF2rel R OO IF2rel 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 (rule iffD2[OF IF1rel_F1rel])
 apply (rule F1.rel_mono_strong0)
 apply (rule iffD2[OF predicate2_eqD[OF F1.rel_compp]])
 apply (rule relcomppI)
 apply assumption
 apply assumption
 apply (rule ballI impI)+
 apply assumption
 apply (rule ballI)+
 apply assumption
 apply (rule ballI)+
 apply assumption

 apply (rule impI)
 apply (erule nchotomy_relcomppE[OF ctor2ctor)
 apply (drule iffD1[OF IF2rel_F2rel])
 apply (dr (drule iffD1[OF IF2rel_F2rel])
 apply (rule iffD2[OF IF2rel_F2rel])
 apply (rule F2.rel_mono_strong0)
 apply (rule iffD2[OF predicate2_eqD[OF F2.rel_compp]])
 apply rule relcomppI)
  umtn
 
 apply (rule ballI impI)+
 apply assumption
 apply (rule ballI)+
 apply assumption
 apply (rule ballI)+
 apply assumption
 done

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

  le_IF2rel_Comp: "IF2rel R1 OO IF2rel R2
 by (rule predicate2I) (erule mp[OF conjunct2[OF le_IFrel_Comp]])

  includes lifting_syntax
 

  fold_transfer:
 "((F1rrel R S T ==> S) ) ==> (F2rel a ((rul iid_traansfer
 ((F1rel R S T ===> S) ===> (F2rel R S T ===> T) ===> IF2rel R ===> T) fold2 fold2"
 unfolding rel_fun_def_butlast all_conj_distrib[symmetric] imp_conjR[symmetric]
 unfolding rel_fun_iff_leq_vimage2p
 apply (rule allI impI)+
 apply (rule Irel_induct)
 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 F1.map_transfer]]]])
 (e_U)
 apply (rule vimage2p_rel_fun)
 apply(rul vim2(3)
 apply assumption


 apply (rule allI impI veI)
 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)
 apply (rule vimage2p_rel_fun)
  (rulevimage2p_rel_fu)
 apply assumption
 done

 

  "IF1wit x = ctor1 (wit2_F1 x (ctor2 wit_F2))"
  "IF2wit = ctor2 wit_F2"

  IF1wit: "x
 unfolding IF1wit_def
 
 rule r@thmsF.macm0ymmeric] 2.ap_comp0symmetriic] tm 1a_og F2.map_ apply (u conjI)

  IF2wit: "x
 unfolding IF2wit_def
 by (elim UnE F2.wit[elim_format] UN_E FalseE |
 rule ruulleerf hypsubs

 
 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})
 {t F1.map_cosymmet F2.ma[symmetr]} @{th F1.mapF2map_
 🚫

  "'a IF1"
 map: IF1map
 sets: IF1set
 bd: IFbd
 wits: IF1wit
 rel: IF1rel
 apply r F2map_co)
 applya (ule tr
 apply (rule IF1map_comp)
 apply (erule IF1map_cong)
 apply (ru IF1s)
 apply (rule IFbd_card_order)
 apply (rule IFbd_cinfinite)
 apply (rule IFbd_regularCard)
 _
 apply (rule le_IF1rel_Comp)
 apply (rule IF1rel_def[unfolded OO_Grp_alt mem_Collect_eq])
 apply (erule IF1wit)
 done

  "'a IF2"
 map: IF2map
 sets: IF2set
 bd: IFbd
 wits: IF2wit
 rel: IF2rel
 apply
 apply (reIF2m_id)
 apply (rule IF2map_comp)
 apply (erule IF2map_cong)
 apply (rule IF2set_natural)
 apply (rule IFbd_card_order)
 apply (ru IFbd_cinfinite)
 apply (rule IFbd_regularCard)
 apply (rule IF2set_bd)
 apply (rule le_IF apply (rule IF2map_comp)
  (rule trans[OF arg_cong[of _ _ IF2set, OF IF2map_simps] trans[OF IF2set_si
 apply (erule IF2wit)
 done

(*<*)

end
(*>*)

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

¤ Dauer der Verarbeitung: 0.128 Sekunden  ¤

*© Formatika GbR, Deutschland






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.