1637 lemma homeomorphic_maps_real_shrink: |
1637 lemma homeomorphic_maps_real_shrink: |
1638 "homeomorphic_maps euclideanreal (subtopology euclideanreal {-1<..<1}) |
1638 "homeomorphic_maps euclideanreal (subtopology euclideanreal {-1<..<1}) |
1639 (\<lambda>x. x / (1 + \<bar>x\<bar>)) (\<lambda>y. y / (1 - \<bar>y\<bar>))" |
1639 (\<lambda>x. x / (1 + \<bar>x\<bar>)) (\<lambda>y. y / (1 - \<bar>y\<bar>))" |
1640 by (force simp: homeomorphic_maps_def continuous_map_real_shrink continuous_on_real_grow divide_simps) |
1640 by (force simp: homeomorphic_maps_def continuous_map_real_shrink continuous_on_real_grow divide_simps) |
1641 |
1641 |
|
1642 lemma real_shrink_Galois: |
|
1643 fixes x::real |
|
1644 shows "(x / (1 + \<bar>x\<bar>) = y) \<longleftrightarrow> (\<bar>y\<bar> < 1 \<and> y / (1 - \<bar>y\<bar>) = x)" |
|
1645 using real_grow_shrink by (fastforce simp add: distrib_left) |
|
1646 |
|
1647 lemma real_shrink_lt: |
|
1648 fixes x::real |
|
1649 shows "x / (1 + \<bar>x\<bar>) < y / (1 + \<bar>y\<bar>) \<longleftrightarrow> x < y" |
|
1650 using zero_less_mult_iff [of x y] by (auto simp: field_simps abs_if not_less) |
|
1651 |
|
1652 lemma real_shrink_le: |
|
1653 fixes x::real |
|
1654 shows "x / (1 + \<bar>x\<bar>) \<le> y / (1 + \<bar>y\<bar>) \<longleftrightarrow> x \<le> y" |
|
1655 by (meson linorder_not_le real_shrink_lt) |
|
1656 |
|
1657 lemma real_shrink_grow: |
|
1658 fixes x::real |
|
1659 shows "\<bar>x\<bar> < 1 \<Longrightarrow> x / (1 - \<bar>x\<bar>) / (1 + \<bar>x / (1 - \<bar>x\<bar>)\<bar>) = x" |
|
1660 using real_shrink_Galois by blast |
|
1661 |
|
1662 lemma continuous_shrink: |
|
1663 "continuous_on UNIV (\<lambda>x::real. x / (1 + \<bar>x\<bar>))" |
|
1664 by (intro continuous_intros) auto |
|
1665 |
|
1666 lemma strict_mono_shrink: |
|
1667 "strict_mono (\<lambda>x::real. x / (1 + \<bar>x\<bar>))" |
|
1668 by (simp add: monotoneI real_shrink_lt) |
|
1669 |
|
1670 lemma shrink_range: "(\<lambda>x::real. x / (1 + \<bar>x\<bar>)) ` S \<subseteq> {-1<..<1}" |
|
1671 by (auto simp: divide_simps) |
|
1672 |
|
1673 text \<open>Note: connected sets of real numbers are the same thing as intervals\<close> |
|
1674 lemma connected_shrink: |
|
1675 fixes S :: "real set" |
|
1676 shows "connected ((\<lambda>x. x / (1 + \<bar>x\<bar>)) ` S) \<longleftrightarrow> connected S" (is "?lhs = ?rhs") |
|
1677 proof |
|
1678 assume "?lhs" |
|
1679 then have "connected ((\<lambda>x. x / (1 - \<bar>x\<bar>)) ` (\<lambda>x. x / (1 + \<bar>x\<bar>)) ` S)" |
|
1680 by (metis continuous_on_real_grow shrink_range connected_continuous_image |
|
1681 continuous_on_subset) |
|
1682 then show "?rhs" |
|
1683 using real_grow_shrink by (force simp add: image_comp) |
|
1684 next |
|
1685 assume ?rhs |
|
1686 then show ?lhs |
|
1687 using connected_continuous_image |
|
1688 by (metis continuous_on_subset continuous_shrink subset_UNIV) |
|
1689 qed |
|
1690 |
1642 end |
1691 end |