definition id_galcon :: "'a gorder ==> ('a, 'a) galois" (‹I🪙g›) where "I🪙g(A) = ( orderA = A, orderB = A, lower = id, upper = id )"
subsection‹Well-typed connections›
locale connection = fixes G (structure) assumes is_order_A: "partial_order X" and is_order_B: "partial_order Y" and lower_closure: "π🪙* ∈ carrier X→ carrier Y" and upper_closure: "π🪙* ∈ carrier Y→ carrier X" begin
lemma lower_closed: "x ∈ carrier X==> π🪙* x ∈ carrier Y" using lower_closure by auto
lemma upper_closed: "y ∈ carrier Y==> π🪙* y ∈ carrier X" using upper_closure by auto
end
subsection‹Galois connections›
locale galois_connection = connection + assumes galois_property: "[x ∈ carrier X; y ∈ carrier Y]==> π🪙* x ⊑🪙Y🪙 y ⟷ x ⊑??X🪙 π🪙* y" begin
lemma is_weak_order_A: "weak_partial_order X" proof - interpret po: partial_order X by (metis is_order_A) show ?thesis .. qed
lemma is_weak_order_B: "weak_partial_order Y" proof - interpret po: partial_order Y by (metis is_order_B) show ?thesis .. qed
lemma right: "[x ∈ carrier X; y ∈ carrier Y; π🪙* x ⊑🪙Y🪙 y]==> x ⊑🪙X🪙 π🪙* y" by (metis galois_property)
lemma left: "[x ∈ carrier X; y ∈ carrier Y; x ⊑🪙X🪙 π🪙* y]==> π🪙* x ⊑🪙Y🪙 y" by (metis galois_property)
lemma deflation: "y ∈ carrier Y==> π🪙* (π🪙* y) ⊑🪙Y🪙 y" by (metis Pi_iff is_weak_order_A left upper_closure weak_partial_order.le_refl)
lemma inflation: "x ∈ carrier X==> x ⊑🪙X🪙 π🪙* (π🪙* x)" by (metis (no_types, lifting) PiE galois_connection.right galois_connection_axioms is_weak_order_B lower_closure weak_partial_order.le_refl)
lemma lower_iso: "isotone XY π🪙*" proof (auto simp add:isotone_def) show"weak_partial_order X" by (metis is_weak_order_A) show"weak_partial_order Y" by (metis is_weak_order_B) fix x y assume a: "x ∈ carrier X""y ∈ carrier X""x ⊑🪙X🪙 y" have b: "π🪙* y ∈ carrier Y" using a(2) lower_closure by blast thenhave"π🪙* (π🪙* y) ∈ carrier X" using upper_closure by blast thenhave"x ⊑🪙X🪙 π🪙* (π🪙* y)" by (meson a inflation is_weak_order_A weak_partial_order.le_trans) thus"π🪙* x ⊑🪙Y🪙 π🪙* y" by (meson b a(1) Pi_iff galois_property lower_closure upper_closure) qed
lemma gf_iso: "isotone XX (π🪙* ∘ π🪙*)" by (metis iso_compose lower_closure lower_iso upper_closure upper_iso)
lemma semi_inverse1: "x ∈ carrier X==> π🪙* x = π🪙* (π🪙* (π🪙* x))" by (metis lower_comp)
lemma semi_inverse2: "x ∈ carrier Y==> π🪙* x = π🪙* (π🪙* (π🪙* x))" by (metis upper_comp)
theorem lower_by_complete_lattice: assumes"complete_lattice Y""x ∈ carrier X" shows"π🪙*(x) = ⊓🪙Y🪙 { y ∈ carrier Y. x ⊑🪙X🪙 π🪙*(y) }" proof - interpret Y: complete_lattice Y by (simp add: assms)
show ?thesis proof (rule Y.le_antisym) show x: "π🪙* x ∈ carrier Y" using assms(2) lower_closure by blast show"π🪙* x ⊑🪙Y🪙⊓🪙Y🪙{y ∈ carrier Y. x ⊑🪙X🪙 π🪙* y}" proof (rule Y.weak.inf_greatest) show"{y ∈ carrier Y. x ⊑🪙X🪙 π🪙* y} ⊆ carrier Y" by auto show"π🪙* x ∈ carrier Y"by (fact x) fix z assume"z ∈ {y ∈ carrier Y. x ⊑🪙X🪙 π🪙* y}" thus"π🪙* x ⊑🪙Y🪙 z" using assms(2) left by auto qed show"⊓🪙Y🪙{y ∈ carrier Y. x ⊑🪙X🪙 π🪙* y} ⊑🪙Y🪙 π🪙* x" proof (rule Y.weak.inf_lower) show"{y ∈ carrier Y. x ⊑🪙X🪙 π🪙* y} ⊆ carrier Y" by auto show"π🪙* x ∈ {y ∈ carrier Y. x ⊑🪙X🪙 π🪙* y}" proof (auto) show"π🪙* x ∈ carrier Y"by (fact x) show"x ⊑🪙X🪙 π🪙* (π🪙* x)" using assms(2) inflation by blast qed qed show"⊓🪙Y🪙{y ∈ carrier Y. x ⊑🪙X🪙 π🪙* y} ∈ carrier Y" by (auto intro: Y.weak.inf_closed) qed qed
theorem upper_by_complete_lattice: assumes"complete_lattice X""y ∈ carrier Y" shows"π🪙*(y) = ⊔🪙X🪙 { x ∈ carrier X. π🪙*(x) ⊑🪙Y🪙 y }" proof - interpret X: complete_lattice X by (simp add: assms) show ?thesis proof (rule X.le_antisym) show y: "π🪙* y ∈ carrier X" using assms(2) upper_closure by blast show"π🪙* y ⊑🪙X🪙⊔🪙X🪙{x ∈ carrier X. π🪙* x ⊑🪙Y🪙 y}" proof (rule X.weak.sup_upper) show"{x ∈ carrier X. π🪙* x ⊑🪙Y🪙 y} ⊆ carrier X" by auto show"π🪙* y ∈ {x ∈ carrier X. π🪙* x ⊑🪙Y🪙 y}" proof (auto) show"π🪙* y ∈ carrier X"by (fact y) show"π🪙* (π🪙* y) ⊑🪙Y🪙 y" by (simp add: assms(2) deflation) qed qed show"⊔🪙X🪙{x ∈ carrier X. π🪙* x ⊑🪙Y🪙 y} ⊑🪙X🪙 π🪙* y" proof (rule X.weak.sup_least) show"{x ∈ carrier X. π🪙* x ⊑🪙Y🪙 y} ⊆ carrier X" by auto show"π🪙* y ∈ carrier X"by (fact y) fix z assume"z ∈ {x ∈ carrier X. π🪙* x ⊑🪙Y🪙 y}" thus"z ⊑🪙X🪙 π🪙* y" by (simp add: assms(2) right) qed show"⊔🪙X🪙{x ∈ carrier X. π🪙* x ⊑🪙Y🪙 y} ∈ carrier X" by (auto intro: X.weak.sup_closed) qed qed
end
lemma dual_galois [simp]: " galois_connection ( orderA = inv_gorder B, orderB = inv_gorder A, lower = f, upper = g ) = galois_connection ( orderA = A, orderB = B, lower = g, upper = f )" by (auto simp add: galois_connection_def galois_connection_axioms_def connection_def dual_order_iff)
definition lower_adjoint :: "('a, 'c) gorder_scheme ==> ('b, 'd) gorder_scheme ==>('a ==> 'b) ==> bool"where "lower_adjoint A B f ≡∃g. galois_connection ( orderA = A, orderB = B, lower = f, upper = g )"
definition upper_adjoint :: "('a, 'c) gorder_scheme ==> ('b, 'd) gorder_scheme ==>('b ==> 'a) ==> bool"where "upper_adjoint A B g ≡∃f. galois_connection ( orderA = A, orderB = B, lower = f, upper = g )"
lemma lower_adjoint_dual [simp]: "lower_adjoint (inv_gorder A) (inv_gorder B) f = upper_adjoint B A f" by (simp add: lower_adjoint_def upper_adjoint_def)
lemma upper_adjoint_dual [simp]: "upper_adjoint (inv_gorder A) (inv_gorder B) f = lower_adjoint B A f" by (simp add: lower_adjoint_def upper_adjoint_def)
lemma lower_type: "lower_adjoint A B f ==> f ∈ carrier A → carrier B" by (auto simp add:lower_adjoint_def galois_connection_def galois_connection_axioms_def connection_def)
lemma upper_type: "upper_adjoint A B g ==> g ∈ carrier B → carrier A" by (auto simp add:upper_adjoint_def galois_connection_def galois_connection_axioms_def connection_def)
subsection‹Composition of Galois connections›
lemma id_galois: "partial_order A ==> galois_connection (I🪙g(A))" by (simp add: id_galcon_def galois_connection_def galois_connection_axioms_def connection_def)
lemma comp_galcon_closed: assumes"galois_connection G""galois_connection F""Y🪙F🪙 = X🪙G🪙" shows"galois_connection (G ∘🪙g F)" proof - interpret F: galois_connection F by (simp add: assms) interpret G: galois_connection G by (simp add: assms)
have"partial_order X🪙G ∘🪙g F🪙" by (simp add: F.is_order_A comp_galcon_def) moreoverhave"partial_order Y🪙G ∘🪙g F🪙" by (simp add: G.is_order_B comp_galcon_def) moreoverhave"π🪙*🪙G🪙∘ π🪙*🪙F🪙∈ carrier X🪙F🪙→ carrier Y🪙G🪙" using F.lower_closure G.lower_closure assms(3) by auto moreoverhave"π🪙*🪙F🪙∘ π🪙*🪙G🪙∈ carrier Y🪙G🪙→ carrier X🪙F🪙" using F.upper_closure G.upper_closure assms(3) by auto moreover have"∧ x y. [x ∈ carrier X🪙F🪙; y ∈ carrier Y🪙G🪙]==> (π🪙*🪙G🪙 (π🪙*🪙F🪙 x) ⊑🪙Y🪙G🪙🪙 y) = (x ⊑🪙X🪙F🪙🪙 π🪙*🪙F🪙 (π🪙*🪙G🪙 y))" by (metis F.galois_property F.lower_closure G.galois_property G.upper_closure assms(3) Pi_iff) ultimatelyshow ?thesis by (simp add: comp_galcon_def galois_connection_def galois_connection_axioms_def connection_def) qed
lemma comp_galcon_left_unit [simp]: "I🪙g(Y🪙F🪙) ∘🪙g F = F" by (simp add: comp_galcon_def id_galcon_def)
lemma galois_connectionI: assumes "partial_order A""partial_order B" "L ∈ carrier A → carrier B""R ∈ carrier B → carrier A" "isotone A B L""isotone B A R" "∧ x y. [ x ∈ carrier A; y ∈ carrier B ]==> L x ⊑🪙B🪙 y ⟷ x ⊑🪙A🪙 R y" shows"galois_connection ( orderA = A, orderB = B, lower = L, upper = R )" using assms by (simp add: galois_connection_def connection_def galois_connection_axioms_def)
lemma galois_connectionI': assumes "partial_order A""partial_order B" "L ∈ carrier A → carrier B""R ∈ carrier B → carrier A" "isotone A B L""isotone B A R" "∧ X. X ∈ carrier(B) ==> L(R(X)) ⊑🪙B🪙 X" "∧ X. X ∈ carrier(A) ==> X ⊑🪙A🪙 R(L(X))" shows"galois_connection ( orderA = A, orderB = B, lower = L, upper = R )" using assms by (auto simp add: galois_connection_def connection_def galois_connection_axioms_def, (meson PiE isotone_def weak_partial_order.le_trans)+)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.