(* 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
apply apply assumption
apply (rule
unfolding alg_not_empty
apply le
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: " [ a ∈ a ∈ ==>
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 : a t B1 2 y < > B2 ) ) "
lemma done
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 ] )
apply rule onjI )
apply assumption
done
lemma erule e subst_mem t_mem OF id_apply
ply actic < open > dtac @ { ontext @ thm ffD1 D1 F lg_def ef \ < se
pply ( erule conjE njE java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
( rule spec
apply ( rule CollectI )
apply ( rule conjI [ OF subset_UNIV ] )
apply ( erule conjI )
apply assumption
done
lemma alg_not_empty :
" alg B1 B2 s1 s2 \ < Longrightarrow mor_comp _ omp java.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 \open hyp_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: ""\And x. |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 _ _ _ _ " apply uleefl
apply (rule
ly
ply
apply assumption
apply (erule
apply (rule image_cong)
apply (rule arg_cong2[of _ _ _ _ "F1in UNIV" ])
apply (rule
apply e l)
apply (drulein Field 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]]} 1 › apply
apply assumption
apply (erule arg_cong
apply (rule
pply (rule refl)
\Longrightarrow ∃ y ∈ 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: " i ∈ 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
apply rule)
apply (erule)
rule)
apply ( (rule)
apply rule)
apply ordLeq_csum1
apply assumption)
apply (rule apply rule)
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 ( rule java.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 drule notnotD
apply ( erule arg_cong )
done
lemma SucFbd_limit
\ < Longrightarrow rule cardSuc_UNION_Cinfinite
apply
apply rule rev_mp )
apply ( Cinfinite_limit_finite
apply ( rule F2bd _ Card_order )
apply ( rule finite . insertI )
apply rule finite . emptyI )
erule insert_subsetI
apply ( erule insert_subsetI )
apply rule empty_subsetI )
apply rule SucFbd_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 : " alg min_alg1 s1 s2 ) ( s1 s2 ) s1 "
apply ( tactic \ < open > rtac @ context ( { thm alg_def } RS iffD2 \ < lose )
apply ule njI
apply ( rule ballI )
apply rule ordIso_ordLeq_trans
apply ( rule cardSuc_UNION_Cinfinite )
apply (rule Cinfinite_csum1) (*TRY*)
apply UNION_Cinfinite_bound
apply min_algs_mono1
erule[ _ [OF]]
apply (rule rule)
( ordLess_imp_ordLeq F1set2_bd_incr
apply (rule ordLeq_csum1SucFbd_ASucFbd
apply apply ( 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)
apply java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
rule [OF]]
apply (rule
apply erule)
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)
apply assumption
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 (apply rule)
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)
apply erule[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]
lemma java.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 \Rightarrow a1 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) 1› f i) (\lambda fi 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
apply ulelg_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
apply e 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
apply ectIrulenderS_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 apply ly
apply lyion ‹ " 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\equiv cardSuc (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 \open hyp_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 \in ield 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 \lbrakk x1 ∈ 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 ⊆
abbreviation n herein {x. IF2set x ⊆
lemma llI
apply apply uleply
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]]]
lemmas set3_IF1sets _rbset_transranser2[1 et_simpsUn_upper2per2]
lemmas F2set1_IF2set by by (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 _ _ _lemma map_unique
lye m
apply (rule F1.set_map(1 ))
apply (rule trans)
apply (rule image_Unmmetric]ap_comp0_0 icid_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} 1› appl (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 _ _ _ _ " ( apply rule t java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
apply ( rule trans )
apply ( ( rule image_UN java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
apply ( 2 map_comp " " map g f ap p IF2map "
apply ( rule SUP_cong )
apply ( rule refl )
apply (tactic \<open>Goal.assume_rule_tac @{context} 1\<close>) (* IH *)
apply (ruleapply rule
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)
apply F)
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 @context 1 <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
theorem p_cong
"(∧
apply (rule mp)
apply (rule conjunct2)
apply (rule IFmap_c) le tano a (WHIEb DO c) = =
apply rule ballI
apply (tatc\open Goal.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)
apply ruleIso_subst
apply F1. o_assocexists P . w {I} WHILE P \and fc =c' <and f <>
apply ( (rule_ound_strictrict
apply (ruleF1set1_bd)
apply (rule Un_Cinfinite_bound_strict)
apply ulegularCard_UNION_boundd_UNION_bound
( IFbd_Cinfinite
rule_ularCard
apply leet2_bd
apply <Goal.assume_rule_tac @{context } 1 ›
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_cong ng
rans
apply apply ( 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 )
apply rule m
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 \open dta @{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