Paper V · Lean source

SmithAction.lean

Inherited / related evidence Coverage and evidence

The edition relies on earlier or related formal evidence. That evidence is not a fresh full-edition replay.

This viewer reads the retained source; it does not run Lean or assign new claim mappings.

KomorebiPaperV/SmithAction.lean74 lines

Original source pathsource/complete/original_snapshot/formalization/lean/KomorebiPaperV/SmithAction.lean
Skip declarations and read code

Skip source text

1 import Mathlib.Basic.Complex.Basic
2 import Mathlib.Tactic
3 
4 /-!
5 Author: Komorebi P.
6 Normalized homogeneous Smith action. Pair coordinates represent [u:v], so the
7 half-turn swaps zero and infinity. Chart formulas carry explicit denominators.
8 -/
9 
10 namespace KomorebiPaperV.SmithAction
11 
12 noncomputable def action (a : ℂ) (p : ℂ × ℂ) : ℂ × ℂ :=
13   (((1 + a) * p.1 + (1 - a) * p.2) / 2,
14    ((1 - a) * p.1 + (1 + a) * p.2) / 2)
15 
16 theorem action_mul (a b : ℂ) (p : ℂ × ℂ) :
17     action a (action b p) = action (a * b) p := by
18   apply Prod.ext <;> dsimp [action] <;> ring
19 
20 theorem action_one (p : ℂ × ℂ) : action 1 p = p := by
21   apply Prod.ext <;> dsimp [action] <;> ring
22 
23 theorem action_scale (a c : ℂ) (p : ℂ × ℂ) :
24     action a (c * p.1, c * p.2) =
25       (c * (action a p).1, c * (action a p).2) := by
26   apply Prod.ext <;> dsimp [action] <;> ring
27 
28 theorem action_nonzero (a : ℂ) (ha : a ≠ 0) (p : ℂ × ℂ) (hp : p ≠ 0) :
29     action a p ≠ 0 := by
30   intro h
31   have hi := action_mul a⁻¹ a p
32   rw [inv_mul_cancel₀ ha, action_one, h] at hi
33   have hz : action a⁻¹ (0 : ℂ × ℂ) = 0 := by simp [action]
34   exact hp (hi.symm.trans hz)
35 
36 theorem half_turn (p : ℂ × ℂ) : action (-1) p = (p.2, p.1) := by
37   apply Prod.ext <;> dsimp [action] <;> ring
38 
39 theorem half_turn_zero : action (-1) ((0 : ℂ), 1) = (1, 0) := by
40   exact half_turn _
41 
42 theorem half_turn_infinity : action (-1) ((1 : ℂ), 0) = (0, 1) := by
43   exact half_turn _
44 
45 def denominator (a z : ℂ) : ℂ := (1 - a) * z + (1 + a)
46 
47 noncomputable def mobius (a z : ℂ) : ℂ := ((1 + a) * z + (1 - a)) / denominator a z
48 
49 theorem homogeneous_chart (a z : ℂ) :
50     (action a (z, 1)).1 / (action a (z, 1)).2 = mobius a z := by
51   dsimp [action, mobius, denominator]
52   simp only [mul_one]
53   exact div_div_div_cancel_right₀ (by norm_num : (2 : ℂ) ≠ 0) _ _
54 
55 theorem chart_composition (a b z : ℂ)
56     (hb : denominator b z ≠ 0)
57     (hab : denominator (a * b) z ≠ 0)
58     (ha : denominator a (mobius b z) ≠ 0) :
59     mobius a (mobius b z) = mobius (a * b) z := by
60   have hrel : mobius b z * denominator b z = (1 + b) * z + (1 - b) :=
61     div_mul_cancel₀ _ hb
62   apply (div_eq_div_iff ha hab).mpr
63   dsimp only [denominator] at hrel ⊢
64   linear_combination 2 * a * hrel
65 
66 theorem finite_half_turn (z : ℂ) (hz : z ≠ 0) :
67     denominator (-1) z ≠ 0 ∧ mobius (-1) z = z⁻¹ := by
68   constructor
69   · simpa [denominator] using hz
70   · dsimp [mobius, denominator]
71     field_simp [hz]
72     ring
73 
74 end KomorebiPaperV.SmithAction

Back to source controls

Original file and source record

This copy matches the recorded source file. Its publication here does not change the work’s review status.

SHA-256: d6f863ccbb548e88f3d90e4ab380ad526bca8b90d62a7ec8cd4bbe7c99cedce8

Original source on GitHub

Back to Paper V: Polyphase Signal Calculus