Theory Transport_Natural_Functors_Galois_Relator
subsection ‹Galois Relator›
theory Transport_Natural_Functors_Galois_Relator
imports
Transport_Natural_Functors_Base
begin
context transport_natural_functor
begin
lemma left_Galois_Frel_left_Galois: "(⇘L⇙⪅) ≤ Frel (⇘L1⇙⪅) (⇘L2⇙⪅) (⇘L3⇙⪅)"
apply (rule le_relI)
apply (erule left_GaloisE)
apply (unfold left_rel_eq_Frel right_rel_eq_Frel right_eq_Fmap)
apply (subst (asm) in_codom_Frel_eq_Fpred_in_codom)
apply (erule FpredE)
apply (subst (asm) Frel_Fmap_eq2)
apply (rule Frel_mono_strong,
assumption;
rule t1.left_GaloisI t2.left_GaloisI t3.left_GaloisI;
assumption)
done
lemma Frel_left_Galois_le_left_Galois:
"Frel (⇘L1⇙⪅) (⇘L2⇙⪅) (⇘L3⇙⪅) ≤ (⇘L⇙⪅)"
apply (rule le_relI)
apply (unfold t1.left_Galois_iff_in_codom_and_left_rel_right
t2.left_Galois_iff_in_codom_and_left_rel_right
t3.left_Galois_iff_in_codom_and_left_rel_right)
apply (fold
rel_restrict_right_eq[of "λx y. x ≤⇘L1⇙ r1 y" "in_codom (≤⇘R1⇙)",
unfolded rel_restrict_left_pred_def rel_inv_iff_rel]
rel_restrict_right_eq[of "λx y. x ≤⇘L2⇙ r2 y" "in_codom (≤⇘R2⇙)",
unfolded rel_restrict_left_pred_def rel_inv_iff_rel]
rel_restrict_right_eq[of "λx y. x ≤⇘L3⇙ r3 y" "in_codom (≤⇘R3⇙)",
unfolded rel_restrict_left_pred_def rel_inv_iff_rel])
apply (subst (asm) Frel_restrict_right_Fpred_eq_Frel_restrict_right[symmetric])
apply (erule rel_restrict_rightE)
apply (subst (asm) in_codom_Frel_eq_Fpred_in_codom[symmetric])
apply (erule in_codomE)
apply (rule left_GaloisI)
apply (rule in_codomI)
apply (subst right_rel_eq_Frel)
apply assumption
apply (unfold left_rel_eq_Frel right_eq_Fmap Frel_Fmap_eq2)
apply assumption
done
corollary left_Galois_eq_Frel_left_Galois: "(⇘L⇙⪅) = Frel (⇘L1⇙⪅) (⇘L2⇙⪅) (⇘L3⇙⪅)"
by (intro antisym left_Galois_Frel_left_Galois Frel_left_Galois_le_left_Galois)
end
end