Theory Transport_Functions_Base
section ‹Transport For Functions›
subsection ‹Basic Setup›
theory Transport_Functions_Base
imports
Monotone_Function_Relator
Transport_Base
begin
paragraph ‹Summary›
text ‹Basic setup for closure proofs. We introduce locales for the syntax,
the dependent relator, the non-dependent relator, the monotone dependent relator,
and the monotone non-dependent relator.›
definition "flip2 f x1 x2 x3 x4 ≡ f x2 x1 x4 x3"
lemma flip2_eq: "flip2 f x1 x2 x3 x4 = f x2 x1 x4 x3"
unfolding flip2_def by simp
lemma flip2_eq_rel_inv [simp]: "flip2 R x y = (R y x)¯"
by (intro ext) (simp only: flip2_eq rel_inv_iff_rel)
lemma flip2_flip2_eq_self [simp]: "flip2 (flip2 f) = f"
by (intro ext) (simp add: flip2_eq)
lemma flip2_eq_flip2_iff_eq [iff]: "flip2 f = flip2 g ⟷ f = g"
unfolding flip2_def by (intro iffI ext) (auto dest: fun_cong)
paragraph ‹Dependent Function Relator›
locale transport_Dep_Fun_Rel_syntax =
t1 : transport L1 R1 l1 r1 +
dfro1 : hom_Dep_Fun_Rel_orders L1 L2 +
dfro2 : hom_Dep_Fun_Rel_orders R1 R2
for L1 :: "'a1 ⇒ 'a1 ⇒ bool"
and R1 :: "'a2 ⇒ 'a2 ⇒ bool"
and l1 :: "'a1 ⇒ 'a2"
and r1 :: "'a2 ⇒ 'a1"
and L2 :: "'a1 ⇒ 'a1 ⇒ 'b1 ⇒ 'b1 ⇒ bool"
and R2 :: "'a2 ⇒ 'a2 ⇒ 'b2 ⇒ 'b2 ⇒ bool"
and l2 :: "'a2 ⇒ 'a1 ⇒ 'b1 ⇒ 'b2"
and r2 :: "'a1 ⇒ 'a2 ⇒ 'b2 ⇒ 'b1"
begin
notation L1 (infix ‹≤⇘L1⇙› 50)
notation R1 (infix ‹≤⇘R1⇙› 50)
notation t1.ge_left (infix ‹≥⇘L1⇙› 50)
notation t1.ge_right (infix ‹≥⇘R1⇙› 50)
notation t1.left_Galois (infix ‹⇘L1⇙⪅› 50)
notation t1.ge_Galois_left (infix ‹⪆⇘L1⇙› 50)
notation t1.right_Galois (infix ‹⇘R1⇙⪅› 50)
notation t1.ge_Galois_right (infix ‹⪆⇘R1⇙› 50)
notation t1.right_ge_Galois (infix ‹⇘R1⇙⪆› 50)
notation t1.Galois_right (infix ‹⪅⇘R1⇙› 50)
notation t1.left_ge_Galois (infix ‹⇘L1⇙⪆› 50)
notation t1.Galois_left (infix ‹⪅⇘L1⇙› 50)
notation t1.unit (‹η⇩1›)
notation t1.counit (‹ε⇩1›)
notation L2 (‹(≤⇘L2 (_) (_)⇙)› 50)
notation R2 (‹(≤⇘R2 (_) (_)⇙)› 50)
notation dfro1.right_infix (‹(_) ≤⇘L2 (_) (_)⇙ (_)› [51,51,51,51] 50)
notation dfro2.right_infix (‹(_) ≤⇘R2 (_) (_)⇙ (_)› [51,51,51,51] 50)
notation dfro1.o.ge_right (‹(≥⇘L2 (_) (_)⇙)› 50)
notation dfro2.o.ge_right (‹(≥⇘R2 (_) (_)⇙)› 50)
notation dfro1.ge_right_infix (‹(_) ≥⇘L2 (_) (_)⇙ (_)› [51,51,51,51] 50)
notation dfro2.ge_right_infix (‹(_) ≥⇘R2 (_) (_)⇙ (_)› [51,51,51,51] 50)
notation l2 (‹l2⇘(_) (_)⇙›)
notation r2 (‹r2⇘(_) (_)⇙›)
sublocale t2 : transport "(≤⇘L2 x (r1 x')⇙)" "(≤⇘R2 (l1 x) x'⇙)" "l2⇘x' x⇙" "r2⇘x x'⇙" for x x' .
notation t2.left_Galois (‹(⇘L2 (_) (_)⇙⪅)› 50)
notation t2.right_Galois (‹(⇘R2 (_) (_)⇙⪅)› 50)
abbreviation "left2_Galois_infix y x x' y' ≡ (⇘L2 x x'⇙⪅) y y'"
notation left2_Galois_infix (‹(_) ⇘L2 (_) (_)⇙⪅ (_)› [51,51,51,51] 50)
abbreviation "right2_Galois_infix y' x x' y ≡ (⇘R2 x x'⇙⪅) y' y"
notation right2_Galois_infix (‹(_) ⇘R2 (_) (_)⇙⪅ (_)› [51,51,51,51] 50)
notation t2.ge_Galois_left (‹(⪆⇘L2 (_) (_)⇙)› 50)
notation t2.ge_Galois_right (‹(⪆⇘R2 (_) (_)⇙)› 50)
abbreviation (input) "ge_Galois_left_left2_infix y' x x' y ≡ (⪆⇘L2 x x'⇙) y' y"
notation ge_Galois_left_left2_infix (‹(_) ⪆⇘L2 (_) (_)⇙ (_)› [51,51,51,51] 50)
abbreviation (input) "ge_Galois_left_right2_infix y x x' y' ≡ (⪆⇘R2 x x'⇙) y y'"
notation ge_Galois_left_right2_infix (‹(_) ⪆⇘R2 (_) (_)⇙ (_)› [51,51,51,51] 50)
notation t2.right_ge_Galois (‹(⇘R2 (_) (_)⇙⪆)› 50)
notation t2.left_ge_Galois (‹(⇘L2 (_) (_)⇙⪆)› 50)
abbreviation "left2_ge_Galois_left_infix y x x' y' ≡ (⇘L2 x x'⇙⪆) y y'"
notation left2_ge_Galois_left_infix (‹(_) ⇘L2 (_) (_)⇙⪆ (_)› [51,51,51,51] 50)
abbreviation "right2_ge_Galois_left_infix y' x x' y ≡ (⇘R2 x x'⇙⪆) y' y"
notation right2_ge_Galois_left_infix (‹(_) ⇘R2 (_) (_)⇙⪆ (_)› [51,51,51,51] 50)
notation t2.Galois_right (‹(⪅⇘R2 (_) (_)⇙)› 50)
notation t2.Galois_left (‹(⪅⇘L2 (_) (_)⇙)› 50)
abbreviation (input) "Galois_left2_infix y' x x' y ≡ (⪅⇘L2 x x'⇙) y' y"
notation Galois_left2_infix (‹(_) ⪅⇘L2 (_) (_)⇙ (_)› [51,51,51,51] 50)
abbreviation (input) "Galois_right2_infix y x x' y' ≡ (⪅⇘R2 x x'⇙) y y'"
notation Galois_right2_infix (‹(_) ⪅⇘R2 (_) (_)⇙ (_)› [51,51,51,51] 50)
abbreviation "t2_unit x x' ≡ t2.unit x' x"
notation t2_unit (‹η⇘2 (_) (_)⇙›)
abbreviation "t2_counit x x' ≡ t2.counit x' x"
notation t2_counit (‹ε⇘2 (_) (_)⇙›)
end
locale transport_Dep_Fun_Rel =
transport_Dep_Fun_Rel_syntax L1 R1 l1 r1 L2 R2 l2 r2
for L1 :: "'a1 ⇒ 'a1 ⇒ bool"
and R1 :: "'a2 ⇒ 'a2 ⇒ bool"
and l1 :: "'a1 ⇒ 'a2"
and r1 :: "'a2 ⇒ 'a1"
and L2 :: "'a1 ⇒ 'a1 ⇒ 'b1 ⇒ 'b1 ⇒ bool"
and R2 :: "'a2 ⇒ 'a2 ⇒ 'b2 ⇒ 'b2 ⇒ bool"
and l2 :: "'a2 ⇒ 'a1 ⇒ 'b1 ⇒ 'b2"
and r2 :: "'a1 ⇒ 'a2 ⇒ 'b2 ⇒ 'b1"
begin
definition "L ≡ (x1 x2 ∷ (≤⇘L1⇙)) ⇛ (≤⇘L2 x1 x2⇙)"
lemma left_rel_eq_Dep_Fun_Rel: "L = ((x1 x2 ∷ (≤⇘L1⇙)) ⇛ (≤⇘L2 x1 x2⇙))"
unfolding L_def ..
definition "l ≡ ((x' : r1) ↝ l2 x')"
lemma left_eq_dep_fun_map: "l = ((x' : r1) ↝ l2 x')"
unfolding l_def ..
lemma left_eq [simp]: "l f x' = l2⇘x' (r1 x')⇙ (f (r1 x'))"
unfolding left_eq_dep_fun_map by simp
context
begin
interpretation flip : transport_Dep_Fun_Rel R1 L1 r1 l1 R2 L2 r2 l2 .
abbreviation "R ≡ flip.L"
abbreviation "r ≡ flip.l"
lemma right_rel_eq_Dep_Fun_Rel: "R = ((x1' x2' ∷ (≤⇘R1⇙)) ⇛ (≤⇘R2 x1' x2'⇙))"
unfolding flip.L_def ..
lemma right_eq_dep_fun_map: "r = ((x : l1) ↝ r2 x)"
unfolding flip.l_def ..
end
lemma right_eq [simp]: "r g x = r2⇘x (l1 x)⇙ (g (l1 x))"
unfolding right_eq_dep_fun_map by simp
lemmas transport_defs = left_rel_eq_Dep_Fun_Rel left_eq_dep_fun_map
right_rel_eq_Dep_Fun_Rel right_eq_dep_fun_map
sublocale transport L R l r .
notation L (infix ‹≤⇘L⇙› 50)
notation R (infix ‹≤⇘R⇙› 50)
lemma left_relI [intro]:
assumes "⋀x1 x2. x1 ≤⇘L1⇙ x2 ⟹ f x1 ≤⇘L2 x1 x2⇙ f' x2"
shows "f ≤⇘L⇙ f'"
unfolding left_rel_eq_Dep_Fun_Rel using assms by blast
lemma left_relE [elim]:
assumes "f ≤⇘L⇙ f'"
and "x1 ≤⇘L1⇙ x2"
obtains "f x1 ≤⇘L2 x1 x2⇙ f' x2"
using assms unfolding left_rel_eq_Dep_Fun_Rel by blast
interpretation flip_inv :
transport_Dep_Fun_Rel "(≥⇘R1⇙)" "(≥⇘L1⇙)" r1 l1 "flip2 R2" "flip2 L2" r2 l2 .
lemma flip_inv_right_eq_ge_left: "flip_inv.R = (≥⇘L⇙)"
unfolding left_rel_eq_Dep_Fun_Rel flip_inv.right_rel_eq_Dep_Fun_Rel
by (simp only: rel_inv_Dep_Fun_Rel_rel_eq flip2_eq_rel_inv[symmetric, of "L2"])
interpretation flip : transport_Dep_Fun_Rel R1 L1 r1 l1 R2 L2 r2 l2 .
lemma flip_inv_left_eq_ge_right: "flip_inv.L ≡ (≥⇘R⇙)"
unfolding flip.flip_inv_right_eq_ge_left .
subparagraph ‹Useful Rewritings for Dependent Relation›
lemma left_rel2_unit_eqs_left_rel2I:
assumes "⋀x1 x2. x1 ≤⇘L1⇙ x2 ⟹ (≤⇘L2 x2 x2⇙) ≤ (≤⇘L2 x1 x2⇙)"
and "⋀x. x ≤⇘L1⇙ x ⟹ (≤⇘L2 (η⇩1 x) x⇙) ≤ (≤⇘L2 x x⇙)"
and "⋀x1 x2. x1 ≤⇘L1⇙ x2 ⟹ (≤⇘L2 x1 x1⇙) ≤ (≤⇘L2 x1 x2⇙)"
and "⋀x. x ≤⇘L1⇙ x ⟹ (≤⇘L2 x (η⇩1 x)⇙) ≤ (≤⇘L2 x x⇙)"
and "x ≤⇘L1⇙ x"
and "x ≡⇘L1⇙ η⇩1 x"
shows "(≤⇘L2 (η⇩1 x) x⇙) = (≤⇘L2 x x⇙)"
and "(≤⇘L2 x (η⇩1 x)⇙) = (≤⇘L2 x x⇙)"
using assms by (auto intro!: antisym)
lemma left2_eq_if_bi_related_if_monoI:
assumes mono_L2: "((x1 x2 ∷ (≥⇘L1⇙)) ⇒ (x3 x4 ∷ (≤⇘L1⇙) | x1 ≤⇘L1⇙ x3) ⇛ (≤)) L2"
and "x1 ≤⇘L1⇙ x2"
and "x1 ≡⇘L1⇙ x3"
and "x2 ≡⇘L1⇙ x4"
and trans_L1: "transitive (≤⇘L1⇙)"
shows "(≤⇘L2 x1 x2⇙) = (≤⇘L2 x3 x4⇙)"
proof (intro antisym)
from ‹x1 ≡⇘L1⇙ x3› ‹x2 ≡⇘L1⇙ x4› have "x3 ≤⇘L1⇙ x1" "x2 ≤⇘L1⇙ x4" by auto
with ‹x1 ≤⇘L1⇙ x2› mono_L2 show "(≤⇘L2 x1 x2⇙) ≤ (≤⇘L2 x3 x4⇙)" by blast
from ‹x1 ≡⇘L1⇙ x3› ‹x2 ≡⇘L1⇙ x4› have "x1 ≤⇘L1⇙ x3" "x4 ≤⇘L1⇙ x2" by auto
moreover from ‹x3 ≤⇘L1⇙ x1› ‹x1 ≤⇘L1⇙ x2› ‹x2 ≤⇘L1⇙ x4› have "x3 ≤⇘L1⇙ x4"
using trans_L1 by blast
ultimately show "(≤⇘L2 x3 x4⇙) ≤ (≤⇘L2 x1 x2⇙)" using mono_L2 by blast
qed
end
paragraph ‹Function Relator›
locale transport_Fun_Rel_syntax =
tdfrs : transport_Dep_Fun_Rel_syntax L1 R1 l1 r1 "λ_ _. L2" "λ_ _. R2"
"λ_ _. l2" "λ_ _. r2"
for L1 :: "'a1 ⇒ 'a1 ⇒ bool"
and R1 :: "'a2 ⇒ 'a2 ⇒ bool"
and l1 :: "'a1 ⇒ 'a2"
and r1 :: "'a2 ⇒ 'a1"
and L2 :: "'b1 ⇒ 'b1 ⇒ bool"
and R2 :: "'b2 ⇒ 'b2 ⇒ bool"
and l2 :: "'b1 ⇒ 'b2"
and r2 :: "'b2 ⇒ 'b1"
begin
notation L1 (infix ‹≤⇘L1⇙› 50)
notation R1 (infix ‹≤⇘R1⇙› 50)
notation tdfrs.t1.ge_left (infix ‹≥⇘L1⇙› 50)
notation tdfrs.t1.ge_right (infix ‹≥⇘R1⇙› 50)
notation tdfrs.t1.left_Galois (infix ‹⇘L1⇙⪅› 50)
notation tdfrs.t1.ge_Galois_left (infix ‹⪆⇘L1⇙› 50)
notation tdfrs.t1.right_Galois (infix ‹⇘R1⇙⪅› 50)
notation tdfrs.t1.ge_Galois_right (infix ‹⪆⇘R1⇙› 50)
notation tdfrs.t1.right_ge_Galois (infix ‹⇘R1⇙⪆› 50)
notation tdfrs.t1.Galois_right (infix ‹⪅⇘R1⇙› 50)
notation tdfrs.t1.left_ge_Galois (infix ‹⇘L1⇙⪆› 50)
notation tdfrs.t1.Galois_left (infix ‹⪅⇘L1⇙› 50)
notation tdfrs.t1.unit (‹η⇩1›)
notation tdfrs.t1.counit (‹ε⇩1›)
notation L2 (infix ‹≤⇘L2⇙› 50)
notation R2 (infix ‹≤⇘R2⇙› 50)
notation tdfrs.t2.ge_left (infix ‹≥⇘L2⇙› 50)
notation tdfrs.t2.ge_right (infix ‹≥⇘R2⇙› 50)
notation tdfrs.t2.left_Galois (infix ‹⇘L2⇙⪅› 50)
notation tdfrs.t2.ge_Galois_left (infix ‹⪆⇘L2⇙› 50)
notation tdfrs.t2.right_Galois (infix ‹⇘R2⇙⪅› 50)
notation tdfrs.t2.ge_Galois_right (infix ‹⪆⇘R2⇙› 50)
notation tdfrs.t2.right_ge_Galois (infix ‹⇘R2⇙⪆› 50)
notation tdfrs.t2.Galois_right (infix ‹⪅⇘R2⇙› 50)
notation tdfrs.t2.left_ge_Galois (infix ‹⇘L2⇙⪆› 50)
notation tdfrs.t2.Galois_left (infix ‹⪅⇘L2⇙› 50)
notation tdfrs.t2.unit (‹η⇩2›)
notation tdfrs.t2.counit (‹ε⇩2›)
end
locale transport_Fun_Rel =
transport_Fun_Rel_syntax L1 R1 l1 r1 L2 R2 l2 r2 +
tdfr : transport_Dep_Fun_Rel L1 R1 l1 r1 "λ_ _. L2" "λ_ _. R2"
"λ_ _. l2" "λ_ _. r2"
for L1 :: "'a1 ⇒ 'a1 ⇒ bool"
and R1 :: "'a2 ⇒ 'a2 ⇒ bool"
and l1 :: "'a1 ⇒ 'a2"
and r1 :: "'a2 ⇒ 'a1"
and L2 :: "'b1 ⇒ 'b1 ⇒ bool"
and R2 :: "'b2 ⇒ 'b2 ⇒ bool"
and l2 :: "'b1 ⇒ 'b2"
and r2 :: "'b2 ⇒ 'b1"
begin
notation tdfr.L (‹L›)
notation tdfr.R (‹R›)
abbreviation "l ≡ tdfr.l"
abbreviation "r ≡ tdfr.r"
notation tdfr.L (infix ‹≤⇘L⇙› 50)
notation tdfr.R (infix ‹≤⇘R⇙› 50)
notation tdfr.ge_left (infix ‹≥⇘L⇙› 50)
notation tdfr.ge_right (infix ‹≥⇘R⇙› 50)
notation tdfr.left_Galois (infix ‹⇘L⇙⪅› 50)
notation tdfr.ge_Galois_left (infix ‹⪆⇘L⇙› 50)
notation tdfr.right_Galois (infix ‹⇘R⇙⪅› 50)
notation tdfr.ge_Galois_right (infix ‹⪆⇘R⇙› 50)
notation tdfr.right_ge_Galois (infix ‹⇘R⇙⪆› 50)
notation tdfr.Galois_right (infix ‹⪅⇘R⇙› 50)
notation tdfr.left_ge_Galois (infix ‹⇘L⇙⪆› 50)
notation tdfr.Galois_left (infix ‹⪅⇘L⇙› 50)
notation tdfr.unit (‹η›)
notation tdfr.counit (‹ε›)
lemma left_rel_eq_Fun_Rel: "(≤⇘L⇙) = ((≤⇘L1⇙) ⇛ (≤⇘L2⇙))"
by (urule tdfr.left_rel_eq_Dep_Fun_Rel)
lemma left_eq_fun_map: "l = (r1 ↝ l2)"
by (intro ext) simp
interpretation flip : transport_Fun_Rel R1 L1 r1 l1 R2 L2 r2 l2 .
lemma right_rel_eq_Fun_Rel: "(≤⇘R⇙) = ((≤⇘R1⇙) ⇛ (≤⇘R2⇙))"
unfolding flip.left_rel_eq_Fun_Rel ..
lemma right_eq_fun_map: "r = (l1 ↝ r2)"
unfolding flip.left_eq_fun_map ..
lemmas transport_defs = left_rel_eq_Fun_Rel right_rel_eq_Fun_Rel
left_eq_fun_map right_eq_fun_map
end
paragraph ‹Monotone Dependent Function Relator›
locale transport_Mono_Dep_Fun_Rel =
transport_Dep_Fun_Rel_syntax L1 R1 l1 r1 L2 R2 l2 r2
+ tdfr : transport_Dep_Fun_Rel L1 R1 l1 r1 L2 R2 l2 r2
for L1 :: "'a1 ⇒ 'a1 ⇒ bool"
and R1 :: "'a2 ⇒ 'a2 ⇒ bool"
and l1 :: "'a1 ⇒ 'a2"
and r1 :: "'a2 ⇒ 'a1"
and L2 :: "'a1 ⇒ 'a1 ⇒ 'b1 ⇒ 'b1 ⇒ bool"
and R2 :: "'a2 ⇒ 'a2 ⇒ 'b2 ⇒ 'b2 ⇒ bool"
and l2 :: "'a2 ⇒ 'a1 ⇒ 'b1 ⇒ 'b2"
and r2 :: "'a1 ⇒ 'a2 ⇒ 'b2 ⇒ 'b1"
begin
definition "L ≡ tdfr.L⇧⊕"
lemma left_rel_eq_tdfr_left_Refl_Rel: "L = tdfr.L⇧⊕"
unfolding L_def ..
lemma left_rel_eq_Mono_Dep_Fun_Rel: "L = ((x1 x2 ∷ (≤⇘L1⇙)) ⇛⊕ (≤⇘L2 x1 x2⇙))"
unfolding left_rel_eq_tdfr_left_Refl_Rel tdfr.left_rel_eq_Dep_Fun_Rel by simp
lemma left_rel_eq_tdfr_left_rel_if_reflexive_on:
assumes "reflexive_on (in_field tdfr.L) tdfr.L"
shows "L = tdfr.L"
unfolding left_rel_eq_tdfr_left_Refl_Rel using assms
by (rule Refl_Rel_eq_self_if_reflexive_on)
abbreviation "l ≡ tdfr.l"
lemma left_eq_tdfr_left: "l = tdfr.l" ..
interpretation flip : transport_Mono_Dep_Fun_Rel R1 L1 r1 l1 R2 L2 r2 l2 .
abbreviation "R ≡ flip.L"
lemma right_rel_eq_tdfr_right_Refl_Rel: "R = tdfr.R⇧⊕"
unfolding flip.left_rel_eq_tdfr_left_Refl_Rel ..
lemma right_rel_eq_Mono_Dep_Fun_Rel: "R = ((y1 y2 ∷ (≤⇘R1⇙)) ⇛⊕ (≤⇘R2 y1 y2⇙))"
unfolding flip.left_rel_eq_Mono_Dep_Fun_Rel ..
lemma right_rel_eq_tdfr_right_rel_if_reflexive_on:
assumes "reflexive_on (in_field tdfr.R) tdfr.R"
shows "R = tdfr.R"
using assms by (rule flip.left_rel_eq_tdfr_left_rel_if_reflexive_on)
abbreviation "r ≡ tdfr.r"
lemma right_eq_tdfr_right: "r = tdfr.r" ..
lemmas transport_defs = left_rel_eq_tdfr_left_Refl_Rel
right_rel_eq_tdfr_right_Refl_Rel
sublocale transport L R l r .
notation L (infix ‹≤⇘L⇙› 50)
notation R (infix ‹≤⇘R⇙› 50)
end
paragraph ‹Monotone Function Relator›
locale transport_Mono_Fun_Rel =
transport_Fun_Rel_syntax L1 R1 l1 r1 L2 R2 l2 r2 +
tfr : transport_Fun_Rel L1 R1 l1 r1 L2 R2 l2 r2 +
tpdfr : transport_Mono_Dep_Fun_Rel L1 R1 l1 r1 "λ_ _. L2" "λ_ _. R2"
"λ_ _. l2" "λ_ _. r2"
for L1 :: "'a1 ⇒ 'a1 ⇒ bool"
and R1 :: "'a2 ⇒ 'a2 ⇒ bool"
and l1 :: "'a1 ⇒ 'a2"
and r1 :: "'a2 ⇒ 'a1"
and L2 :: "'b1 ⇒ 'b1 ⇒ bool"
and R2 :: "'b2 ⇒ 'b2 ⇒ bool"
and l2 :: "'b1 ⇒ 'b2"
and r2 :: "'b2 ⇒ 'b1"
begin
notation tpdfr.L (‹L›)
notation tpdfr.R (‹R›)
abbreviation "l ≡ tpdfr.l"
abbreviation "r ≡ tpdfr.r"
notation tpdfr.L (infix ‹≤⇘L⇙› 50)
notation tpdfr.R (infix ‹≤⇘R⇙› 50)
notation tpdfr.ge_left (infix ‹≥⇘L⇙› 50)
notation tpdfr.ge_right (infix ‹≥⇘R⇙› 50)
notation tpdfr.left_Galois (infix ‹⇘L⇙⪅› 50)
notation tpdfr.ge_Galois_left (infix ‹⪆⇘L⇙› 50)
notation tpdfr.right_Galois (infix ‹⇘R⇙⪅› 50)
notation tpdfr.ge_Galois_right (infix ‹⪆⇘R⇙› 50)
notation tpdfr.right_ge_Galois (infix ‹⇘R⇙⪆› 50)
notation tpdfr.Galois_right (infix ‹⪅⇘R⇙› 50)
notation tpdfr.left_ge_Galois (infix ‹⇘L⇙⪆› 50)
notation tpdfr.Galois_left (infix ‹⪅⇘L⇙› 50)
notation tpdfr.unit (‹η›)
notation tpdfr.counit (‹ε›)
lemma left_rel_eq_Mono_Fun_Rel: "(≤⇘L⇙) = ((≤⇘L1⇙) ⇛⊕ (≤⇘L2⇙))"
unfolding tpdfr.left_rel_eq_Mono_Dep_Fun_Rel by simp
lemma left_eq_fun_map: "l = (r1 ↝ l2)"
unfolding tfr.left_eq_fun_map ..
interpretation flip : transport_Mono_Fun_Rel R1 L1 r1 l1 R2 L2 r2 l2 .
lemma right_rel_eq_Mono_Fun_Rel: "(≤⇘R⇙) = ((≤⇘R1⇙) ⇛⊕ (≤⇘R2⇙))"
unfolding flip.left_rel_eq_Mono_Fun_Rel ..
lemma right_eq_fun_map: "r = (l1 ↝ r2)"
unfolding flip.left_eq_fun_map ..
lemmas transport_defs = tpdfr.transport_defs
end
end