section‹Charts› theory Chart imports Analysis_More begin
subsection‹Definition›
text‹A chart on ‹M› is a homeomorphism from an open subset of ‹M› to an open subset
of some Euclidean space ‹E›. Here ‹d› and ‹d'› are open subsets of ‹M› and ‹E›, respectively, ‹f: d → d'› is the mapping, and ‹f': d' → d› is the inverse mapping.› typedef (overloaded) ('a::topological_space, 'e::euclidean_space) chart = "{(d::'a set, d'::'e set, f, f'). open d ∧ open d' ∧ homeomorphism d d' f f'}" by (rule exI[where x="({}, {}, (λx. undefined), (λx. undefined))"]) simp
lemma open_domain[intro, simp]: "open (domain c)" and open_codomain[intro, simp]: "open (codomain c)" and chart_homeomorphism: "homeomorphism (domain c) (codomain c) c (inv_chart c)" by (transfer, auto)+
lemma at_within_domain: "at x within domain c = at x"if"x ∈ domain c" by (rule at_within_open[OF that open_domain])
lemma at_within_codomain: "at x within codomain c = at x"if"x ∈ codomain c" by (rule at_within_open[OF that open_codomain])
lemma
chart_in_codomain[intro, simp]: "x ∈ domain c ==> c x ∈ codomain c" and inv_chart_inverse[simp]: "x ∈ domain c ==> inv_chart c (c x) = x" and inv_chart_in_domain[intro, simp]:"y ∈ codomain c ==> inv_chart c y ∈ domain c" and chart_inverse_inv_chart[simp]: "y ∈ codomain c ==> c (inv_chart c y) = y" and image_domain_eq: "c ` (domain c) = codomain c" and inv_image_codomain_eq[simp]: "inv_chart c ` (codomain c) = domain c" and continuous_on_domain: "continuous_on (domain c) c" and continuous_on_codomain: "continuous_on (codomain c) (inv_chart c)" using chart_homeomorphism[of c] by (auto simp: homeomorphism_def)
lemma chart_eqI: "c = d" if"domain c = domain d" "codomain c = codomain d" "∧x. c x = d x" "∧x. inv_chart c x = inv_chart d x" using that by transfer auto
lemma continuous_apply_chart: "continuous (at x within X) c"if"x ∈ domain c" apply (rule continuous_at_imp_continuous_within) using continuous_on_domain[of c] that at_within_domain[OF that] by (auto simp: continuous_on_eq_continuous_within)
lemma continuous_inv_chart: "continuous (at x within X) (inv_chart c)"if"x ∈ codomain c" apply (rule continuous_at_imp_continuous_within) using continuous_on_codomain[of c] that at_within_codomain[OF that] by (auto simp: continuous_on_eq_continuous_within)
lemma continuous_within_compose2': "continuous (at (f x) within t) g ==> f ` s ⊆ t ==> continuous (at x within s) f ==> continuous (at x within s) (λx. g (f x))" by (simp add: continuous_within_compose2 continuous_within_subset)
lemma continuous_on_chart_inv: assumes"continuous_on s (apply_chart c o f)" "f ` s ⊆ domain c" shows"continuous_on s f" proof - have"continuous_on s (inv_chart c o apply_chart c o f)" using assms by (auto intro!: continuous_on_chart(2)) moreoverhave"∧x. x ∈ s ==> (inv_chart c o apply_chart c o f) x = f x" using assms by auto ultimatelyshow ?thesis by auto qed
lemma continuous_on_chart_inv': assumes"continuous_on (apply_chart c ` s) (f o inv_chart c)" "s ⊆ domain c" shows"continuous_on s f" proof - have"continuous_on s (apply_chart c)" using assms continuous_on_domain continuous_on_subset by blast thenhave"continuous_on s (f o inv_chart c o apply_chart c)" apply (rule continuous_on_compose) using assms by auto moreoverhave"(f o inv_chart c o apply_chart c) x = f x"if"x ∈ s"for x using assms that by auto ultimatelyshow ?thesis by auto qed
lemma apply_chart_Int: "f ` (X ∩ Y) = f ` X ∩ f ` Y"if"X ⊆ domain f""Y ⊆ domain f" using inj_on_apply_chart that by (rule inj_on_image_Int)
lemma chart_image_eq_vimage: "c ` X = inv_chart c -` X ∩ codomain c" if"X ⊆ domain c" using that by force
lemma open_chart_image[simp, intro]: "open (c ` X)" if"open X""X ⊆ domain c" proof - have"c ` X = inv_chart c -` X ∩ codomain c" using that(2) by (rule chart_image_eq_vimage) alsohave"open …" using that by (metis continuous_on_codomain continuous_on_open_vimage open_codomain) finallyshow ?thesis . qed
lemma open_inv_chart_image[simp, intro]: "open (inv_chart c ` X)" if"open X""X ⊆ codomain c" proof - have"inv_chart c ` X = c -` X ∩ domain c" using that(2) apply auto using image_iff by fastforce alsohave"open …" using that by (metis continuous_on_domain continuous_on_open_vimage open_domain) finallyshow ?thesis . qed
lemma homeomorphism_UNIV_imp_open_map: "homeomorphism UNIV UNIV p p' ==> open f' ==> open (p ` f')" by (auto dest: homeomorphism_imp_open_map[where U=f'])
subsection‹Restriction›
lemma homeomorphism_restrict: "homeomorphism (a ∩ s) (b ∩ f' -` s) f f'"if"homeomorphism a b f f'" using that by (fastforce simp: homeomorphism_def intro: continuous_on_subset intro!: imageI)
lift_definition restrict_chart::"'a set ==> ('a::t2_space, 'e::euclidean_space) chart ==> ('a, 'e) chart" is"λS. λ(d, d', f, f'). if open S then (d ∩ S, d' ∩ f' -` S, f, f') else ({}, {}, f, f')" by (auto simp: split: if_splits intro!: open_continuous_vimage' homeomorphism_restrict
intro: homeomorphism_cont2 homeomorphism_cont1 )
lemma restrict_chart_restrict_chart: "restrict_chart X (restrict_chart Y c) = restrict_chart (X ∩ Y) c" if"open X""open Y" using that by transfer auto
lemma domain_restrict_chart[simp]: "open S ==> domain (restrict_chart S c) = domain c ∩ S" and domain_restrict_chart_if: "domain (restrict_chart S c) = (if open S then domain c ∩ S else {})" and codomain_restrict_chart[simp]: "open S ==> codomain (restrict_chart S c) = codomain c ∩ inv_chart c -` S" and codomain_restrict_chart_if: "codomain (restrict_chart S c) = (if open S then codomain c ∩ inv_chart c -` S else {})" and apply_chart_restrict_chart[simp]: "apply_chart (restrict_chart S c) = apply_chart c" and inv_chart_restrict_chart[simp]: "inv_chart (restrict_chart S c) = inv_chart c" by (transfer, auto)+
subsection‹Composition›
lift_definition compose_chart::"('e==>'e) ==> ('e==>'e) ==> ('a::topological_space, 'e::euclidean_space) chart ==> ('a, 'e) chart" is"λp p'. λ(d, d', f, f'). if homeomorphism UNIV UNIV p p' then (d, p ` d', p o f, f' o p') else ({}, {}, f, f')" by (auto split: if_splits)
(auto intro: homeomorphism_UNIV_imp_open_map homeomorphism_compose homeomorphism_of_subsets)
lemma compose_chart_apply_chart[simp]: "apply_chart (compose_chart p p' c) = p o apply_chart c" and compose_chart_inv_chart[simp]: "inv_chart (compose_chart p p' c) = inv_chart c o p'" and domain_compose_chart[simp]: "domain (compose_chart p p' c) = domain c" and codomain_compose_chart[simp]: "codomain (compose_chart p p' c) = p ` codomain c" if"homeomorphism UNIV UNIV p p'" using that by (transfer, auto)+
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.