IndisputableMonolith.Chemistry.SolvationShellsFromConfigDim
IndisputableMonolith/Chemistry/SolvationShellsFromConfigDim.lean · 51 lines · 7 declarations
show as:
view math explainer →
1import Mathlib
2import IndisputableMonolith.Constants
3
4/-!
5# Solvation Shells from configDim — B10 Chemistry Depth
6
7Five canonical solvation shells for an ionic solute in water
8(= configDim D = 5):
9 primary hydration, secondary hydration, tertiary hydration,
10 bulk-boundary layer, far bulk.
11
12Shell radius on the φ-ladder: adjacent-shell ratio = φ.
13
14Lean status: 0 sorry, 0 axiom.
15-/
16
17namespace IndisputableMonolith.Chemistry.SolvationShellsFromConfigDim
18open Constants
19
20inductive SolvationShell where
21 | primaryHydration
22 | secondaryHydration
23 | tertiaryHydration
24 | bulkBoundary
25 | farBulk
26 deriving DecidableEq, Repr, BEq, Fintype
27
28theorem solvationShell_count : Fintype.card SolvationShell = 5 := by decide
29
30noncomputable def shellRadius (k : ℕ) : ℝ := phi ^ k
31
32theorem shellRadius_ratio (k : ℕ) : shellRadius (k + 1) / shellRadius k = phi := by
33 unfold shellRadius
34 have hpos : (0 : ℝ) < phi ^ k := pow_pos phi_pos k
35 rw [div_eq_iff hpos.ne', pow_succ]
36 ring
37
38theorem shellRadius_pos (k : ℕ) : 0 < shellRadius k := pow_pos phi_pos k
39
40structure SolvationShellCert where
41 five_shells : Fintype.card SolvationShell = 5
42 phi_ratio : ∀ k, shellRadius (k + 1) / shellRadius k = phi
43 radius_always_pos : ∀ k, 0 < shellRadius k
44
45noncomputable def solvationShellCert : SolvationShellCert where
46 five_shells := solvationShell_count
47 phi_ratio := shellRadius_ratio
48 radius_always_pos := shellRadius_pos
49
50end IndisputableMonolith.Chemistry.SolvationShellsFromConfigDim
51