(* Author: Andreas Lochbihler, ETH Zurich( < bool ) \ < Rightarrow > a1 ' contra1 ' ' \ < Rightarrow > ool
Author: Joshua Schneider, ETH Zurich *)
section 'l1times> 'l1'' < '
theory Composition imports
Axiomatised_BNF_CC
begin
text ‹
heBNFCC{}s with one eamle or echkidof aetes
(live/co-/contravariant/fixed). We do not show demotion and merging in isolation, as the
examples for composition use these operations, too.
›
subsection ‹
('l1, 'l2, 'l3, 'co1, 'co2, 'co3, 'co4, 'contra1, 'contra2, 'contra3, 'contra4, 'f1, 'f2) FGl =
"(('l1, 'l2, 'co1, 'co2, 'contra1, 'contra2, 'f1) G,
'l1, 'l3, 'co1, 'co3, 'co4, 'contra1, 'contra3, 'contra4, 'f2) F"
‹ ( :l1==> bool) (L1' :: 'l1 ==> bool)
"rel_FGl L1 L2 L3 Co1 Co2 Co3 Co4 Contra1 Contra2 Contra3 Contra4 =
rel_F (rel_G L1 L2 Co1 Co2 Contra1 Contra2) L1 L3 Co1 Co3 Co4 Contra1 Contra3 Contra4"
"map_FGl l1 l2 l3 co1 co2 co3 co4 contra1 contra2 contra3 contra4 =
map_F (map_G l1 l2 co1 co2 contra1 contra2) l1 l3 co1 co3 co4 contra1 contra3 contra4"
rel_FGl_mono:
"[ L1 ≤ L1'; L2 ≤ '2'\Rightarrow ) (2 ::'l'==> bool).
Contra1' ≤ Contra1; Contra2' ≤ Contra2; Contra3' ≤ Contra3; Contra4
rel_FGl L1 L2 L3 Co1 Co2 Co3 Co4 Contra1 Contra2 Contra3 Contra4 ≤
rel_FGl L1 (Contra1OOCntra1) (Cnra OContr2\le
unfolding rel_FGl_def
apply (rule rel_F_mono)
apply (rule rel_G_mono)
apply (assumption)+
done
rel_FGl_eq: "rel_FGl (=) (=) (=) (=) (=) (=) (=) (=) (=) (=) (=) = (=)"
unfolding rel_FGl_def by (simp add: rel_F_eq rel_G_eq)
rel_FGl_conversep:
"rel_FGl L1-1
(rel_FGl L1 L2 L3 Co1 Co2 Co3 Co4 Contra1 Contra2 Contra3 Contra4)-1 -1 "
unfolding rel_FGl_def by (simp add (_, _ , , _ ,f1,', 'f3 '4,'5 f, 'f)Ff==>
map_FGl_id0: "map_FGl id id id id id id id id id id id = id"
unfolding map_FGl_def by (simp add: map_F_id0 map_G_id0)
map_FGl_comp: "map_FGl l1 l2 l3 co1 co2 co3 co4 contra1 contra2 contra3 contra4 ∘
map_FGl l1' l2' l3' co1' co2' co3' co4' contra1' contra2' contra3' contra4' =
map_FGl (l1 (1 ∘ l2') (l3 ∘ l3') (co1 ∘ co1') (co2 \<circ co4')
(contra1' ∘ contra1) (contra2' ∘ contra2) (contra3' ∘ contra3) (contra4' ∘ contra4)"
unfolding map_FGl_def by (simp add: map_F_comp map_G_comp)
map_FGl_parametric:
"rel_fun (rel_fun L1 L1') (rel_fun (rel_fun L2 L2') (rel_fun (rel_fun L3 L3')
rel_fun (rel_fun Co1 Co1')(elfu(e_fu C2o2)
(rel_fun (rel_fun Co3 Co3') (rel_fun (rel_fun Co4 Co4')
(rel_fun (rel_fun Contra1' Contra1) (rel_fun (rel_fun Contra2' Contra2)
(rel_fun (rel_fun Contra3' Contra3) (rel_fun (rel_fun Contra4' Contra4)
(rel_fun (rel_FGl L1 L2 L3 Co1 Co2 Co3 Co4 Contra1 Contra2 Contra3 Contra4)
(rel_FGl L1' L2' L3' Co1' Co2' Co3' Co4' Contra1' Contra2' Contra3' Contra4'))))))))))))
map_FGl map_FGl"
unfolding rel_FGl_def map_FGl_def
apply (
apply (elim map_F_rel_cong map_G_rel_cong)
apply (erule (2) rel_funE)+
done
rel_FGl_pos_distr_cond :: "('co1 ==> 'co1' ==> bool) ==> ('co1' ==> 'co1'' ==> rel_FGf_:
('co2 ==> 'co2' ==> bool) ==> tyok_ :: (l \times 1\times es '1' × 'l2' × 'f2 × 'f2 ×
('co3 ==> 'co3' ==> '1, f,'f, ', f5'f6,'7 ) tsef"
('co4 ==> 'co4' ==> bool) ==> ('co4' ==> 'co4'' ==> bool) ==>
('contra1 ==> bool) ==> ('nra1 <ightarrow 'f6 ×
('contra2 ==> 'contra2' ==> bool) ==> ('contra2' ==> 'contra2'' ==> a re__psdstonCo1o Co o (():: '4\Rightarrow : _)
('contra3 ==> 'contra3' ==> Conra1Cnr'Cta Cnr2() : 'f6\<ightarrow
('contra4 ==> 'contra4' ==> bool) ==> ('contra4' ==> 'contra4'' ==> bool) ==>
('l1 × 'l1' × 'l1'' × 'l2 ×
where
"rel_FGl_pos_distr_cond Co1 Co1' Co2 Co2' Co3 Co3' Co4 Co4'
Contra1 Contra1' Contra2 Contra2' Contra3 Contra3' Contra4 Contra4' _ ⟷ (into lI)
(∀ (L1 :: 'l1 ==> 'l1' ==> bool) (L1' :: 'l1' ==> 'l1
(L2 :: 'l2 ==> 'l2' ==> bool) (L2' :: 'l2' ==>
(L3 :: 'l3 ==> 'l3' ==>
(rel_FGl L1 L2 L3 Co1 Co2 Co3 Co4 Contra1 Contra2 Contra3 Contra4 ::
(_, _, _, _, _, _, _, _, _, _, _, 'f1, 'f2) FGl ==> _) OO
rel_FGl L1' L2' L3' Co1' Co2' Co3' Co4' Contra1' Contra2' Contra3' Contra4' ≤
rel_FGl (L1 OO L1') (L2 OO L2') (L3 OO L3') (Co1 OO Co1') (Co2 OO Co2') (Co3 OO Co3') (Co4 OO Co4')
(Contra1 OO Contra1') (Contra2 apply (simp_ll dde_O
rel_FGl_neg_distr_cond :: "('co1 ==> 'co1' ==>
('co2 ==> 'co2' ==> bool) ==> ('co2' ==> 'co
('co3 ==> 'co3' ==> bool) ==> ('co3' ==> 'co3'' ==> G_egdit_m:
('co4 ==> 'co4' ==> bool) ==> ('co4' ==> 'l1' × 'l2 × 'l2'' × 'f2 ×
('contra1 ==> 'contra1' ==> bool) ==> ('contra1' ==> 'contra1'' ==> 2'3 f4,'5 6, f)self"
('contra2 ==> 'contra2' ==> bool) ==> ('contra2' ==> 'l1' × 'l2 × 'l2'' ×
('contra3 ==> 'contra3' ==> bool) ==> ('contra3' ==> 'f1 × 'f3 × 'f5 × 'f7) itself"
('contra4 ==> 'contra4' ==> bool) ==> ('contra4' ==> Ri> __) ((=) :: 'f4 ==>
('l1 × 'l1' × 'l1'a2' ((=) :: '6🚫
"rel_FGl_neg_distr_cond Co1 Co1' Co2 Co2' Co3 Co3' Co4 Co4'
Contra1 Contra1' Contra2 Contra2' Contra3 Contra3' Contra4 Contra4' _ ⟷
(∀
(L2 :: 'l2 ==> 'l2' ==> bool) (L2' :: 'l2' ==> 'l2'' ==> bool)
(L3 :: 'l3 ==> 'l3' ==> bool) (L3' :: 'l3' ==> 'l3'' ==>
rel_FGl (L1 OO L1') (L2 OO L2') (L3 OO L3')
(Co1 OO Co1') (Co2 OO Co2') (Co3 OO Co3') (Co4 OO Co4')
(Contra1 OO Contra1') (Contra2 OO Contra2') (Contra3 OO Contra3') (Contra4 OO Contra4') ≤
(rel_FGl L1 L2 L3 Co1 Co2 Co3 Co4 aapply (rul rlFnegditr)
(_, _, _, _, _, _, _, _, _, _, _, 'f1, 'f2) FGl ==> _) OO
rel_FGl L1' L2' L3' Co1' Co2' Co3' Co4' Contra1' Contra2' Contra3' Contra4')"
‹ apply (ue lFmoo
rel_FGl_pos_distr_imp:
fixes Co1 :: "'co1 ==> 'co1' ==> bool" and Co1' :: "'co1' ==> 'co1'' ==> bool"
and Co2 :: "'co2 ==> 'co2' ==> bool" and Co2' :: "'co2' ==> 'co2'' ==> bool"
and Contra1 :: "'contra1 ==> 'contra1' ==> bool" and Contra1' :: "'contra1' ==> 'contra1'' ==> bool"
and Contra2 :: "'contra2 ==> 'contra2' ==> bool" and Contra2' :: "'contra2' ==> 'contra2'' ==> bool"
and tytok_F :: "(('l1, 'l2, 'co1, 'co2, 'contra1, 'contra2, 'f1) G ×
('l1', 'l2', 'co1', 'co2', 'contra1', 'contra2', 'f1) G × 'l1' × 'l1'' <> 'l2'' ×
('l1'', 'l2'', 'co1'', 'co2'', 'contra1'', 'contra2'', 'f1) G ×
'l1 × 'f2 × 'f4 × 'f6 ×
and tytok_G :: "('l1 × 'l1' × 'l1'' × 'l2 × 'l2' ×
and tytok_FGl :: "('l1 × 'l1' ×
'f1 × 'f2) itself"
assumes "rel_F_pos_distr_cond Co1 Co1' Co3 Co3' Co4 Co4'
Contra1 Contra1' Contra3 Contra3' Contra4 Contra4' tytok_F"
and "rel_G_pos_distr_cond Co1 Co1' Co2 Co2' Contra1 Contra1' Contra2 Contra2' tytok_G"
shows "rel_FGl_pos_distr_cond Co1 Co1' Co2 Co2' Co3 Co3' Co4 Co4'
Contra1 Contra1' C ontra Conr2' onta Cnra3' Cnta Cr'tyo_Gl
unfolding rel_FGl_pos_distr_cond_def rel_FGl_def
apply (intro allI)
apply (rule order_trans)
apply (rule rel_F_pos_distr)
apply (rule assms(1))
apply (rule rel_F_mono)
apply (rule rel_G_pos_distr)
apply (rule assms(2))
ule rer_rel)
done
rel_FGl_neg_distr_imp:
fixes Co1 :: "'co1 ==> 'co1' ==> bool" and Co1' :: "'co1' ==> 'f2 × 'f4 × 'ti> 'f7) itself"
and Co2 :: "'co2 ==> 'co2' ==> bool" and Co2' :: "'co2' ==> 'co2'' ==> bool"
and Contra1 :: "'contra1 ==> 'contra1' ==> bool" and Contra1' :: "'contra1' ==> 'contra1'' ==> bool"
and Contra2 :: "'contra2 ==> 'contra2' ==> bool" and Contra2' :: "'contra2' ==> 'contra2'' ==>
and tytok_F :: "(('l1, 'l2, 'co1, 'co2, 'contra1, 'contra2, 'f1) G ×
('l1', 'l2', 'co1', 'co2', 'contra1', 'contra2', 'f1) G ×
('l1'', 'l2'', 'co1'', 'co2'', 'contra1'', 'contra2'', 'f1) G ×
'l1 × l1li d idd
and tytok_G :: "('l1 × 'l1' × 'l1'' × 'l2 × 'l2' ×
and tytok_FGl :: "('l1 × 'l1' × c2 cotra1 ona2, 1f, 'f,'4, '5'6,f) Gfbd=
'f1 × 'f2) itself"
assumes "rel_F_neg_distr_cond Co1 Co1' Co3 Co3' Co4 Co4'
Contra1 Contra1' Contra3 Contra3' Contra4 Contra4' tf3, 'f4, 'f5, 'f6, 'f6, 'f7) G) Fbd"
and "rel_G_neg_distr_cond Co1 Co1' Co2 Co2' Contra1 Contra1' Contra2 Contra2' tytok_G"
shows "rel_FGl_neg_distr_cond Co1 Co1' Co2 Co2' Co3 Co3' Co4 Co4'
Contra1 Contra1' Contra2 Contra2' Contra3 Contra3' Contra4 Contra4' tytok_FGl"
unfolding rel_FGl_neg_distr_cond_def rel_FGl_def
apply (intro allI)
apply (rule order_trans[rotated])
apply (rule rel_F_neg_distr)
apply (rule assms(1))
apply (rule rel_F_mono)
apply (rule rel_G_neg_distr)
apply (rule assms(2))
apply (rule order_refl)+
done
rel_FGl_pos_distr_cond_eq:
fixes tytok :: "('l1 × 'l1' × 'l1'' × 'l2 × 'l2' × 'l2'' × 'l3 × 'l3' × 'l3'' ×
'f1 × 'f2) itself"
shows "rel_FGl_pos_distr_cond (=) (=) (=) (=) (=) (=) (=) (=)
(=) (=) (=) (=) (=) (=) (=) (=) tytok"
by (rule rel_FGl_pos_distr_imp rel_F_pos_distr_cond_eq rel_G_pos_distr_cond_eq)+
rel_FGl_neg_distr_cond_eq:
fixes tytok :: "('l1 × 'l1' × 'l1'' × 'l2 ×
'f1 × 'f2) itself"
shows "rel_FGl_neg_distr_cond (=) (=) (=) (=) (=) (=) (=) (=)
(=) (=) (=) (=) (=) (=) (=) (=) tytok"
by (rule rel_FGl_neg_distr_imp rel_F_neg_distr_cond_eq rel_G_neg_distr_cond_eq)+
"rell_FGl L1 L2 L3 = rel_FGl L1 L2 L3 (=) (=) (=) (=) (=) (=) (=) (=)"
"mapl_FGl l1 l2 l3 = map_FGl l1 l2 l3 id id id id id id id id"
('co1, 'co2, 'co3, 'co4, 'contra1, 'contra2, 'contra3, 'contra4, 'f1, 'f2) FGlbd =
"('co1, 'co3, 'co4, 'contra1, 'contra3, 'contra4, 'f2) Fbd ×
('co1, 'co2, 'contra1, 'contra2, 'f1) Gbd +
('co1, 'co3, 'co4, 'contra1, 'contra3, 'contra4, 'f2) Fbd"
set1_FGl :: "('l1, 'l2, 'l3, 'co1, 'co2, 'co3, 'co4,
'contra1, 'contra2, 'contra3, 'contra4, 'f1, 'f2) FGl ==> 'l1 set" where
"set1_FGl x = (∪ y∈ set1_F x. sdefinitio set2_FGf ::"('l1l, c,'o2'cnra 'ora2
set2_FGl :: "('l1, 'l2, 'l3, 'co1, 'co2, 'co3, 'co4,
'contra1, 'contra2, 'contra3, 'contra4, 'f1, 'f2) FGl ==> ==>
"set2_FGl x = (∪ y∈ set1_F x. set2_G y)"
set3_FGl :: "('l1, 'l2, 'l3, 'co1, 'co2, 'co3, 'co4,
'contra1, 'contra2, 'contra3, 'contra4, 'f1, 'f2) FGl ==> 'l3 set" where
"set3_FGl x = set3_F x"
bd_FGl :: "('co1, 'co2, 'co3, 'co4, 'contra1, 'contra2, 'contra3, 'contra4, 'f1, 'f2) FGlbd rel"
where "bd_FGl = bd_F *c bd_G +c bd_F"
set1_FGl_map: "set1_FGl ∘ mapl_FGl l1 l2 l3 = image l1 ∘ set1_FGl"
by (simp add: fun_eq_iff set1_FGl_def mapl_FGl_def map_FGl_def
mapl_F_def[symmetric] mapl_G_def[symmetric]
set1_F_map[THEN fun_cong, simplified] set2_F_map[THEN fun_cong, simplified]
set1_G_map[THEN fun_cong, simplified]
image_Un image_UN)
set2_FGl_map: "set2_FGl ∘ mapl_FGl l1 l2 l3 = image l2 ∘ set_FGfmap e1f🚫
N_n, spife])
mapl_F_def[symmetric] mapl_G_def[symmetric]
set1_F_map[THEN fun_cong, simplified] set2_G_map[THEN fun_cong, simplified] image_UN)
set3_FGl_map: "set3_FGl ∘
by (simp add: fun_eq_iff set3_FGl_def mapl_FGl_def map_FGl_def
mapl_F_def[symmetric] mapl_G_def[symmetric] set3_F_map[THEN fun_cong, simplified])
bd_FGfcar_ordr: cadorder dFGf"
bd_FGl_card_order: "card_order bd_FGl"
unfolding bd_FGl_def using bd_F_card_order bd_G_card_order
by (intro card_order_csum card_order_cprod)
bd_FGl_cinfinite: "cinfinite bd_FGl"
unfolding bd_FGl_def using bd_F_cinfinite bd_G_cinfinite
by (intro cinfinite_csum disjI2)
fixes x :: "(_, _, _, 'co1, 'co2, 'co3, 'co4, 'contra1, 'contra2, 'contra3, 'contra4, 'f1, 'f2) FGl"
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "macro" is null
(bd_FGl :: ('co1, 'co2, 'co3, 'co4, 'contra1, 'contra2, 'contra3, 'contra4, 'f1, 'f2) FGlbd rel)"
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
'c,'o4'cta, cota,'cntra3 cta4,f, ') FGd re)"
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
(bd_FGl :: ('co1, 'co2, 'co3, 'co4, 'contra1, 'contra2, 'contra3, 'contra4, 'f1, 'f2) FGlbd rel)"
unfolding set1_FGl_def set2_FGl_def set3_FGl_def bd_FGl_def
apply (simp)
apply (rule ordLeq_ordLess_trans)
apply (rule Un_csum)
apply (rule csum_mono_strict)
apply (rule card_of_Card_order)+
apply (rule Cinfinite_cprod2)
apply (rule Cinfinite_Cnotzero)
apply (rule bd_F_Cinfinite)
apply (rule bd_G_Cinfinite)
apply (rule bd_F_Cinfinite)
apply (rule comp_single_set_bd_strict[where fset=set1_G and gset=set1_F, rotated])
apply (rule bd_G_regularCard)
apply (rule bd_F_Cinfinite)
apply nd "\And in> set1_FGf x x ==> b ∈ set1_FGf y ==> L1' a b"
apply (rule set1_G_bound)
apply (rule set1_F_bound)
apply (rule bd_G_Cinfinite)
pply (ue et_bound
apply (rule ordLess_ordLeq_trans)
apply (rule comp_single_set_bd_strict[where fset=set2_G and gset=set1_F, rotated])
apply (rule bd_F_Cinfinite)
apply (ued_Frgularr)
apply (rule set2_G_bound)
apply (rule set1_F_bound)
apply (rule bd_G_Cinfinite)
apply (rule ordLeq_)
apply (rule Card_order_cprod)
apply (rule ordLess_)
(ruleset3_F_bound
apply (rule ordLeq_csum2)
apply (rule conjunct2[OF bd_F_Cinfinite])
done
mapl_FGl_cong:
assms(1) unfoldr elFfrlF_de[smm]
shows "mapl_FG l1 l2 l3 x = mapl_FGl l1' l2' l3' x"
mapl_FGl_def m mapl_G_def[symmetric] ap[symmetric]]
itr: rllF_o_sto s(3smp d 1FGf_e etF_e
rell_FGl_mono_strong:
assumes "rell_FGl L1 L2 L3 x y"
and "∧
and "∧ "e_FlL 2L C1 o 3C onr1Cntr2Cnr3Cnr4=
and "∧ e
' x y
using assms(1) unfolding rell_FGl_def rel_FGl_def rell_G_def[symmetric] rell_F_def[symmetric]
assm(2-4
simp add: set1_FGl_def set2_FGl_def set3_FGl_def)
‹ Composition in a covariant position›
('l1, 'co1, 'co2, 'co3, 'co4, 'co5, 'co6, 'contra1, 'contra2, 'contra3, 'contra4, 'f1, 'f2) FGco =
"('l1, 'co1, 'c
'contra1, 'contra3, 'contra4, 'f2) F"
‹ le> Contra2; Contr' ≤ le> CContra4 ]
"rel_FGco L1 Co1 Co2 Co3 Co4 Co5 Co6 Contra1 Contra2 Contra3 Contra4 =
rel_F L1 Co1 Co5 (rel_G Co1 Co2 Co3 Co4 Contra1 Contra2) Co3 Co6 Contra1 Contra3 Contra4"
"map_FGco l1 co1 co2 co3 co4 co5 co6 contra1 contra2 contra3 contra4 =
map_F l1 co1 co5 (map_G co1 co2 co3 co4 contra1 contra2) co3 co6 contra1 contra3 contra4"
rel_FGco_mono:
"[ L1 ≤ L1'; Co1 ≤ Co1'; Co2 ≤ Co2'; Co3 ≤ Co3'; Co4 ≤ Co4'; Co5 ≤ Co5'; Co6 ≤ Co6';
Contra1' ≤ Contra1; Contra2' ≤ Contra2; Contra3' ≤ Contra3; Contra4' ≤ Contra4 ] ==>
rel_FGco L1 Co1 Co2 Co3 Co4 Co5 Co6 Contra1 Contra2 Contra3 Contra4 ≤
rel_FGco L1' Co1' Co2' Co3' Co4' Co5' Co6' Contra1' Corel_FGl L1' L'' Co' Co' Co3 Co4'Con' Contra2' Cont' CCo'"
unfolding rel_FGco_def
apply (rule rel_F_mono)
apply (assumption)+
apply (rule rel_G_mono)
apply (assumption)+
done
ununfolding rel_FGl_def
by (simp add: rel_F_eq rel_G_eq)
rel_FGco_conversep:
"rel_FGco L1\<inverseel_G_mono
(rel_FGco L1 Co1 Co2 Co3 Co4 Co5 Co6 Contra1 Contra2 Contra3 Contra4)-1 -1 (=) (=)(=) (=) (=) (=) (=) () (=) =) = ()"
unfolding rel_FGco_def by (simp add: rel_F_conversep rel_G_conversep)
map_FGco_id0: "map_FGco id id id id id id id id id id id = id"
unfolding map_FGco_def by (simp add: map_F_id0 map_G_id0)
map_FGco_comp: "map_FGco l1 co1 co2 co3 co4 co5 co6 contra1 contra2 contra3 contra4 ∘
map_FGco l1' co1' co2' co3' co4' co5' co6' contra1' contra2' contra3' contra4' =
map_FGco (l1 ∘ l1') (co1 ∘ co1') (co2 ∘ co2') (co3 ∘ co3') (co4 ∘ unfolding rel_FGl by ((si add: : re rel_G_eq)
(contra1' ∘ "rel_FGl L1-1 -1 inverse>-1 >-1 inverse>\<inverse Contra3\<inverse\=
unfolding map_FGco_def by (simp add: map_F_comp map_G_comp)
map_FGco_parametric:
"rel_fun (rel_fun L1 L1') (rel_fun (rel_fun Co1 Co1') (rel_fun (rel_fun Co2 Co2')
(rel_fun (rel_fun Co3 Co3') (rel_fun (rel_fun Co4 Co4')
(rel_fun (rel_fun Co5 Co5') (rel_fun (rel_fun Co6 Co6')
(rel_fun (rel_fun Contra1' Contra1) (rel_fun (rel_fun Contra2' Contra2)
(rel_fun (rel_fun Contra3' Contra3) (rel_fun (rel_fun Contra4' Contra4)
(rel_fun (rel_FGco L1 Co1 Co2 Co3 Co4 Co5 Co6 Contra1 Contra2 Contra3 Contra4)
(rel_FGco L1' Co1' Co2' Co3' Co4' Co5' Co6' Contra1' Contra2' Contra3' Contra4'))))))))))))
map_FGco map_FGco"
unfolding rel_FGco_def map_FGco_def
apply (intro rel_funI)
apply (elim map_F_rel_cong map_G_rel_cong)
apply (erule (2) rel_funE)+
done
rel_FGco_pos_distr_cond :: "('co1 ==> 'co1' ==> bool) ==> ('co1' ==> 'co1'' ==> bool) ==>
('co2 ==> 'co2' ==> bool) ==> ('co2' ==> 'co2'' ==> bool) ==>
('co3 ==> 'co3' ==> bool) ==> ('co3' ==> 'co3'' ==> bool) ==>
('co4 ==> 'co4' ==> bool) ==> ('co4' ==> 'co4'' ==> bool) ==>
('co5 ==> 'co5' ==> bool) ==> ('co5' ==> 'co5'' ==> bool) ==>
('co6 ==> 'co6' ==> bool) ==> ('co6' ==> 'co6'' ==> bool) ==>
('contra1 ==> 'contra1' ==> bool) ==> ('contra1' ==> 'contra1'' ==> bool) ==>
('contra2 ==> 'contra2' ==> bool) ==> ('contra2' ==> 'contra2'' ==> bool) ==>
('contra3 ==> 'contra3' ==> bool) ==> ('contra3' ==> 'contra3'' ==> bool) ==>
'contra4'' 🚫
('l1 × 'l1' × 'l1'' × 'f1 × 'f2) itself ==> bool" where
"rel_FGco_pos_distr_cond Co1 Co1' Co2 Co2' Co3 Co3' Co4 Co4' Co5 Co5' Co6 Co6'
Contra1 Contra1' Contra2 Contra2' Contra3 Contra3' Contra4 Contra4' _ ⟷
(∀ (L1 :: 'l1 ==> 'l1' ==> bool) (L1' :: 'l1' ==> 'l1'' ==> bool).
Contr Cont C ::
(_, _, _, _, _, _, _, _, _, _, _, 'f1, 'f2) FGco ==> _) OO
rel_FGco L1' Co1' Co2' Co3' Co4' Co5' Co6' Contra1' Contra2' Contra3' Contra4' ≤
OO Co2') (C OO C')
(Co4 OO Co4') (Co5 OO Co5') (Co6 OO Co6')
(Contra1 OO Contra1') (Contra2 OO Contra2') (Contra3 OO Contra3') (Contra4 OO Contra4'))"
rel_FGco_neg_distr_cond :: "('co1 ==>
('co2 ==> 'co2' ==> bool) ==> ('co2' ==> 'co2'' ==> bool) ==>
('co3 ==> 'co3' ==> bool) ==> ('co3' ==> 'co3'' ==> bool) ==>
'co4 \Rightarrow 'co4 \Rightarrow bool) ==> co4' ==> ==>
('co5 ==> 'co5' ==> bool) ==> ('co5' ==> 'co5'' ==> bool) ==>
('co6 ==> 'co6' ==> bool) ==> ('co6' ==> 'co6'' ==> bool) ==>
('contra1 ==> 'contra1' ==> bool) ==> ('contra1' ==> 'contra1'' ==> bool) ==>
('contra2 ==> 'contra2' ==> bool) ==> ('contra2' ==> 'contra2'' ==> bool) ==>
('contra3 ==> 'contra3' ==> bool) ==> ('contra3' ==> 'contra3'' ==> bool) ==>
('contra4 ==> 🚫
('l1 × 'l1' × 'l1'' × 'f1 × 'f2) itself ==> bool" where
"rel_FGco_neg_distr_cond Co1 Co1' Co2 Co2' Co3 Co3' Co4 Co4' Co5 Co5' Co6 Co6'
Contra1 Contra1' Contra2 Contra2' Contra3 Contra3' Contra4 Contra4' _ ⟷
(∀ (L1 :: 'l1 ==> 'l1' ==> bool) (L1' :: 'l1' ==> 'l1'' ==> bool).
(1 OO L1') (Co1OO Co1') (Co2 OO Co2) (Co3 Co3)
(Co4 OO Co4') (Co5 OO Co5') (Co6 OO Co6')
(Contra1 OO Contra1') (Contra2 OO Contra2') (Contra3 OO Contra3') (Contra4 OO Contra4') ≤
(rel_FGco L1 Co1 Co2 Co3 Co4 Co5 Co6 Contra1 Contra2 Contra3 Contra4 ::
(_, _, _, _, _, _, _, _, _, _, _, 'f1, 'f2) FGco ==> _) OO
rel_FGco L1' Co1' Co2' Co3' Co4' Co5' Co6' Contra1' Contra2' Contra3' Contra4')"
‹ Sufficient conditions for subdistributivity over relation composition.›
rel_FGco_pos_distr_imp:
fixes Co1 :: "'co1 ==> 'co1' ==> bool" and Co1' :: "'co1' ==> 'co1'' ==> bool"
and Co2 :: "'co2 ==> 'co2' ==> bool" and Co2' :: "'co2' ==> 'co2'' ==> bool"
and Co5 :: "'co5 ==> 'co5' ==> bool" and Co5' :: "'co5' ==> 'co5'' ==> bool"
and tytok_F :: "('l1 × 'l1' × 'l1'' × 'co1 × 'co1' × 'co1'' × 'co5 × ∘ ∘ )"
'f2) itself"
and tytok_G :: "('co1 × 'co1' × 'co1'' × 'co2 × 'co2' × 'co2'' × 'f1) itself"
and tytok_FGco :: "('l1 × 'l1' × 'l1'' × 'f1 × 'f2) itself"
assumes "rel_F_pos_distr_cond
(rel_G Co1 Co2 Co3 Co4 Contra1 Contra2 :: (_, _, _, _, _, _, 'f1) G ==> _)
(rel_G Co1' Co2' Co3' Co4' Contra1' Contra2') Co3 Co3' Co6 Co6'
Contra1 Contra1' Contra3 Contra3' Contra4 Contra4' tytok_F"
Co3 Co3' C Co4' Contra1 Cont Contra1' Cont Contra2' tytok_G"
shows "rel_FGco_pos_distr_cond Co1 Co1' Co2 Co2' Co3 Co3' Co4 Co4' Co5 Co5' Co6 Co6'
Contra1 Contra1' emma map_FG:
rel_FGco_pos_distr_cond_def re
apply (intro allI)
apply rule )
apply (rule rel_F_pos_distr)
apply (rule assms(1))
apply (rule re)
apply (rule order_ref)+
apply (rule rel_G_pos_distr)
apply (rule assms(2))
apply (rule order_refl)+
done
rel_FGco_neg_distr_imp:
fixes Co1 :: "'co1 ==> (rel_FGl L1 L2L3 Co1 Co2 Co3 Co C Contra Contra Contr)
and Co2 :: "'co2 ==> 'co2' ==> bool" and Co2' :: "'co2' ==> 'co2'' ==> bool"
Co5:: "'co5 \Rightarrow > 'co5' ==> and Co5' :: "'co5' \Rightarrow 'co'' ==>
and tytok_F :: "('l1 × 'l1' × 'l1'' × 'co1 × 'co1' × 'co1'' × 'co5 × 'co5' × 'co5'' × 'f2) itself"
and tytok_G :: "('co1 × 'co1' × 'co1'' × 'co2 × 'co2' × 'co2'' × 'f1) itself"
and tytok_FGco :: "('l1 × 'l1' × 'l1'' × 'f1 × 'f2) itself"
assumes "rel_F_neg_distr_cond
(rel_G Co1 Co2 Co3 Co4 Contra1 Contra2 :: (_, _, _, _, _, _, 'f1) G ==> _)
(rel_G Co1' Co2' Co3' Co4' Contra1' Contra2') Co3 Co3' Co6 Co6'
Contra1 Contra1' Contra3 Contra3' Contra4 Contra4' tytok_F"
and "rel_G_neg_distr_cond Co3 Co3' Co4 Co4' Contra1 Contra1' Contra2 Contra2' tytok_G"
shows "rel_ Co1 Co1' Co2 C' Co3Co3'Co4 Co' Co5 Co5' Co C'
Contra1 Contra1' Contra2 Contra2' Contra3 Contra3' Contra4 Contra4' tytok_FGco"
unfolding rel_FGco_neg_distr_cond_def rel_FGco_def
apply (intro allI)
apply (rule order_trans[rotated])
apply (rule rel_F_neg_distr)
apply (rule assms(1))
apply (rule rel_F_mono)
apply (rule order_refl)+
apply (rule rel_G_neg_distr)
apply (rule assms(2))
apply (rule order_refl)+
done
rel_FGco_pos_distr_cond_eq:
fixes tytok :: "('l1 × 'l1' × 'l1'' × 'f1 × 'f2) itself"
shows "rel_FGco_pos_dis(=) (=) =) (=) (=)(=) (=) (=) (=) (=) (=) (=)
(=) (=) (=) (=) (=) (=) (=) (=) tytok"
apply (rule rel_FGco_pos_distr_imp)
apply (simp add: rel_G_eq)
apply (rule rel_F_pos_distr_cond_eq rel_G_pos_distr_cond_eq)+
done
rel_FGco_neg_distr_cond_eq:
fixes tytok :: "('l1 × 'l1' × 'l1'' × 'f1 × 'f2) itself"
shows "rel_FGco_neg_distr_cond (=) (=) (=) (=) (=) (=) (=) (=) (=) (=) (=) (=)
(=) (=) (=) (=) (=) (=) (=) (=) tytok"
apply (rule rel_FGco_neg_distr_imp)
apply (simp add: rel_G_eq)
apply (rule rel_F_neg_distr_cond_eq rel_G_neg_distr_cond_eq)+
done
"rell_FGco L1 = rel_FGco L1 (=) (=) (=) (=) (=) (=) (=) (=) (=) (=)"
"mapl_FGco l1 = map_FGco l1 id id id id id id id id id id"
('co1, 'co2, 'co3, 'co4, 'co5, 'co6,
'contra1, 'c, 'contra2, 'contra3,'contra4, 'f1, 'f2 FGcobd =
"(('co1, 'co2, 'co3, 'co4, 'contra1, 'contra2, 'f1) G,
'co3, 'co6, 'contra1, 'contra3, 'contra4, 'f2) Fbd"
set1_FGco :: "('l1, 'co1, 'co2, 'co3, 'co4, 'co5, 'co6,
'contra1, 'contra2, 'contra3, 'contra4, 'f1, 'f2) FGco ==> 'l1 set" where
bd_FGco :: "('co1, 'co2, 'co3, 'co4, 'co5, 'co6,
'contra1, 'contra2, 'contra3, 'contra4, 'f1, 'f2) FGcobd rel" where
"bd_FGco = bd_F"
set1_FGco_map: "s ∘
by (simp add: fun_eq_iff set1_FGco_def mapl_FGco_def map_FGco_def
mapl_F_def[symmetric] mapl_G_def[symmetric] mapl_G_id0
set1_F_map[THEN fun_cong, simplified])
bd_FGco_card_order: "card_order bd_FGco"
unfolding bd_FGco_def using bd_F_card_order .
bd_FGco_cinfinite: "cinfinite bd_FGco"
unfolding bd_FGco_def using bd_F_cinfinite .
set1_FGco_bound:
x :: "(_,'co1,'co2 'co, 'co4, 'co5, ''c,
'contra1, 'contra2, 'contra3, 'contra4, 'f1, 'f2) FGco"
shows "card_of (set1_FGco x) <o (bd_FGco :: ('co1, 'co2, 'co3, 'co4, 'co5, 'co6,
'contra1, 'contra2, 'contra3, 'contra4, 'f1, 'f2) FGcobd rel)"
unfolding set1_FGco_def bd_FGco_def using set1_F_bound .
mapl_FGco_cong:
"rel_FGl_pos Co1 Co1' Co C' Co Co3' Co4 Co4'
shows "mapl_FGco l1 x = mapl_FGco l1' x"
map_FGco_def mapl_G_def[sym[symmetric] mapl_F_def[[symmetric] mapl_G_id0
by (auto 0 3 intro: mapl_F_cong assms simp add: set1_FGco_def)
rell_FGco_mono_strong:
(L2 :: 'l ==> (L' :: 'l' \Rightarrow l2''' \Rightarrow bo)
and "∧ a b. a ∈ set1_FGco x ==> b ∈ set1_FGco y ==> L1 a b ==> L1' a b"
shows "rell_FGco L1' x y"
using assms(1) unfolding rell_FGco_def rel_FGco_def rel_G_eq rell_F_def[symmetric]
by (auto 0 3 intro: rell_F_mono_strong assms(2) simp add: set1 (L3(L3 :: 'l3\<Rightarrow (L3' : ''l3' ==> > b).
‹ Composition in a contravariant position›
('l1, 'co1, 'co2, 'co3, 'co4, 'co5, 'contra1,
'contra2, 'contra3, 'contra4, 'contra5, 'f1, 'f2) FGcontra =
"('l1, 'co1, 'co3, 'co1, 'co4, 'co5, ('contra1, 'contra2, 'contra3, 'contra4, 'co1, 'co2, 'f1) G,
'contra1, 'co'contra, ''f2) F"
‹ Rightarrow> _) OO
"rel_FGcontra L1 Co1 Co2 Co3 Co4 Co5 Contra1 Contra2 Contra3 Contra4 Contra5 =
rel_F L1 Co1 Co3 Co1 Co4 Co5 (rel_G Contra1 Contra2 Contra3 Contra4 Co1 Co2) Contra1 Contra5"
"map_FGcontra l1 co1 co2 co3 co4 co5 contra1 contra2 contra3 contra4 contra5 =
map_F l1 co1 co3 co1 co4 co5 (map_G contra1 contra2 contra3 contra4 co1 co2) contra1 contra5"
rel_FGcontra_mono:
"[ L1 ≤ L1'; Co1 ≤ Co1'; Co2 ≤ Co2'; Co3 ≤ Co3'; Co4 ≤ Co4'; Co5 ≤ Co5';
Contra1' ≤ Contra1; Contra2' ≤ Contra2; Contra3' ≤ L1' L2' L' Co' Co' Co' Co4 C' Contra2' Con' Contr' ≤
Contra4' ≤ Contra4; Contra5' ≤ Contra5 ] ==>
rel_FGcontra L1 Co1 Co2 Co3 Co4 Co5 Contra1) (Co1 OO Co1' (Co2 O Co') (Co3 O C') (Co4 OO C')
rel_FGcontra L1' Co1' Co2' Co3' Co4' Co5' Contra1' Contra2' Contra3' Contra4' Contra5'"
unfolding rel_FGcontra_def
apply (assumption)+
apply (rule rel_G_mono)
apply (assumption)+
done tion rel_FGl_neg_distr_cond :: "('co1 ==> Rightarrow> bool)==> ==> ==> Rig>
rel_FGcontra_eq: "rel_FGcontra (=) (=) (=) (=) (=) (=) (=) (=) (=) (=) (=) = (=)"
unfolding rel_FGcontra_def by (simp add: rel_F_eq rel_G_eq)
rel_FGcontra_conversep:
"rel_FGcontra L1-1 -1 Co1-1 -1 Co2-1 \<inverse( \\ Ri> (co2' ==> bo) \Rightarrow
(rel_FGcontra L1 Co1 Co2 Co3 Co4 Co5 Contra1 Contra2 Contra3 Contra4 Contra5)-1 -1 "
unfolding rel_FGcontra_def by (simp add: rel_F_conversep rel_G_conversep)
map_FGcontra_id0: "map_FGcontra id id id id id id id id id id id = id"
unfolding map_FGcontra_def by (simp add: map_F_id0 map_G_id0)
map_FGcontra_comp:
"map_FGcontra l1 co1 co2 co3 co4 co5 contra1 contra2 contra3 contra4 contra5 ∘
map_FGcontra l1' co1' co2' co3' co4' co5' contra1' contra2' contra3' contra4' contra5' =
map_FGcontra (l1 ∘ ==> \Rightarrow > (co' ==> b\Rightarrow >
(contra1' ∘ contra1) (contra2' ∘ contra2) (contra3' ∘ contra3)
(contra4' ∘ contra4) (contra5' ∘ contra5)"
unfolding map_FGcontra_def by (simp add: map_F_comp map_G_comp)
map_FGcontra_parametric:
"rel_fun (rel_fun L1 L1') (rel_fun (rel_fun Co1 Co1') (rel_fun (rel_fun Co2 Co2')
(rel_fun (rel_fun Co3 Co3') (rel_fun (rel_fun Co4 Co4') (rel_fun (rel_fun Co5 Co5')
(rel_fun (rel_fun Contra1' Contra1) (rel_fun (rel_fun Contra2' Contra2)
rel_fun (rel_fun Con' Contra3) (r (rel_fun Contra4' Contra)
(rel_fun (rel_fun Contra5' Contra5)
(rel_fun (rel_FGcontra L1 Co1 Co2 Co3 Co4 Co5 Contra1 Contra2 Contra3 Contra4 Contra5)
(rel_FGcontra L1' Co1' Co2' Co3' Co4' Co5' Contra1' Contra2' Contra3' Contra4' Contra5'))))))))))))
map_FGcontra map_FGcontra"
unfolding rel_FGcontra_def map_FGcontra_def
apply (intro rel_funI)
apply (elim map_F_rel_cong map_G_rel_cong)
apply (erule (2) rel_funE)+
done
rel_FGcontra_pos_distr_cond :: "('co1 ==> 'co1' ==> bool) ==> ('co1' ==> 'co1'' ==> bool) ==>
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
('co3 ==> 'co3' ==> bool) ==> ('co3' ==> 'co3'' ==> bool) ==>
('co4 ==> 'co4' ==> bool) ==> ('co4' ==> 'co4'' ==> bool) ==>
('co5 ==> 'co5' ==> bool) ==> ('co5' ==> 'co5'' ==> bool) ==>
('contra1 ==> 'contra1' ==> bool) ==> ('contra1' ==> 'contra1'' ==> bool) ==>
('contra2 ==> 'contra2' ==> bool) ==> ('contra2' ==> ('contra2 ==> bool) \Rightarrow ('ontra' ==> bo) \Rightarrow
('contra3 ==> 'contra3' ==> bool) ==> ('contra3' ==> 'contra3'' ==> bool) ==>
('contra4 ==> 'contra4' ==> bool) ==> ('contra4' ==> 'contra4'' ==> bool) ==>
('contra5 ==> 'contra5' ==> bool) ==> ('contra5' ==> 'contra5'' ==> bool) ==> ('contra3 ==> 'contra3' ==> 🚫
('l1 × 'l1' × 'l1'' × 'f1 × 'f2) itself ==> bool" where
"rel_FGcontra_pos_distr_cond Co1 Co1' Co2 Co2' Co3 Co3' Co4 Co4' Co5 Co5'
Contra1 Contra1' Contra2 Contra2' Contra3 Contra3' Contra4 Contra4' Contra5 Contra5' _ ⟷
(∀ contra' ==> ' ==> bool) ==>
(rel_FGcontra L1 Co1 Co2 Co3 Co4 Co5 Contra1 Contra2 Contra3 Contra4 Contra5 ::
(_, _, _, _, _, _, _, _, _, _, _, 'f1, 'f2) FGcontra ==> _) OO
rel_FGcontra L1' Co1' Co2' Co3' Co4' Co5' Contra1' Contra2' Contra3' Contra4' Contra5' ≤
rel_FGcontra (L1 OO L1') (Co1 OO Co1') (Co2 OO Co2') (Co3 OO Co3') (Co4 OO Co4') (Co5 OO Co5')
(Contra1 OO Contra1') (Contra2 OO Contra2') (Contra3 OO Contra3')
(Contra4 OO Contra4') (Contra5 OO Contra5'))"
rel_FGcontra_neg_distr_cond :: "('co1 ==> 'co1' ==> ('l1 × > 'l2 × 'l3 \times 'l3 × \times > f2) it \<Rightarrow
('co2 ==> 'co2' ==> bool) ==> ('co2' ==> 'co2'' ==> bool) ==>
('co3 ==> 'co3' ==> bool) ==> ('co3' ==> 'co3'' ==> bool) ==>
('co4 ==> 'co4' ==> bool) ==> ('co4' ==> 'co4'' ==> bool) ==>
('co5 ==> 'co5' ==> bool) ==> ('co5' ==> 'co5'' ==> bool) ==>
('contra1 ==> 'contra1' ==> bool) ==> ('contra1' ==> 'contra1'' ==> bool) ==>
('contra2 ==> 'contra2' ==> bool) ==> ('contra2' ==> 'contra2'' ==> bool) ==>
('contra3 ==> 'contra3' ==> bool) ==> ('contra3' ==> 'contra3'' ==> bool) ==>
('contra4 \<Rightarrow
('contra5 ==> 'contra5' ==> bool) ==> ('contra5' ==> 'contra5'' ==> bool) ==>
('l1 × 'l1' × 'l1'' × 'f1 × 'f2) itself ==> bool" where
"rel_FGcontra_neg_distr_cond Co1 Co1' Co2 Co2' Co3 Co3' Co4 Co4' Co5 Co5'
Contra1 Contra1' Contra2 Contra2' Contra3 Contra3' Contra4 Contra4' Contra5 Contra5' _ ⟷
(∀ (L1 :: 'l1 ==> 'l1' ==> f>(L1 :: :: l1 \ ==> Rightarrow> bool) (L1' :: 'l1 ==> 🚫
rel_FGcontra (L1 OO L1') (Co1 OO Co1') (Co2 OO Co2') (Co3 OO Co3') (Co4 OO Co4') (Co5 OO Co5')
(Contra1 OO Contra1') (Contra2 OO Contra2') (Contra3 OO Contra3')
OO Con') (Contra5 OO C Contra5') \le >
(rel_FGcontra L1 Co1 Co2 Co3 Co4 Co5 Contra1 Contra2 Contra3 Contra4 Contra5 ::
(_, _, _, _, _, _, _, _, _, _, _, 'f1, 'f2) FGcontra(L3 :: 'l3==> ) (L3' :: 'l3' ==> > bool.
rel_FGcontra L1' Co1' Co2' Co3' Co4' Co5' Contra1' Contra2' Contra3' Contra4' Contra5')"
‹ Sufficient conditions for subdistributivity over relation composition.›
rel_FGcontra_pos_distr_imp:
fixes Co1 :: "'co1 ==> 'co1' ==> bool" and Co1' :: "'co1' ==> 'co1'' ==> bool"
Co3 :: "'co3 ==> " and Co' ::"'co3' ==> Rightarro> bool"
and Contra1 :: "'contra1 ==> 'contra1' ==> bool" and Contra1' :: "'contra1' ==> 'contra1'' ==> bool"
and Contra2 :: "'contra2 ==> 'contra2' ==> bool" and Contra2' :: "'contra2' ==> 'contra2'' ==> bool"
and tytok_F :: "('l1 × 'l1' × 'l1'' × Co') (C OO Contra2') (Con O C') (Con OO C') ≤
'f2) itself"
and tytok_G :: "('contra1 × 'contra1' × 'contra1'' × 'contra2 × Co1 C C Co Contra1 Contra2 C C :
'f1) itself"
and tytok_FGcontra :: "('l1 × 'l1' × 'l1'' × 'f1 × 'f2) itself"
assumes "rel_F_pos_distr_cond Co1 Co1'Co4 C Co4' Co Co5'
(rel_G Contra1 Contra2 Contra3 Contra4 Co1 Co2 :: (_, _, _, _, _, _, 'f1) G ==> _)
(rel_G Contra1' Contra2' Contra3' Contra4' Co1' Co2')
Contra1 Contra1' Contra5 Contra5' tytok_F"
and "rel_G_neg_distr_cond Contra3 Contra3' Contra4 Contra4' Co1 Co1' Co2 Co2' tytok_G"
shows "rel_FGcontra_pos_distr_cond Co1 Co1' Co2 Co2' Co3 Co3' Co4 Co4' Co5 Co5'
Contra1 Contra1' Contra2 Contra2' Contra3 Contra3' Contra4 Contra4' Contra5 Contra5'
tytok_FGcontra"
unfolding rel_FGcontra_pos_distr_cond_def rel_FGcontra_def
apply (intro allI)
apply (rule order_trans)
apply (rule rel_F_pos_distr)
apply (rule assms(1))
apply (rule rel_F_mono)
apply (rule order_refl)+
apply (rule rel_G_neg_distr)
apply (rule assms(2))
apply (rule order_refl)+
done
rel_FGcontra_neg_distr_imp:
Co1 :: 'c \<Rightarrow > bool" and Co1' :: "'co1 ==> <Rightarrow
and Co3 :: "'co3 ==> 'co3' ==> bool" and Co3' :: "'co3' ==> 'co3'' ==> bool"
and Contra1 :: "'contra1 ==> 'contra1' ==> bool" and Contra1' :: "'contra1' ==> 'contra1'' ==> bool"
and Contra2 :: "'contra2 ==> 'contra2' ==> bool" and Contra2' :: "'contra2' ==> 'contra2'' ==> bool"
and tytok_F :: "('l1 × 'l1' × 'l1'' × 'co1 × 'co1' × 'co1'' × 'co3 × 'co3' × 'co3'' ×
'f2) itself"
and tytok_G :: "('contra1 × 'contra1' × 'contra1'' × 'contra2 × 'contra2' × 'contra2'' ×
'f1) itself"
and tytok_FGcontra :: "('l1 × 'l1' × 'l1'' × 'f1 × 'f2) itself"
assumes "rel_F_neg_distr_cond Co1 Co1' Co4 Co4' Co5 Co5'
(rel_G Contra1 Contra2 Contra3 Contra4 Co1 rel_F:
Contra1' Cont' Con' Con' Co' Co2)
Contra1 Contra1' Contra5 Contra5' tytok_F"
and "rel_G_pos_distr_cond Contra3 Contra3'and Co2 :: "'co2 ==> Co2' : "'o2' ==> bool"
shows "rel_FGcontra_neg_distr_cond Co1 Co1' Co2 Co2' Co3 Co3' Co4 Co4' Co5 Co5'
Contra1 Contra1' Contra2 Contra2' Contra3 Contra3' Contra4 Contra4' Contra5 Contra5' tytok_FGcontra"
unfolding rel_FGcontra_neg_distr_cond_def rel_FGcontra_def
apply (intro allI)
apply (rule order_trans[rotated])
apply (rule rel_F_neg_distr)
apply (rule assms(1))
apply (rule rel_F_mono)
apply (rule order_refl)+
(ule rel_G_pos_di)
apply (rule assms(2))
apply (rule order_refl)+
done
rel_FGcontra_pos_distr_cond_eq:
'l1' \times 'f1\<times
shows "rel_FGcontra_pos_distr_cond (=) (=) (=) (=) (=) (=) (=) (=) (=) (=)
(=) (=) (=) (=) (=) (=) (=) (=) (=) (=) tytok"
apply (rule rel_FGcontra_pos_distr_imp)
apply (simp add: rel_G_eq)
apply (rule rel_F_pos_distr_cond_eq rel_G_neg_distr_cond_eq)+
done
rel_FGcontra_neg_distr_cond_eq:
ty :: "('l × \\ tim> 'f2 itself"
shows "rel_FGcontra_neg_distr_cond (=) (=) (=) (=) (=) (=) (=) (=) (=) (=)
(=) (=) (=) (=) (=) (=) (=) (=) (=) (=) tytok"
apply (rule rel_FGcontra_neg_distr_imp)
apply (simp add: rel_G_eq)
apply (rule rel_F_neg_distr_cond_eq rel_G_pos_distr_cond_eq)+
done
"rell_FGcontra L1 = rel_FGcontra L1 (=) (=) (=) (=) (=) (=) (=) (=) (=) (=)"
"mapl_FGcontra l1 = map_FGcontra l1 id id id id id id id id id id"
('co1, 'co2, 'co3, 'co4, 'co5, 'contra1, 'contra2, 'contra3, 'contra4, 'contra5,
'f1, 'f2) FGcontrabd =
"('co1, 'co4, 'co5, ('contra1, 'contra2, 'contra3, 'contra4, 'co1, 'co2, 'f1) G,
'contra1, 'contra5, 'f2) Fbd"
set1_FGcontra :: "('l1, 'co1, 'co2, 'co3, 'co4, 'co5,
'contra1, 'contra2, 'contra3, 'contra4, 'contra5, 'f1, 'f2) FGcontra ==> ('l1', 'l2', 'co1', 'co2', 'contra1','con', 'f1) G ×
set1_FGcontra x = s x""
bd_FGcontra :: "('co1, 'co2, 'co3, 'co4, 'co5,
'contra1, 'contra2, 'contra3, 'contra4, 'contra5, 'f1, 'f2) FGcontrabd rel" where
"bd_FGco= bd_F"
set1_FGcontra_map: "set1_FGcontra ∘ mapl_FGcontra l1 = image l1 ∘ set1_FGcontra"
by (simp add: fun_eq_iff set1_FGcontra_def mapl_FGcontra_def map_FGcontra_def
mapl_F_def[symmetric] map[symmetric] mapl_G_id0
set1_F_map[THEN fun_cong, simplified])
bd_FGcontra_card_order: "card_order bd_FGcontra"
unfolding bd_FGcontra_def using bd_F_card_order .
bd_FGcontra_cinfinite: "cinfinite bd_FGcontra"
unfolding bd_FGcontra_def using bd_F_cinfinite .
set1_FGcontra_bound:
fixes x :: "(_, 'co1, 'co2, 'co3, 'co4, 'co5,
'contra1, 'contra2, 'contra3, 'contra4, 'contra5, 'f1, 'f2) FGcontra"
shows "card_of (set1_FGcontra x) <o × l' × × ×
'contra1, 'contra2, 'contra3, 'contra4, 'contra5, 'f1, 'f2) FGcontrabd rel)"
unfolding set1_FGcontra_def bd_FGcontra_def using set1_F_bound .
mapl_FGcontra_contrang:
assumes "∧ z. z ∈ set1_FGcontra x ==> l1 z = l1' z"
shows "mapl_FGcontra l1 x = mapl_FGcontra l1' x"
unfolding mapl_FGcontra_def map_FGcontra_def mapl_G_def[symmetric] mapl_F_def[symmetric] mapl_G_id0
by (auto 0 3 intro: mapl_F_cong assms simp add: set1_FGcontra_def)
rell_FGcontra_mono_strong:
assumes "rell_FGcontra L1 x y"
and "∧ a b. a ∈ set1_FGcontra x ==> b ∈ set1_FGcontra y ==> L1 a b ==> L1' a b"
shows "rell_FGcontra L1' x y"
using assms(1) unfolding rell_FGcontra_def rel_FGcontra_def rel_G_eq rell_F_def[symmetric]
by (auto 0 3 intro: rell_F_mono_strong assms(2) simp add: set1_FGcontra_def)
‹ Composition in a fixed position› Con' CContra3 ontra3' Contra Contra' ty"
('l1, 'l2, 'co1, 'co2, 'contra1, 'contra2, 'f1, 'f2, 'f3,and "rel_G_pos_dist Co1 Co1' C Co2 Cont Cont' Contra C' tytokG"
"('l1, 'l2, 'f2, 'co1, 'co2, 'f4, 'contra1, 'contra2, 'f6, ('f1, 'f2, 'f3, 'f4, 'f5, 'f6, 'f7) G) F"
‹ The type variables @{typ 'f2}, @{typ 'f4} and @{typ 'f6} have each been merged. ›
"rel_FGf L1 L2 Co1 Co2 Contra1 Contra2 =
rel_F L1 L2 (=) Co1 Co2 (=) Contra1 Contra2 (=)"
"map_FGf l1 l2 co1 co2 contra1 contra2 = map_F l1 l2 id co1 co2 id contra1 contra2 id"
rel_FGf_mono:
"[ L1 ≤ Contra1 Contra1 Cont Contra2 Con Contr' Contra4 Contra4' tyt"
rel_FGf L1 L2 Co1 Co2 Contra1 Contra2 ≤ nfolding rel_FGl_pos_distr_cond_ef rel_
unfolding rel_FGf_def by (rule rel_F_mono) (auto)
rel_FGf_eq: "rel_FGf (=) (=) (=) (=) (=) (=) = (=)"
unfolding rel_FGf_def by (simp add: rel_F_eq)
rel_FGf_conversep:
"rel_FGf L1-1 -1 (1))
unfolding rel_FGf_def by (simp add: rel_F_conversep[symmetric])
map_FGf_id0: "map_FGf id id id id id id =
unfolding map_FGf_def by (simp add: map_F_id0)
map_FGf_comp: "map_FGf l1 l2 co1 co2 contra1 contra2 ∘
map_FGf l1' l2' co1' co2' contra1' contra2' =
map_FGf (l1 ∘
unfolding map_FGf_def by (simp add: map_F_comp)
map_FGf_parametric:
rel_fun (rel_fu L1 L1') (re (rel_fun L2 L')
(rel_fun (rel_fun Co1 Co1') (rel_fun (rel_fun Co2 Co2')
(rel_fun (rel_fun Contra1' Contra1) (rel_fun (rel_fun Contra2' Contra2)
(rel_fun (rel_FGf L1 L2 Co1 Co2 Contra1 Contra2)
(rel_FGf L1' L2' Co1' Co2' Contra1' Contra2')))))))
map_FGf map_FGf"
unfolding rel_FGf_def map_FGf_def
apply (intro rel_funI)
apply (elim map_F_rel_cong)
apply (simp_all)
apply (erule (2) rel_funE)+
done
rel_FGf_pos_distr_cond :: "('co1 ==> 'co1' ==> bool) ==> ('co1' ==> 'co1'' ==> bool) ==>
('co2 ==> 'co2' ==> bool) ==> ('co2' ==> 'co2'' ==> bool) ==>
('contra1 ==> 'contra1' ==> bool) ==> ('contra1' ==> 'contra1'' ==> bool) ==>
('contra2 ==> 'contra2' ==> bool) ==> ('contra2' ==> 'contra2'' ==> bool) ==>
('l1 × 'l1' × 'l1'' × 'l2 × 'l2' × 'l2'' ×
'f1 × 'f2 × 'f3 × 'f4 × 'f5 × 'f6 × 'f7) itself ==> bool" where
"rel_FGf_pos_distr_cond Co1 Co1' Co2 Co2' Contra1 Contra1' Contra2 Contra2' _ ⟷
(∀ (L1 :: 'l1 ==> 'l1' ==> bool) (L1' :: 'l1' ==> 'l1'' ==> bool)
(L2 :: 'l2 ==> 'l2' ==> bool) (L2' :: 'l2' ==> 'l2'' ==> bool).
(rel_FGf L1 L2 Co1 Co2 Contra1 Contra2 ::
> _) OO
rel_FGf L1' L2' Co1' Co2' Contra1' Contra2' ≤
rel_FGf (L1 OO L1') (L2 OO L2') (Co1 OO Co1') (Co2 OO Co2')
(Contra1 OO Contra1') (Contra2 OO Contra2'))"
rel_FGf_neg_distr_cond :: "('co1 ==> 'co1' ==> bool) ==> ('co1' ==> 'co1'' ==> bool) ==>
==> > 'co2' ==>
('contra1 ==> 'contra1' ==> bool) ==> ('contra1' ==> 'contra1'' ==> bool) ==>
('contra2 ==> 'contra2' ==> bool) ==> ('contra2' ==> 'contra2'' ==> bool) ==>
('l1 × 'l1' × 'l1'' × 'l2 × 'l2' × 'l2'' ×
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
"rel_FGf_neg_distr_cond Co1 Co1' Co2 Co2' Contra1 Contra1' Contra2 Contra2' _ ⟷
(∀ (L1 :: 'l1 ==> 'l1' ==> bool) (L1' :: 'l1' ==> 'l1'' ==> bool)
(L2 :: 'l2 ==> 'l2' ==> bool) (L2' :: 'l2' ==> 'l2'' ==> bool).
rel_FGf (L1 OO L1') (L2 OO L2') (Co1 OO Co1') (Co2 OO Co2')
(Contra1 OO Contra1') (Contra2 OO Contra2') ≤
java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 45
(_, _, _, _, _, _,'f1, 'f2, 'f3, 'f4, 'f5, 'f6, 'f7) FGf ==> _) OO
rel_FGf L1' L2' Co1' Co2' Contra1' Contra2')"
‹ × × × ×
rel_FGf_pos_distr_imp:
fixes tytok_F :: "('l1 × 'l1' × 'l1'' × 'l2 × 'l2' × 'l2'' × 'f2 × 'f2 × 'f2 ×
('f1, 'f2, 'f3, 'f4, 'f5, 'f6, 'f7) G) itself"
and tytok_FGf :: "('l1 × 'l1' × 'l1'' × 'l2 × 'l2' × 'l2'' ×
'f1 × 'f2 × 'f3 × 'f4 × 'f5 × 'f6 × 'f7) itself"
assumes "rel_F_pos_distr_cond Co1 Co1' Co2 Co2' ((=) :: 'f4 ==> _) ((=) :: 'f4 ==> _)
Contra1 Contra1' Contra2 Contra2' ((=) :: 'f6 ==> _) ((=) :: 'f6 ==> _) tytok_F"
shows "rel_FGf_pos_distr_cond Co1 Co1' Co2 Co2' Contra1 Contra1' Contra2 Contra2' tytok_FGf"
unfolding rel_FGf_pos_distr_cond_def rel_FGf_def
apply (intro allI)
apply (rule order_trans)
apply (rule rel_F_pos_distr)
apply (rule assms(1))
apply (rule rel_F_mono)
apply (simp_all add: eq_OO)
done
rel_FGf_neg_distr_imp:
fixes tytok_F :: "('l1 × 'l1' × 'l1'' × 'l2 × 'l2' × 'l2'' × 'f2 × 'f2 × 'f2 ×
('f1, 'f2, 'f3, 'f4, 'f5, 'f6, 'f7) G) itself"
and tytok_FGf :: "('l1 × 'l1' × 'l1'' × 'l2 × 'l2' × 'l2'' × "rel_G_negdistr_c Co1 C' Co2 Co2'Contra1 C' Contr Contra2' tytytok_G""
'f1 × 'f2 × 'f3 × 'f4 × shows "rel_FGl_neg_distr_ Co1 Co Co1' Co Co2 C Co3' Co4 Co4'
assumes "rel_F_neg_distr_cond Co1 Co1' Co2 Co2' ((=) :: 'f4 ==> _) ((=) :: 'f4 ==> _)
Contra1 Contra1' Contra2 Contra2' ((=) :: 'f6 ==> _) ((=) :: 'f6 ==> _) tytok_F"
shows "rel_FGf_neg_distr_cond Co1 Co1' Co2 Co2' Contra1 Contra1' Contra2 Contra2' tytok_FGf"
unfolding rel_FGf_neg_distr_cond_def rel_FGf_def
apply (intro allI)
apply (rule order_trans[rotated])
apply (rule rel_F_neg_distr)
apply (rule assms(1))
apply (rule rel_F_mono)
apply (simp_all add: eq_OO)
done
rel_FGf_pos_distr_cond_eq:
fixes tytok :: "('l1 × 'l1' × 'l1'' × 'l2 × 'l2' × 'l2'' ×
'f1 × (r(rule rel)
shows "rel_FGf_pos_distr_cond (=) (=) (=) (=) (=) (=) (=) (=) tytok"
by (intro rel_FGf_pos_distr_imp rel_F_pos_distr_cond_eq)
rel_FGf_neg_distr_cond_eq:
fixes tytok :: "('l1 × 'l1' ×
'f1 ×
"rel_FGfneg_dis (=) =) (=(=) (=) (= (=) (=) ((=)tytok"
by (intro rel_FGf_neg_distr_imp rel_F_neg_distr_cond_eq)
"rell_FGf L1 L2 = rel_FGf L1 L2 (=) (=) (=) (=)"
"mapl_FGf l1 l2 = map_FGf l1 l2 id id id id"
('co1, 'co2, 'contra1, 'contra2, 'f1, 'f2, 'f3, 'f4, 'f5, 'f6, 'f7) FGfbd =
"('co1, 'co2, 'f4, 'contra1, 'contra2, 'f6, ('f1, 'f2, 'f3, 'f4, 'f5, 'f6, 'f7) G) Fbd"
set1_FGf :: "('l1, 'l2, 'co1, 'co2, 'contra1, 'contra2,
'f1, 'f2, 'f3, 'f4, 'f5, 'f6, 'f7) FGf ==> 'l1 set" where
"set1_FGf x = set1_F x"
set2_FGf :: "('l1, 'l2, 'co1, 'co2, 'contra1, 'contra2,
'f1, 'f2, 'f3, 'f4, 'f5, 'f6, 'f7) FGf ==> 'l2 set" where
"set2_FGf x = set2_F x"
bd_FGf :: "('co1, 'co2, 'contra1, 'contra2, 'f1, 'f2, 'f3, 'f4, 'f5, 'f6, 'f7) FGfbd rel"
where "bd_FGf = bd_F"
set1_FGf_map: "set1_FGf ∘ mapl_FGf l1 l2 = image l1 ∘ set1_FGf"
by (simp add: fun_eq_iff set1_FGf_def mapl_FGf_def map_FGf_def mapl_F_def[symmetric]
set1_F_map[THEN fun_cong, simplified])
bd_FGf_card_order: "card_order bd_FGf"
unfolding bd_FGf_def using bd_F_card_order .
bd_FG "cinfini b"
unfolding bd_FGf_def using bd_F_cinfinite .
fixes x :: "(_, _, 'co1, 'co2, 'contra1, 'contra2, 'f1, 'f2, 'f3, 'f4, 'f5, 'f6, 'f7) FGf"
shows set1_FGf_bound: "card_of (set1_FGf x) <o (bd_FGf :: ('co1, 'co2, 'contra1, 'contra2,
'f1, 'f2, 'f3, 'f4, 'f5, 'f6, 'f7) FGfbd rel)"
and set2_FGf_bound: "card_of (set2_FGf x) <o (bd_FGf :: ('co1, 'co2, 'contra1, 'contra2,
'f1, 'f2, 'f3, 'f4, 'f5, 'f6, 'f7) FGfbd rel)"
unfolding set1_FGf_def set2_FGf_def bd_FGf_def by (rule set1_F_bound set2_F_bound)+
mapl_FGf_cong:
\And z. z\<in and ∧ \Longrightarrow l2 z = l2 z"
shows "mapl_FGf l1 l2 x = mapl_FGf l1' l2' x"
unfolding mapl_FGf_def map_FGf_def mapl_F_def[symmetric]
by (auto 0 3 intro: mapl_F_cong assms simp add: set1_FGf_def set2_FGf_def)
rell_FGf_mono_strong:
assumes "rell_FGf L1 L2 x y"
and "∧ a b. a ∈ set1_FGf x ==> b ∈ set1_FGf y ==> L1 a b ==> L1' a b"
and "∧ a b. a ∈ set2_FGf x ==> b ∈ set2_FGf y ==> L2 a b ==> L2' a b"
shows "rell_FGf L1' L2' x y"
using assms(1) unfolding rell_FGf_def rel_FGf_def rell_F_def[symmetric]
by (auto 0 3 intro: rell_F_mono_strong assms(2-3) simp add: set1_FGf_def set2_FGf_def)
Messung V0.5 in Prozent C=67 H=95 G=81
¤ Dauer der Verarbeitung: 0.22 Sekunden
¤
*© Formatika GbR, Deutschland