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⇙)) ⇛⇩m (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