Theory Transport_Rel_If
section ‹Transport using Conditional Relation›
theory Transport_Rel_If
imports
Transport_Base
begin
paragraph ‹Summary›
text ‹Setup for Transport using conditional relations.›
context fixes P :: "'a ⇒ bool" and R :: "'a ⇒ 'a ⇒ bool"
begin
lemma reflexive_on_rel_if_if_reflexive_onI [intro]:
assumes "B ⟹ reflexive_on P R"
shows "reflexive_on P (B ⟶⇩r R)"
using assms by (intro reflexive_onI) blast
lemma transitive_on_rel_if_if_transitive_onI [intro]:
assumes "B ⟹ transitive_on P R"
shows "transitive_on P (B ⟶⇩r R)"
using assms by (intro transitive_onI) (blast dest: transitive_onD)
lemma preorder_on_rel_if_if_preorder_onI [intro]:
assumes "B ⟹ preorder_on P R"
shows "preorder_on P (B ⟶⇩r R)"
using assms by (intro preorder_onI) auto
lemma symmetric_on_rel_if_if_symmetric_onI [intro]:
assumes "B ⟹ symmetric_on P R"
shows "symmetric_on P (B ⟶⇩r R)"
using assms by (intro symmetric_onI) (blast dest: symmetric_onD)
lemma partial_equivalence_rel_on_rel_if_if_partial_equivalence_rel_onI [intro]:
assumes "B ⟹ partial_equivalence_rel_on P R"
shows "partial_equivalence_rel_on P (B ⟶⇩r R)"
using assms by (intro partial_equivalence_rel_onI)
auto
lemma dep_mono_wrt_rel_if_rel_if_if_imp_if_dep_mono_wrt_rel:
assumes "B ⟹ B' ⟹ ((x y ∷ R) ⇒ S x y) f"
and "B' ⟹ B"
shows "((x y ∷ B ⟶⇩r R) ⇒ (B' ⟶⇩r S x y)) f"
using assms by fastforce
end
locale transport_rel_if =
fixes L :: "'a ⇒ 'a ⇒ bool"
and R :: "'b ⇒ 'b ⇒ bool"
and l :: "'a ⇒ 'b"
and r :: "'b ⇒ 'a"
and B B' :: bool
begin
sublocale t : transport L R l r .
sublocale transport "B ⟶⇩r (≤⇘L⇙)" "B' ⟶⇩r (≤⇘R⇙)" l r .
lemma half_galois_prop_left_if_imp_if_half_galois_prop_left:
assumes "B ⟹ B' ⟹ ((≤⇘L⇙) ⇩h⊴ (≤⇘R⇙)) l r"
and "B' ⟹ B"
shows "((B ⟶⇩r (≤⇘L⇙)) ⇩h⊴ (B' ⟶⇩r (≤⇘R⇙))) l r"
using assms by (intro half_galois_prop_leftI rel_if_if_impI) fast
lemma half_galois_prop_right_if_imp_if_half_galois_prop_right:
assumes "B ⟹ B' ⟹ ((≤⇘L⇙) ⊴⇩h (≤⇘R⇙)) l r"
and "B ⟹ B'"
shows "((B ⟶⇩r (≤⇘L⇙)) ⊴⇩h (B' ⟶⇩r (≤⇘R⇙))) l r"
using assms by (intro half_galois_prop_rightI) fast
lemma galois_prop_if_iff_if_galois_prop:
assumes "B ⟹ B' ⟹ ((≤⇘L⇙) ⊴ (≤⇘R⇙)) l r"
and "B ⟷ B'"
shows "((B ⟶⇩r (≤⇘L⇙)) ⊴ (B' ⟶⇩r (≤⇘R⇙))) l r"
using assms by (intro galois_propI
half_galois_prop_left_if_imp_if_half_galois_prop_left
half_galois_prop_right_if_imp_if_half_galois_prop_right)
auto
lemma galois_connection_if_iff_if_galois_connection:
assumes "B ⟹ B' ⟹ ((≤⇘L⇙) ⊣ (≤⇘R⇙)) l r"
and "B ⟷ B'"
shows "((B ⟶⇩r (≤⇘L⇙)) ⊣ (B' ⟶⇩r (≤⇘R⇙))) l r"
by (urule (rr) galois_connectionI galois_prop_if_iff_if_galois_prop
dep_mono_wrt_rel_if_rel_if_if_imp_if_dep_mono_wrt_rel)
(use assms in auto)
lemma galois_equivalence_if_iff_if_galois_equivalence:
assumes "B ⟹ B' ⟹ ((≤⇘L⇙) ≡⇩G (≤⇘R⇙)) l r"
and "B ⟷ B'"
shows "((B ⟶⇩r (≤⇘L⇙)) ≡⇩G (B' ⟶⇩r (≤⇘R⇙))) l r"
using assms by (intro galois_equivalenceI
galois_connection_if_iff_if_galois_connection
transport_rel_if.galois_prop_if_iff_if_galois_prop)
(auto elim: galois.galois_connectionE)
lemma preorder_equivalence_if_iff_if_preorder_equivalence:
assumes "B ⟹ B' ⟹ ((≤⇘L⇙) ≡⇘pre⇙ (≤⇘R⇙)) l r"
and "B ⟷ B'"
shows "((B ⟶⇩r (≤⇘L⇙)) ≡⇘pre⇙ (B' ⟶⇩r (≤⇘R⇙))) l r"
using assms by (intro preorder_equivalence_if_galois_equivalenceI
galois_equivalence_if_iff_if_galois_equivalence
preorder_on_rel_if_if_preorder_onI)
blast+
lemma partial_equivalence_rel_equivalence_if_iff_if_partial_equivalence_rel_equivalence:
assumes "B ⟹ B' ⟹ ((≤⇘L⇙) ≡⇘PER⇙ (≤⇘R⇙)) l r"
and "B ⟷ B'"
shows "((B ⟶⇩r (≤⇘L⇙)) ≡⇘PER⇙ (B' ⟶⇩r (≤⇘R⇙))) l r"
using assms by (intro
partial_equivalence_rel_equivalence_if_galois_equivalenceI
galois_equivalence_if_iff_if_galois_equivalence)
fastforce+
end
end