Analysis I, Appendix A.3: The structure of proofs
Some examples of proofs
Proposition A.3.1
example {A B C D: Prop} (hAC: A → C) (hCD: C → D) (hDB: D → B): A → B := A:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → B⊢ A → B
A:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → Bh:A⊢ B
A:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → Bh:C⊢ B
A:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → Bh:D⊢ B
A:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → Bh:B⊢ B
All goals completed! 🐙Proposition A.3.2
example {x:ℝ} : x = Real.pi → Real.sin (x/2) + 1 = 2 := x:ℝ⊢ x = Real.pi → Real.sin (x / 2) + 1 = 2
x:ℝh:x = Real.pi⊢ Real.sin (x / 2) + 1 = 2
-- congr() produces an equality (or similar relation) from one or more existing relations, such as `h`, by substituting that relation in every location marked with a `$` sign followed by that relation, for instance `h` would be substituted at every location of `$h`.
x:ℝh:?_mvar.316 := id (congrArg (fun x => x / 2) _fvar.312)⊢ Real.sin (x / 2) + 1 = 2
x:ℝh:?_mvar.500 := id (congrArg Real.sin _fvar.494)⊢ Real.sin (x / 2) + 1 = 2
x:ℝh:Real.sin (x / 2) = 1⊢ Real.sin (x / 2) + 1 = 2
x:ℝh:?_mvar.767 := id (congrArg (fun x => x + 1) _fvar.762)⊢ Real.sin (x / 2) + 1 = 2
x:ℝh:?_mvar.767 := id (congrArg (fun x => x + 1) _fvar.762)⊢ 2 = 1 + 1
All goals completed! 🐙Proposition A.3.1, alternate proof
example {A B C D: Prop} (hAC: A → C) (hCD: C → D) (hDB: D → B): A → B := A:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → B⊢ A → B
A:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → Bh:A⊢ B
A:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → Bh:AhD:D⊢ BA:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → Bh:A⊢ D
A:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → Bh:AhD:D⊢ B All goals completed! 🐙
A:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → Bh:AhC:C⊢ DA:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → Bh:A⊢ C
A:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → Bh:AhC:C⊢ D All goals completed! 🐙
All goals completed! 🐙Proposition A.3.2, alternate proof
example {x:ℝ} : x = Real.pi → Real.sin (x/2) + 1 = 2 := x:ℝ⊢ x = Real.pi → Real.sin (x / 2) + 1 = 2
x:ℝh:x = Real.pi⊢ Real.sin (x / 2) + 1 = 2
x:ℝh:x = Real.pih1:Real.sin (x / 2) = 1⊢ Real.sin (x / 2) + 1 = 2x:ℝh:x = Real.pi⊢ Real.sin (x / 2) = 1
x:ℝh:x = Real.pih1:Real.sin (x / 2) = 1⊢ Real.sin (x / 2) + 1 = 2 x:ℝh:x = Real.pih1:Real.sin (x / 2) = 1⊢ 1 + 1 = 2
All goals completed! 🐙
x:ℝh:x = Real.pih2:x / 2 = Real.pi / 2⊢ Real.sin (x / 2) = 1x:ℝh:x = Real.pi⊢ x / 2 = Real.pi / 2
x:ℝh:x = Real.pih2:x / 2 = Real.pi / 2⊢ Real.sin (x / 2) = 1 All goals completed! 🐙
All goals completed! 🐙Proposition A.3.3
example {r:ℝ} (h: 0 < r) (h': r < 1) : Summable (fun n:ℕ ↦ n * r^n) := r:ℝh:0 < rh':r < 1⊢ Summable fun n => ↑n * r ^ n
r:ℝh:0 < rh':r < 1⊢ ∀ᶠ (n : ℕ) in Filter.atTop, ↑n * r ^ n ≠ 0r:ℝh:0 < rh':r < 1⊢ Filter.Tendsto (fun n => ‖↑(n + 1) * r ^ (n + 1)‖ / ‖↑n * r ^ n‖) Filter.atTop (nhds r)
r:ℝh:0 < rh':r < 1⊢ ∀ᶠ (n : ℕ) in Filter.atTop, ↑n * r ^ n ≠ 0 r:ℝh:0 < rh':r < 1⊢ ∃ a, ∀ (b : ℕ), a ≤ b → ¬b = 0 ∧ (r = 0 → b = 0)
r:ℝh:0 < rh':r < 1⊢ ∀ (b : ℕ), 1 ≤ b → ¬b = 0 ∧ (r = 0 → b = 0)
r:ℝh:0 < rh':r < 1b:ℕhb:1 ≤ b⊢ ¬b = 0 ∧ (r = 0 → b = 0)
All goals completed! 🐙
r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => r * ((↑n + 1) / ↑n)) Filter.atTop (nhds r)⊢ Filter.Tendsto (fun n => ‖↑(n + 1) * r ^ (n + 1)‖ / ‖↑n * r ^ n‖) Filter.atTop (nhds r)r:ℝh:0 < rh':r < 1⊢ Filter.Tendsto (fun n => r * ((↑n + 1) / ↑n)) Filter.atTop (nhds r)
r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => r * ((↑n + 1) / ↑n)) Filter.atTop (nhds r)⊢ Filter.Tendsto (fun n => ‖↑(n + 1) * r ^ (n + 1)‖ / ‖↑n * r ^ n‖) Filter.atTop (nhds r) r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => r * ((↑n + 1) / ↑n)) Filter.atTop (nhds r)⊢ (fun n => r * ((↑n + 1) / ↑n)) =ᶠ[Filter.atTop] fun n => ‖↑(n + 1) * r ^ (n + 1)‖ / ‖↑n * r ^ n‖
r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => r * ((↑n + 1) / ↑n)) Filter.atTop (nhds r)⊢ ∃ a, ∀ (b : ℕ), a ≤ b → r * ((↑b + 1) / ↑b) = |↑b + 1| * |r| ^ (b + 1) / (↑b * |r| ^ b)
r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => r * ((↑n + 1) / ↑n)) Filter.atTop (nhds r)⊢ ∀ (b : ℕ), 1 ≤ b → r * ((↑b + 1) / ↑b) = |↑b + 1| * |r| ^ (b + 1) / (↑b * |r| ^ b)
r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => r * ((↑n + 1) / ↑n)) Filter.atTop (nhds r)b:ℕhb:1 ≤ b⊢ r * ((↑b + 1) / ↑b) = |↑b + 1| * |r| ^ (b + 1) / (↑b * |r| ^ b)
have : b > 0 := r:ℝh:0 < rh':r < 1⊢ Summable fun n => ↑n * r ^ n All goals completed! 🐙
have hb1 : (b+1:ℝ) > 0 := r:ℝh:0 < rh':r < 1⊢ Summable fun n => ↑n * r ^ n All goals completed! 🐙
r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => r * ((↑n + 1) / ↑n)) Filter.atTop (nhds r)b:ℕhb:1 ≤ bthis:_fvar.25009 > 0 := ?_mvar.25050hb1:↑_fvar.25009 + 1 > 0 := ?_mvar.27080⊢ r * ((↑b + 1) / ↑b) = (↑b + 1) * r ^ (b + 1) / (↑b * r ^ b)
r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => r * ((↑n + 1) / ↑n)) Filter.atTop (nhds r)b:ℕhb:1 ≤ bthis:_fvar.25009 > 0 := ?_mvar.25050hb1:↑_fvar.25009 + 1 > 0 := ?_mvar.27080⊢ r * (↑b + 1) * (↑b * r ^ b) = (↑b + 1) * r ^ (b + 1) * ↑b
All goals completed! 🐙
r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => (↑n + 1) / ↑n) Filter.atTop (nhds 1)⊢ Filter.Tendsto (fun n => r * ((↑n + 1) / ↑n)) Filter.atTop (nhds r)r:ℝh:0 < rh':r < 1⊢ Filter.Tendsto (fun n => (↑n + 1) / ↑n) Filter.atTop (nhds 1)
r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => (↑n + 1) / ↑n) Filter.atTop (nhds 1)⊢ Filter.Tendsto (fun n => r * ((↑n + 1) / ↑n)) Filter.atTop (nhds r) r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => (↑n + 1) / ↑n) Filter.atTop (nhds 1)⊢ r = r * 1
All goals completed! 🐙
r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => 1 + 1 / ↑n) Filter.atTop (nhds 1)⊢ Filter.Tendsto (fun n => (↑n + 1) / ↑n) Filter.atTop (nhds 1)r:ℝh:0 < rh':r < 1⊢ Filter.Tendsto (fun n => 1 + 1 / ↑n) Filter.atTop (nhds 1)
r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => 1 + 1 / ↑n) Filter.atTop (nhds 1)⊢ Filter.Tendsto (fun n => (↑n + 1) / ↑n) Filter.atTop (nhds 1) r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => 1 + 1 / ↑n) Filter.atTop (nhds 1)⊢ (fun n => 1 + 1 / ↑n) =ᶠ[Filter.atTop] fun n => (↑n + 1) / ↑n
r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => 1 + 1 / ↑n) Filter.atTop (nhds 1)⊢ ∃ a, ∀ (b : ℕ), a ≤ b → 1 + (↑b)⁻¹ = (↑b + 1) / ↑b
r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => 1 + 1 / ↑n) Filter.atTop (nhds 1)⊢ ∀ (b : ℕ), 1 ≤ b → 1 + (↑b)⁻¹ = (↑b + 1) / ↑b
r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => 1 + 1 / ↑n) Filter.atTop (nhds 1)b:ℕhb:1 ≤ b⊢ 1 + (↑b)⁻¹ = (↑b + 1) / ↑b
have : (b:ℝ) > 0 := r:ℝh:0 < rh':r < 1⊢ Summable fun n => ↑n * r ^ n All goals completed! 🐙
All goals completed! 🐙
r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => 1 / ↑n) Filter.atTop (nhds 0)⊢ Filter.Tendsto (fun n => 1 + 1 / ↑n) Filter.atTop (nhds 1)r:ℝh:0 < rh':r < 1⊢ Filter.Tendsto (fun n => 1 / ↑n) Filter.atTop (nhds 0)
r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => 1 / ↑n) Filter.atTop (nhds 0)⊢ Filter.Tendsto (fun n => 1 + 1 / ↑n) Filter.atTop (nhds 1) r:ℝh:0 < rh':r < 1hconv:Filter.Tendsto (fun n => 1 / ↑n) Filter.atTop (nhds 0)⊢ 1 = 1 + 0
All goals completed! 🐙
All goals completed! 🐙Proposition A.3.1, third proof
example {A B C D: Prop} (hAC: A → C) (hCD: C → D) (hDB: D → B): A → B := A:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → B⊢ A → B
A:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → Bh:A⊢ B
A:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → Bh:AhD:D⊢ BA:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → Bh:A⊢ D
A:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → Bh:AhD:D⊢ B All goals completed! 🐙
A:PropB:PropC:PropD:ProphAC:A → ChCD:C → DhDB:D → Bh:AhC:_fvar.53662 := @_fvar.53664 _fvar.53668⊢ D
All goals completed! 🐙Proposition A.3.4
example {A B C D E F G H I:Prop} (hAE: A → E) (hEB: E ∧ B → F) (hADG : A → G → D) (hHI: H ∨ I) (hFHC : F ∧ H → C) (hAHG : A ∧ H → G) (hIG: I → G) (hIGC: G → C) : A ∧ B → C ∧ D := A:PropB:PropC:PropD:PropE:PropF:PropG:PropH:PropI:ProphAE:A → EhEB:E ∧ B → FhADG:A → G → DhHI:H ∨ IhFHC:F ∧ H → ChAHG:A ∧ H → GhIG:I → GhIGC:G → C⊢ A ∧ B → C ∧ D
A:PropB:PropC:PropD:PropE:PropF:PropG:PropH:PropI:ProphAE:A → EhEB:E ∧ B → FhADG:A → G → DhHI:H ∨ IhFHC:F ∧ H → ChAHG:A ∧ H → GhIG:I → GhIGC:G → ChA:AhB:B⊢ C ∧ D
A:PropB:PropC:PropD:PropE:PropF:PropG:PropH:PropI:ProphAE:A → EhEB:E ∧ B → FhADG:A → G → DhHI:H ∨ IhFHC:F ∧ H → ChAHG:A ∧ H → GhIG:I → GhIGC:G → ChA:AhB:BhE:_fvar.53751 := @_fvar.53756 _fvar.53788⊢ C ∧ D
A:PropB:PropC:PropD:PropE:PropF:PropG:PropH:PropI:ProphAE:A → EhEB:E ∧ B → FhADG:A → G → DhHI:H ∨ IhFHC:F ∧ H → ChAHG:A ∧ H → GhIG:I → GhIGC:G → ChA:AhB:BhE:_fvar.53751 := @_fvar.53756 _fvar.53788hF:_fvar.53752 := @_fvar.53757 ⋯⊢ C ∧ D
A:PropB:PropC:PropD:PropE:PropF:PropG:PropH:PropI:ProphAE:A → EhEB:E ∧ B → FhADG:A → G → DhHI:H ∨ IhFHC:F ∧ H → ChAHG:A ∧ H → GhIG:I → GhIGC:G → ChA:AhB:BhE:_fvar.53751 := @_fvar.53756 _fvar.53788hF:_fvar.53752 := @_fvar.53757 ⋯hCG:C ∧ G⊢ C ∧ DA:PropB:PropC:PropD:PropE:PropF:PropG:PropH:PropI:ProphAE:A → EhEB:E ∧ B → FhADG:A → G → DhHI:H ∨ IhFHC:F ∧ H → ChAHG:A ∧ H → GhIG:I → GhIGC:G → ChA:AhB:BhE:_fvar.53751 := @_fvar.53756 _fvar.53788hF:_fvar.53752 := @_fvar.53757 ⋯⊢ C ∧ G
A:PropB:PropC:PropD:PropE:PropF:PropG:PropH:PropI:ProphAE:A → EhEB:E ∧ B → FhADG:A → G → DhHI:H ∨ IhFHC:F ∧ H → ChAHG:A ∧ H → GhIG:I → GhIGC:G → ChA:AhB:BhE:_fvar.53751 := @_fvar.53756 _fvar.53788hF:_fvar.53752 := @_fvar.53757 ⋯hCG:C ∧ G⊢ C ∧ D A:PropB:PropC:PropD:PropE:PropF:PropG:PropH:PropI:ProphAE:A → EhEB:E ∧ B → FhADG:A → G → DhHI:H ∨ IhFHC:F ∧ H → ChAHG:A ∧ H → GhIG:I → GhIGC:G → ChA:AhB:BhE:_fvar.53751 := @_fvar.53756 _fvar.53788hF:_fvar.53752 := @_fvar.53757 ⋯hC:ChG:G⊢ C ∧ D
A:PropB:PropC:PropD:PropE:PropF:PropG:PropH:PropI:ProphAE:A → EhEB:E ∧ B → FhADG:A → G → DhHI:H ∨ IhFHC:F ∧ H → ChAHG:A ∧ H → GhIG:I → GhIGC:G → ChA:AhB:BhE:_fvar.53751 := @_fvar.53756 _fvar.53788hF:_fvar.53752 := @_fvar.53757 ⋯hC:ChG:GhD:_fvar.53750 := @_fvar.53758 _fvar.53788 _fvar.53894⊢ C ∧ D
All goals completed! 🐙
A:PropB:PropC:PropD:PropE:PropF:PropG:PropH:PropI:ProphAE:A → EhEB:E ∧ B → FhADG:A → G → DhFHC:F ∧ H → ChAHG:A ∧ H → GhIG:I → GhIGC:G → ChA:AhB:BhE:_fvar.53751 := @_fvar.53756 _fvar.53788hF:_fvar.53752 := @_fvar.53757 ⋯hH:H⊢ C ∧ GA:PropB:PropC:PropD:PropE:PropF:PropG:PropH:PropI:ProphAE:A → EhEB:E ∧ B → FhADG:A → G → DhFHC:F ∧ H → ChAHG:A ∧ H → GhIG:I → GhIGC:G → ChA:AhB:BhE:_fvar.53751 := @_fvar.53756 _fvar.53788hF:_fvar.53752 := @_fvar.53757 ⋯hI:I⊢ C ∧ G
A:PropB:PropC:PropD:PropE:PropF:PropG:PropH:PropI:ProphAE:A → EhEB:E ∧ B → FhADG:A → G → DhFHC:F ∧ H → ChAHG:A ∧ H → GhIG:I → GhIGC:G → ChA:AhB:BhE:_fvar.53751 := @_fvar.53756 _fvar.53788hF:_fvar.53752 := @_fvar.53757 ⋯hH:H⊢ C ∧ G A:PropB:PropC:PropD:PropE:PropF:PropG:PropH:PropI:ProphAE:A → EhEB:E ∧ B → FhADG:A → G → DhFHC:F ∧ H → ChAHG:A ∧ H → GhIG:I → GhIGC:G → ChA:AhB:BhE:_fvar.53751 := @_fvar.53756 _fvar.53788hF:_fvar.53752 := @_fvar.53757 ⋯hH:HhC:?_mvar.53939 := @_fvar.53760 ⋯⊢ C ∧ G
A:PropB:PropC:PropD:PropE:PropF:PropG:PropH:PropI:ProphAE:A → EhEB:E ∧ B → FhADG:A → G → DhFHC:F ∧ H → ChAHG:A ∧ H → GhIG:I → GhIGC:G → ChA:AhB:BhE:_fvar.53751 := @_fvar.53756 _fvar.53788hF:_fvar.53752 := @_fvar.53757 ⋯hH:HhC:?_mvar.53939 := @_fvar.53760 ⋯hG:?_mvar.53951 := @_fvar.53761 ⋯⊢ C ∧ G
All goals completed! 🐙
A:PropB:PropC:PropD:PropE:PropF:PropG:PropH:PropI:ProphAE:A → EhEB:E ∧ B → FhADG:A → G → DhFHC:F ∧ H → ChAHG:A ∧ H → GhIG:I → GhIGC:G → ChA:AhB:BhE:_fvar.53751 := @_fvar.53756 _fvar.53788hF:_fvar.53752 := @_fvar.53757 ⋯hI:IhG:?_mvar.53969 := @_fvar.53762 _fvar.53935⊢ C ∧ G
A:PropB:PropC:PropD:PropE:PropF:PropG:PropH:PropI:ProphAE:A → EhEB:E ∧ B → FhADG:A → G → DhFHC:F ∧ H → ChAHG:A ∧ H → GhIG:I → GhIGC:G → ChA:AhB:BhE:_fvar.53751 := @_fvar.53756 _fvar.53788hF:_fvar.53752 := @_fvar.53757 ⋯hI:IhG:?_mvar.53969 := @_fvar.53762 _fvar.53935hC:?_mvar.53975 := @_fvar.53763 _fvar.53970⊢ C ∧ G
All goals completed! 🐙Proposition A.3.5
example {A B C D:Prop} (hBC: B → C) (hAD: A → D) (hCD: D → ¬ C) : A → ¬ B := A:PropB:PropC:PropD:ProphBC:B → ChAD:A → DhCD:D → ¬C⊢ A → ¬B
A:PropB:PropC:PropD:ProphBC:B → ChAD:A → DhCD:D → ¬ChA:A⊢ ¬B
A:PropB:PropC:PropD:ProphBC:B → ChAD:A → DhCD:D → ¬ChA:AhB:B⊢ False
A:PropB:PropC:PropD:ProphBC:B → ChAD:A → DhCD:D → ¬ChA:AhB:BhC:_fvar.54021 := @_fvar.54023 _fvar.54033⊢ False
A:PropB:PropC:PropD:ProphBC:B → ChAD:A → DhCD:D → ¬ChA:AhB:BhC:_fvar.54021 := @_fvar.54023 _fvar.54033hD:_fvar.54022 := @_fvar.54024 _fvar.54028⊢ False
A:PropB:PropC:PropD:ProphBC:B → ChAD:A → DhCD:D → ¬ChA:AhB:BhC:_fvar.54021 := @_fvar.54023 _fvar.54033hD:_fvar.54022 := @_fvar.54024 _fvar.54028hC':¬_fvar.54021 := @_fvar.54025 _fvar.54042⊢ False
All goals completed! 🐙