Analysis I, Section 10.4: Inverse functions and derivatives

I have attempted to make the translation as faithful a paraphrasing as possible of the original text. When there is a choice between a more idiomatic Lean solution and a more faithful translation, I have generally chosen the latter. In particular, there will be places where the Lean code could be "golfed" to be more elegant and idiomatic, but I have consciously avoided doing so.

Main constructions and results of this section:

open Chapter9namespace Chapter10

Lemma 10.4.1

theorem _root_.HasDerivWithinAt.of_inverse {X Y: Set } {f: } {g: } (hfXY: x X, f x Y) (hgf: x X, g (f x) = x) {x₀ y₀ f'x₀ g'y₀: } (hx₀: x₀ X) (hfx₀: f x₀ = y₀) (hcluster: ClusterPt x₀ (.principal (X \ {x₀}))) (hf: HasDerivWithinAt f f'x₀ X x₀) (hg: HasDerivWithinAt g g'y₀ Y y₀) : g'y₀ * f'x₀ = 1 := X:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:f'x₀:g'y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:HasDerivWithinAt g g'y₀ Y y₀g'y₀ * f'x₀ = 1 -- This proof is written to follow the structure of the original text. have h1 : HasDerivWithinAt id (g'y₀ * f'x₀) X x₀ := X:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:f'x₀:g'y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:HasDerivWithinAt g g'y₀ Y y₀g'y₀ * f'x₀ = 1 X:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:f'x₀:g'y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:HasDerivWithinAt g g'y₀ Y y₀HasDerivWithinAt g g'y₀ Y y₀X:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:f'x₀:g'y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:HasDerivWithinAt g g'y₀ Y y₀ x X, id x = (g f) x X:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:f'x₀:g'y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:HasDerivWithinAt g g'y₀ Y y₀HasDerivWithinAt g g'y₀ Y y₀X:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:f'x₀:g'y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:HasDerivWithinAt g g'y₀ Y y₀ x X, id x = (g f) x All goals completed! 🐙 X:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:f'x₀:g'y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:HasDerivWithinAt g g'y₀ Y y₀h1:HasDerivWithinAt id (_fvar.2401 * _fvar.2400) _fvar.2392 _fvar.2398 := ?_mvar.3643h2:HasDerivWithinAt id 1 X x₀g'y₀ * f'x₀ = 1 All goals completed! 🐙
theorem _root_.HasDerivWithinAt.of_inverse' {X Y: Set } {f: } {g: } (hfXY: x X, f x Y) (hgf: x X, g (f x) = x) {x₀ y₀ f'x₀ g'y₀: } (hx₀: x₀ X) (hfx₀: f x₀ = y₀) (hcluster: ClusterPt x₀ (.principal (X \ {x₀}))) (hf: HasDerivWithinAt f f'x₀ X x₀) (hg: HasDerivWithinAt g g'y₀ Y y₀) : g'y₀ = 1/f'x₀ := eq_one_div_of_mul_eq_one_left (hf.of_inverse hfXY hgf hx₀ hfx₀ hcluster hg)theorem _root_.HasDerivWithinAt.of_inverse_of_zero_deriv {X Y: Set } {f: } {g: } (hfXY: x X, f x Y) (hgf: x X, g (f x) = x) {x₀ y₀: } (hx₀: x₀ X) (hfx₀: f x₀ = y₀) (hcluster: ClusterPt x₀ (.principal (X \ {x₀}))) (hf: HasDerivWithinAt f 0 X x₀) : ¬ DifferentiableWithinAt g Y y₀ := X:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f 0 X x₀¬DifferentiableWithinAt g Y y₀ X:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f 0 X x₀this:DifferentiableWithinAt g Y y₀False; X:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f 0 X x₀this: L, HasDerivWithinAt g L Y y₀False; X:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f 0 X x₀L✝:hg:HasDerivWithinAt g L✝ Y y₀False X:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f 0 X x₀L✝:hg:L✝ * 0 = 1FalseX:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f 0 X x₀L✝:hg:HasDerivWithinAt g L✝ Y y₀ x X, f x YX:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f 0 X x₀L✝:hg:HasDerivWithinAt g L✝ Y y₀ x X, g (f x) = xX:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f 0 X x₀L✝:hg:HasDerivWithinAt g L✝ Y y₀x₀ XX:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f 0 X x₀L✝:hg:HasDerivWithinAt g L✝ Y y₀f x₀ = y₀X:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f 0 X x₀L✝:hg:HasDerivWithinAt g L✝ Y y₀ClusterPt x₀ (Filter.principal (X \ {x₀})) X:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f 0 X x₀L✝:hg:L✝ * 0 = 1FalseX:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f 0 X x₀L✝:hg:HasDerivWithinAt g L✝ Y y₀ x X, f x YX:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f 0 X x₀L✝:hg:HasDerivWithinAt g L✝ Y y₀ x X, g (f x) = xX:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f 0 X x₀L✝:hg:HasDerivWithinAt g L✝ Y y₀x₀ XX:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f 0 X x₀L✝:hg:HasDerivWithinAt g L✝ Y y₀f x₀ = y₀X:Set Y:Set f: g: hfXY: x X, f x Yhgf: x X, g (f x) = xx₀:y₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f 0 X x₀L✝:hg:HasDerivWithinAt g L✝ Y y₀ClusterPt x₀ (Filter.principal (X \ {x₀})) All goals completed! 🐙declaration uses 'sorry'example : ¬ DifferentiableWithinAt (fun x: x^(1/3:)) (.Ici 0) 0 := ¬DifferentiableWithinAt (fun x => x ^ (1 / 3)) (Set.Ici 0) 0 All goals completed! 🐙

Theorem 10.4.2 (Inverse function theorem)

theorem declaration uses 'sorry'inverse_function_theorem {X Y: Set } {f: } {g: } (hfXY: x X, f x Y) (hgYX: y Y, g y X) (hgf: x X, g (f x) = x) (hfg: y Y, f (g y) = y) {x₀ y₀ f'x₀: } (hx₀: x₀ X) (hfx₀: f x₀ = y₀) (hne : f'x₀ 0) (hcluster: ClusterPt x₀ (.principal (X \ {x₀}))) (hf: HasDerivWithinAt f f'x₀ X x₀) (hg: ContinuousWithinAt g Y y₀) : HasDerivWithinAt g (1/f'x₀) Y y₀ := X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀HasDerivWithinAt g (1 / f'x₀) Y y₀ -- This proof is written to follow the structure of the original text. have had : AdherentPt y₀ (Y \ {y₀}) := X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀HasDerivWithinAt g (1 / f'x₀) Y y₀ X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:¬f'x₀ = 0hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀hcluster: a, (∀ (n : ), a n X ¬a n = x₀) Filter.Tendsto a Filter.atTop (nhds x₀) a, (∀ (n : ), a n Y ¬a n = y₀) Filter.Tendsto a Filter.atTop (nhds y₀) X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:¬f'x₀ = 0hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀x: hx: (n : ), x n X ¬x n = x₀hconv:Filter.Tendsto x Filter.atTop (nhds x₀) a, (∀ (n : ), a n Y ¬a n = y₀) Filter.Tendsto a Filter.atTop (nhds y₀); X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:¬f'x₀ = 0hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀x: hx: (n : ), x n X ¬x n = x₀hconv:Filter.Tendsto x Filter.atTop (nhds x₀)(∀ (n : ), (f x) n Y ¬(f x) n = y₀) Filter.Tendsto (f x) Filter.atTop (nhds y₀) X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:¬f'x₀ = 0hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀x: hx: (n : ), x n X ¬x n = x₀hconv:Filter.Tendsto x Filter.atTop (nhds x₀) (n : ), (f x) n Y ¬(f x) n = y₀X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:¬f'x₀ = 0hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀x: hx: (n : ), x n X ¬x n = x₀hconv:Filter.Tendsto x Filter.atTop (nhds x₀)Filter.Tendsto (f x) Filter.atTop (nhds y₀); X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:¬f'x₀ = 0hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀x: hx: (n : ), x n X ¬x n = x₀hconv:Filter.Tendsto x Filter.atTop (nhds x₀)Filter.Tendsto (f x) Filter.atTop (nhds y₀) X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:¬f'x₀ = 0hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀x: hx: (n : ), x n X ¬x n = x₀hconv:Filter.Tendsto x Filter.atTop (nhds x₀)Filter.Tendsto (f x) Filter.atTop (nhds (f x₀)) X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:¬f'x₀ = 0hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀x: hx: (n : ), x n X ¬x n = x₀hconv:Filter.Tendsto x Filter.atTop (nhds x₀)ContinuousWithinAt f X x₀ All goals completed! 🐙 X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀had:AdherentPt _fvar.77603 (_fvar.77595 \ {_fvar.77603}) := ?_mvar.77703 (a : ), (∀ (n : ), a n Y \ {y₀}) Filter.Tendsto a Filter.atTop (nhds y₀) Filter.Tendsto (fun n => (g (a n) - g y₀) / (a n - y₀)) Filter.atTop (nhds (1 / f'x₀)) X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀had:AdherentPt _fvar.77603 (_fvar.77595 \ {_fvar.77603}) := ?_mvar.77703y: hy: (n : ), y n Y \ {y₀}hconv:Filter.Tendsto y Filter.atTop (nhds y₀)Filter.Tendsto (fun n => (g (y n) - g y₀) / (y n - y₀)) Filter.atTop (nhds (1 / f'x₀)) X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀had:AdherentPt _fvar.77603 (_fvar.77595 \ {_fvar.77603}) := ?_mvar.77703y: hy: (n : ), y n Y \ {y₀}hconv:Filter.Tendsto y Filter.atTop (nhds y₀)x: := fun n => @_fvar.77597 (@_fvar.87026 n)Filter.Tendsto (fun n => (g (y n) - g y₀) / (y n - y₀)) Filter.atTop (nhds (1 / f'x₀)) have hy' : n, y n Y := X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀HasDerivWithinAt g (1 / f'x₀) Y y₀ All goals completed! 🐙 have hy₀: y₀ Y := X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀HasDerivWithinAt g (1 / f'x₀) Y y₀ All goals completed! 🐙 have hx : n, x n X \ {x₀}:= X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀HasDerivWithinAt g (1 / f'x₀) Y y₀ All goals completed! 🐙 X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀had:AdherentPt _fvar.77603 (_fvar.77595 \ {_fvar.77603}) := ?_mvar.77703y: hy: (n : ), y n Y \ {y₀}x: := fun n => @_fvar.77597 (@_fvar.87026 n)hy': (n : ), @_fvar.87026 n _fvar.77595 := ?_mvar.87373hy₀:_fvar.77603 _fvar.77595 := ?_mvar.91738hx: (n : ), @_fvar.87044 n _fvar.77594 \ {_fvar.77602} := ?_mvar.96428hconv:?_mvar.96439 := Filter.Tendsto.comp_of_continuous _fvar.91739 _fvar.77610 _fvar.87374 _fvar.87033Filter.Tendsto (fun n => (g (y n) - g y₀) / (y n - y₀)) Filter.atTop (nhds (1 / f'x₀)) have had' : AdherentPt x₀ (X \ {x₀}) := X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀HasDerivWithinAt g (1 / f'x₀) Y y₀ rwa [AdherentPt_defX:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀had:AdherentPt _fvar.77603 (_fvar.77595 \ {_fvar.77603}) := ?_mvar.77703y: hy: (n : ), y n Y \ {y₀}x: := fun n => @_fvar.77597 (@_fvar.87026 n)hy': (n : ), @_fvar.87026 n _fvar.77595 := ?_mvar.87373hy₀:_fvar.77603 _fvar.77595 := ?_mvar.91738hx: (n : ), @_fvar.87044 n _fvar.77594 \ {_fvar.77602} := ?_mvar.96428hconv:?_mvar.96439 := Filter.Tendsto.comp_of_continuous _fvar.91739 _fvar.77610 _fvar.87374 _fvar.87033ClusterPt x₀ (Filter.principal (X \ {x₀})) have hgy₀ : g y₀ = x₀ := X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf:HasDerivWithinAt f f'x₀ X x₀hg:ContinuousWithinAt g Y y₀HasDerivWithinAt g (1 / f'x₀) Y y₀ All goals completed! 🐙 X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf: (a : ), (∀ (n : ), a n X \ {x₀}) Filter.Tendsto a Filter.atTop (nhds x₀) Filter.Tendsto (fun n => (f (a n) - f x₀) / (a n - x₀)) Filter.atTop (nhds f'x₀)hg:ContinuousWithinAt g Y y₀had:AdherentPt y₀ (Y \ {y₀})y: hy: (n : ), y n Y \ {y₀}x: := fun n => @_fvar.77597 (@_fvar.102591 n)hy': (n : ), y n Yhy₀:y₀ Yhx: (n : ), x n X \ {x₀}hconv:Filter.Tendsto (fun n => g (y n)) Filter.atTop (nhds (g y₀))had':AdherentPt x₀ (X \ {x₀})hgy₀:g y₀ = x₀Filter.Tendsto (fun n => (g (y n) - g y₀) / (y n - y₀)) Filter.atTop (nhds (1 / f'x₀)) X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf: (a : ), (∀ (n : ), a n X \ {x₀}) Filter.Tendsto a Filter.atTop (nhds x₀) Filter.Tendsto (fun n => (f (a n) - f x₀) / (a n - x₀)) Filter.atTop (nhds f'x₀)hg:ContinuousWithinAt g Y y₀had:AdherentPt y₀ (Y \ {y₀})y: hy: (n : ), y n Y \ {y₀}x: := fun n => @_fvar.77597 (@_fvar.102591 n)hy': (n : ), y n Yhy₀:y₀ Yhx: (n : ), x n X \ {x₀}hconv:Filter.Tendsto (fun n => g (y n)) Filter.atTop (nhds (g y₀))had':AdherentPt x₀ (X \ {x₀})hgy₀:g y₀ = x₀n:(g (y n) - g y₀) / (y n - y₀) = ((f (x n) - f x₀) / (x n - x₀))⁻¹X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf: (a : ), (∀ (n : ), a n X \ {x₀}) Filter.Tendsto a Filter.atTop (nhds x₀) Filter.Tendsto (fun n => (f (a n) - f x₀) / (a n - x₀)) Filter.atTop (nhds f'x₀)hg:ContinuousWithinAt g Y y₀had:AdherentPt y₀ (Y \ {y₀})y: hy: (n : ), y n Y \ {y₀}x: := fun n => @_fvar.77597 (@_fvar.102591 n)hy': (n : ), y n Yhy₀:y₀ Yhx: (n : ), x n X \ {x₀}hconv:Filter.Tendsto (fun n => g (y n)) Filter.atTop (nhds (g y₀))had':AdherentPt x₀ (X \ {x₀})hgy₀:g y₀ = x₀1 / f'x₀ = f'x₀⁻¹X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf: (a : ), (∀ (n : ), a n X \ {x₀}) Filter.Tendsto a Filter.atTop (nhds x₀) Filter.Tendsto (fun n => (f (a n) - f x₀) / (a n - x₀)) Filter.atTop (nhds f'x₀)hg:ContinuousWithinAt g Y y₀had:AdherentPt y₀ (Y \ {y₀})y: hy: (n : ), y n Y \ {y₀}x: := fun n => @_fvar.77597 (@_fvar.102591 n)hy': (n : ), y n Yhy₀:y₀ Yhx: (n : ), x n X \ {x₀}hconv:Filter.Tendsto (fun n => g (y n)) Filter.atTop (nhds (g y₀))had':AdherentPt x₀ (X \ {x₀})hgy₀:g y₀ = x₀Filter.Tendsto x Filter.atTop (nhds x₀)X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf: (a : ), (∀ (n : ), a n X \ {x₀}) Filter.Tendsto a Filter.atTop (nhds x₀) Filter.Tendsto (fun n => (f (a n) - f x₀) / (a n - x₀)) Filter.atTop (nhds f'x₀)hg:ContinuousWithinAt g Y y₀had:AdherentPt y₀ (Y \ {y₀})y: hy: (n : ), y n Y \ {y₀}x: := fun n => @_fvar.77597 (@_fvar.102591 n)hy': (n : ), y n Yhy₀:y₀ Yhx: (n : ), x n X \ {x₀}hconv:Filter.Tendsto (fun n => g (y n)) Filter.atTop (nhds (g y₀))had':AdherentPt x₀ (X \ {x₀})hgy₀:g y₀ = x₀f'x₀ 0 X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf: (a : ), (∀ (n : ), a n X \ {x₀}) Filter.Tendsto a Filter.atTop (nhds x₀) Filter.Tendsto (fun n => (f (a n) - f x₀) / (a n - x₀)) Filter.atTop (nhds f'x₀)hg:ContinuousWithinAt g Y y₀had:AdherentPt y₀ (Y \ {y₀})y: hy: (n : ), y n Y \ {y₀}x: := fun n => @_fvar.77597 (@_fvar.102591 n)hy': (n : ), y n Yhy₀:y₀ Yhx: (n : ), x n X \ {x₀}hconv:Filter.Tendsto (fun n => g (y n)) Filter.atTop (nhds (g y₀))had':AdherentPt x₀ (X \ {x₀})hgy₀:g y₀ = x₀n:(g (y n) - g y₀) / (y n - y₀) = ((f (x n) - f x₀) / (x n - x₀))⁻¹X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf: (a : ), (∀ (n : ), a n X \ {x₀}) Filter.Tendsto a Filter.atTop (nhds x₀) Filter.Tendsto (fun n => (f (a n) - f x₀) / (a n - x₀)) Filter.atTop (nhds f'x₀)hg:ContinuousWithinAt g Y y₀had:AdherentPt y₀ (Y \ {y₀})y: hy: (n : ), y n Y \ {y₀}x: := fun n => @_fvar.77597 (@_fvar.102591 n)hy': (n : ), y n Yhy₀:y₀ Yhx: (n : ), x n X \ {x₀}hconv:Filter.Tendsto (fun n => g (y n)) Filter.atTop (nhds (g y₀))had':AdherentPt x₀ (X \ {x₀})hgy₀:g y₀ = x₀1 / f'x₀ = f'x₀⁻¹X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf: (a : ), (∀ (n : ), a n X \ {x₀}) Filter.Tendsto a Filter.atTop (nhds x₀) Filter.Tendsto (fun n => (f (a n) - f x₀) / (a n - x₀)) Filter.atTop (nhds f'x₀)hg:ContinuousWithinAt g Y y₀had:AdherentPt y₀ (Y \ {y₀})y: hy: (n : ), y n Y \ {y₀}x: := fun n => @_fvar.77597 (@_fvar.102591 n)hy': (n : ), y n Yhy₀:y₀ Yhx: (n : ), x n X \ {x₀}hconv:Filter.Tendsto (fun n => g (y n)) Filter.atTop (nhds (g y₀))had':AdherentPt x₀ (X \ {x₀})hgy₀:g y₀ = x₀Filter.Tendsto x Filter.atTop (nhds x₀)X:Set Y:Set f: g: hfXY: x X, f x YhgYX: y Y, g y Xhgf: x X, g (f x) = xhfg: y Y, f (g y) = yx₀:y₀:f'x₀:hx₀:x₀ Xhfx₀:f x₀ = y₀hne:f'x₀ 0hcluster:ClusterPt x₀ (Filter.principal (X \ {x₀}))hf: (a : ), (∀ (n : ), a n X \ {x₀}) Filter.Tendsto a Filter.atTop (nhds x₀) Filter.Tendsto (fun n => (f (a n) - f x₀) / (a n - x₀)) Filter.atTop (nhds f'x₀)hg:ContinuousWithinAt g Y y₀had:AdherentPt y₀ (Y \ {y₀})y: hy: (n : ), y n Y \ {y₀}x: := fun n => @_fvar.77597 (@_fvar.102591 n)hy': (n : ), y n Yhy₀:y₀ Yhx: (n : ), x n X \ {x₀}hconv:Filter.Tendsto (fun n => g (y n)) Filter.atTop (nhds (g y₀))had':AdherentPt x₀ (X \ {x₀})hgy₀:g y₀ = x₀f'x₀ 0 All goals completed! 🐙

Exercise 10.4.1(a)

declaration uses 'sorry'example {n:} (hn: n > 0) : ContinuousOn (fun x: x^(1/n:)) (.Ici 0) := n:hn:n > 0ContinuousOn (fun x => x ^ (1 / n)) (Set.Ici 0) All goals completed! 🐙

Exercise 10.4.1(b)

declaration uses 'sorry'example {n:} (hn: n > 0) {x:} (hx: x Set.Ici 0) : HasDerivWithinAt (fun x: x^(1/n:)) ((n:)⁻¹ * x^((n:)⁻¹-1)) (.Ici 0) x := n:hn:n > 0x:hx:x Set.Ici 0HasDerivWithinAt (fun x => x ^ (1 / n)) ((↑n)⁻¹ * x ^ ((↑n)⁻¹ - 1)) (Set.Ici 0) x All goals completed! 🐙

Exercise 10.4.2(a)

declaration uses 'sorry'example (q:) {x:} (hx: x Set.Ici 0) : HasDerivWithinAt (fun x: x^(q:)) (q * x^(q-1:)) (.Ici 0) x := q:x:hx:x Set.Ici 0HasDerivWithinAt (fun x => x ^ q) (q * x ^ (q - 1)) (Set.Ici 0) x All goals completed! 🐙

Exercise 10.4.2(b)

declaration uses 'sorry'example (q:) : (nhdsWithin 1 (.Ici 0 \ {1})).Tendsto (fun x: (x^(q:)-1)/(x-1)) (nhds q) := q:Filter.Tendsto (fun x => (x ^ q - 1) / (x - 1)) (nhdsWithin 1 (Set.Ici 0 \ {1})) (nhds q) All goals completed! 🐙

Exercise 10.4.3(a)

declaration uses 'sorry'example (α:) : (nhdsWithin 1 (.Ici 0 \ {1})).Tendsto (fun x: (x^α-1^α)/(x-1)) (nhds α) := α:Filter.Tendsto (fun x => (x ^ α - 1 ^ α) / (x - 1)) (nhdsWithin 1 (Set.Ici 0 \ {1})) (nhds α) All goals completed! 🐙

Exercise 10.4.2(b)

declaration uses 'sorry'example (α:) {x:} (hx: x Set.Ici 0) : HasDerivWithinAt (fun x: x^α) (α * x^(α-1)) (.Ici 0) x := α:x:hx:x Set.Ici 0HasDerivWithinAt (fun x => x ^ α) (α * x ^ (α - 1)) (Set.Ici 0) x All goals completed! 🐙
end Chapter10