Imports
/-
Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Matteo Cipollina, Joseph Tooby-Smith
-/
module
public import Physlib.StatisticalMechanics.CanonicalEnsemble.LemmasFinite Canonical Ensemble
This file specializes the general measure-theoretic framework of the canonical ensemble to systems with a finite number of discrete microstates. This is a common and important case in statistical mechanics to study models like spin systems (e.g., the Ising model) and other systems with a discrete quantum state space.
Main Definitions and Results
The specialization is achieved through the IsFinite class, which asserts that:
The type of microstates ι is a Fintype.
The measure μ on ι is the standard counting measure.
The number of degrees of freedom dof is 0.
The phaseSpaceunit is 1.
These assumptions correspond to systems where the state space is fundamentally discrete, and no semi-classical approximation from a continuous phase space is needed. Consequently, the dimensionless physical quantities are directly equivalent to their mathematical counterparts.
The main results proved in this file are:
The abstract integral definitions for thermodynamic quantities (partition function, mean energy)
are shown to reduce to the familiar finite sums found in introductory texts. For example, the
partition function becomes Z = ∑ᵢ exp(-β Eᵢ).
The abstract thermodynamicEntropy, defined generally for measure-theoretic systems, is proven
to be equal to the standard shannonEntropy (S = -k_B ∑ᵢ pᵢ log pᵢ). The semi-classical
correction terms from the general theory vanish under the IsFinite assumptions.
The fluctuation-dissipation theorem in the form C_V = Var(E) / (k_B T²), which connects the
heat capacity C_V to the variance of energy fluctuations, is formally proven for these systems.
This file also confirms that the IsFinite property is preserved under the composition of
systems (addition, nsmul, and congr).
References
L. D. Landau & E. M. Lifshitz, Statistical Physics, Part 1, §31.
D. Tong, Lectures on Statistical Physics, §1.3.
@[expose] public section
A finite CanonicalEnsemble is one whose microstates form a finite type
and whose measure is the counting measure. For such systems, the state space is
inherently discrete and dimensionless, so we require dof = 0 and
phaseSpaceUnit = 1.
class IsFinite (𝓒 : CanonicalEnsemble ι) [Fintype ι] : Prop where
μ_eq_count : 𝓒.μ = Measure.count
dof_eq_zero : 𝓒.dof = 0
phase_space_unit_eq_one : 𝓒.phaseSpaceunit = 1ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:𝓒1.IsFinites:Set ιt:Set ι1hs:MeasurableSet sht:MeasurableSet t⊢ ↑(s ×ˢ t).encard = ↑(s.encard * t.encard)ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:𝓒1.IsFinites:Set ιt:Set ι1hs:MeasurableSet sht:MeasurableSet t⊢ MeasurableSet tι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:𝓒1.IsFinites:Set ιt:Set ι1hs:MeasurableSet sht:MeasurableSet t⊢ MeasurableSet sι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:𝓒1.IsFinites:Set ιt:Set ι1hs:MeasurableSet sht:MeasurableSet t⊢ MeasurableSet (s ×ˢ t)
congr ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:𝓒1.IsFinites:Set ιt:Set ι1hs:MeasurableSet sht:MeasurableSet t⊢ (s ×ˢ t).encard = s.encard * t.encardι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:𝓒1.IsFinites:Set ιt:Set ι1hs:MeasurableSet sht:MeasurableSet t⊢ MeasurableSet tι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:𝓒1.IsFinites:Set ιt:Set ι1hs:MeasurableSet sht:MeasurableSet t⊢ MeasurableSet sι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:𝓒1.IsFinites:Set ιt:Set ι1hs:MeasurableSet sht:MeasurableSet t⊢ MeasurableSet (s ×ˢ t)
simp only [Set.encard_prod] ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:𝓒1.IsFinites:Set ιt:Set ι1hs:MeasurableSet sht:MeasurableSet t⊢ MeasurableSet tι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:𝓒1.IsFinites:Set ιt:Set ι1hs:MeasurableSet sht:MeasurableSet t⊢ MeasurableSet sι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:𝓒1.IsFinites:Set ιt:Set ι1hs:MeasurableSet sht:MeasurableSet t⊢ MeasurableSet (s ×ˢ t)
· ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:𝓒1.IsFinites:Set ιt:Set ι1hs:MeasurableSet sht:MeasurableSet t⊢ MeasurableSet t exact ht All goals completed! 🐙
· ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:𝓒1.IsFinites:Set ιt:Set ι1hs:MeasurableSet sht:MeasurableSet t⊢ MeasurableSet s exact hs All goals completed! 🐙
· ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:𝓒1.IsFinites:Set ιt:Set ι1hs:MeasurableSet sht:MeasurableSet t⊢ MeasurableSet (s ×ˢ t) exact MeasurableSet.prod hs ht All goals completed! 🐙
dof_eq_zero := by ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:𝓒1.IsFinite⊢ (𝓒 + 𝓒1).dof = 0
simp [IsFinite.dof_eq_zero (𝓒:=𝓒), IsFinite.dof_eq_zero (𝓒:=𝓒1)] All goals completed! 🐙
phase_space_unit_eq_one := by ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:𝓒1.IsFinite⊢ (𝓒 + 𝓒1).phaseSpaceunit = 1
simp [IsFinite.phase_space_unit_eq_one (𝓒:=𝓒)] All goals completed! 🐙
instance [IsFinite 𝓒] (e : ι1 ≃ᵐ ι) : IsFinite (congr 𝓒 e) where
μ_eq_count := by ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ι⊢ (𝓒.congr e).μ = Measure.count
simp [congr] ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ι⊢ Measure.map (⇑e.symm) 𝓒.μ = Measure.count
rw [IsFinite.μ_eq_count (𝓒:=𝓒) ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ι⊢ Measure.map (⇑e.symm) Measure.count = Measure.count ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ι⊢ Measure.map (⇑e.symm) Measure.count = Measure.count] ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ι⊢ Measure.map (⇑e.symm) Measure.count = Measure.count
refine Measure.ext_iff.mpr ?_ ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ι⊢ ∀ (s : Set ι1), MeasurableSet s → (Measure.map (⇑e.symm) Measure.count) s = Measure.count s
intro s hs ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (Measure.map (⇑e.symm) Measure.count) s = Measure.count s
rw [@MeasurableEquiv.map_apply ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ Measure.count (⇑e.symm ⁻¹' s) = Measure.count s ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ Measure.count (⇑e.symm ⁻¹' s) = Measure.count s] ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ Measure.count (⇑e.symm ⁻¹' s) = Measure.count s
rw [Measure.count_apply, ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ ↑(⇑e.symm ⁻¹' s).encard = Measure.count sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s) ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ ↑(⇑e.symm ⁻¹' s).encard = ↑s.encardι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s) Measure.count_apply ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ ↑(⇑e.symm ⁻¹' s).encard = ↑s.encardι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s) ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ ↑(⇑e.symm ⁻¹' s).encard = ↑s.encardι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s)] ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ ↑(⇑e.symm ⁻¹' s).encard = ↑s.encardι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s)
simp only [ENat.toENNReal_inj] ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e.symm ⁻¹' s).encard = s.encardι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s)
rw [@MeasurableEquiv.preimage_symm ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e '' s).encard = s.encardι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s) ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e '' s).encard = s.encardι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s)] ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e '' s).encard = s.encardι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s)
rw [← Set.Finite.cast_ncard_eq, ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ ↑(⇑e '' s).ncard = s.encardι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e '' s).Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s) ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ ↑(⇑e '' s).ncard = ↑s.ncardι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ s.Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e '' s).Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s) ← Set.Finite.cast_ncard_eq ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ ↑(⇑e '' s).ncard = ↑s.ncardι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ s.Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e '' s).Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s) ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ ↑(⇑e '' s).ncard = ↑s.ncardι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ s.Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e '' s).Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s)] ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ ↑(⇑e '' s).ncard = ↑s.ncardι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ s.Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e '' s).Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s)
congr 1 ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e '' s).ncard = s.ncardι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ s.Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e '' s).Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s)
change (e.toEmbedding '' s).ncard = _ ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e.toEmbedding '' s).ncard = s.ncardι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ s.Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e '' s).Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s)
rw [Set.ncard_map ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ s.ncard = s.ncardι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ s.Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e '' s).Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s) ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ s.Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e '' s).Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s)] ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ s.Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e '' s).Finiteι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet sι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s)
· ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ s.Finite exact Set.toFinite s All goals completed! 🐙
· ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ (⇑e '' s).Finite exact Set.toFinite (⇑e '' s) All goals completed! 🐙
· ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet s exact hs All goals completed! 🐙
· ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ιs:Set ι1hs:MeasurableSet s⊢ MeasurableSet (⇑e.symm ⁻¹' s) exact (MeasurableEquiv.measurableSet_preimage e.symm).mpr hs All goals completed! 🐙
dof_eq_zero := by ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ι⊢ (𝓒.congr e).dof = 0
simp [IsFinite.dof_eq_zero (𝓒:=𝓒)] All goals completed! 🐙
phase_space_unit_eq_one := by ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitee:ι1 ≃ᵐ ι⊢ (𝓒.congr e).phaseSpaceunit = 1
simp [IsFinite.phase_space_unit_eq_one (𝓒:=𝓒)] All goals completed! 🐙
instance [IsFinite 𝓒] (n : ℕ) : IsFinite (nsmul n 𝓒) where
μ_eq_count := by ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕ⊢ (nsmul n 𝓒).μ = Measure.count
induction n with
| zero => zero ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinite⊢ (nsmul 0 𝓒).μ = Measure.count
haveI : Subsingleton (Fin 0 → ι) := ⟨by ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinite⊢ ∀ (a b : Fin 0 → ι), a = b intro f g ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitef:Fin 0 → ιg:Fin 0 → ι⊢ f = g; funext i ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitef:Fin 0 → ιg:Fin 0 → ιi:Fin 0⊢ f i = g i; exact Fin.elim0 i All goals completed! 🐙⟩
have h_cases : ∀ s : Set (Fin 0 → ι), s = ∅ ∨ s = Set.univ := fun s =>
s.eq_empty_or_nonempty.imp_right fun ⟨y, hy⟩ =>
Set.eq_univ_of_forall fun x => by ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitethis:Subsingleton (Fin 0 → ι)s:Set (Fin 0 → ι)x✝:s.Nonemptyy:Fin 0 → ιhy:y ∈ sx:Fin 0 → ι⊢ x ∈ s zero ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitethis:Subsingleton (Fin 0 → ι)h_cases:∀ (s : Set (Fin 0 → ι)), s = ∅ ∨ s = Set.univ⊢ (nsmul 0 𝓒).μ = Measure.count rwa [Subsingleton.elim x y ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitethis:Subsingleton (Fin 0 → ι)s:Set (Fin 0 → ι)x✝:s.Nonemptyy:Fin 0 → ιhy:y ∈ sx:Fin 0 → ι⊢ y ∈ s zero ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitethis:Subsingleton (Fin 0 → ι)h_cases:∀ (s : Set (Fin 0 → ι)), s = ∅ ∨ s = Set.univ⊢ (nsmul 0 𝓒).μ = Measure.count] ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitethis:Subsingleton (Fin 0 → ι)s:Set (Fin 0 → ι)x✝:s.Nonemptyy:Fin 0 → ιhy:y ∈ sx:Fin 0 → ι⊢ y ∈ szero ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitethis:Subsingleton (Fin 0 → ι)h_cases:∀ (s : Set (Fin 0 → ι)), s = ∅ ∨ s = Set.univ⊢ (nsmul 0 𝓒).μ = Measure.countzero ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitethis:Subsingleton (Fin 0 → ι)h_cases:∀ (s : Set (Fin 0 → ι)), s = ∅ ∨ s = Set.univ⊢ (nsmul 0 𝓒).μ = Measure.count
refine Measure.ext (fun s _ => ?_) zero ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitethis:Subsingleton (Fin 0 → ι)h_cases:∀ (s : Set (Fin 0 → ι)), s = ∅ ∨ s = Set.univs:Set (Fin 0 → ι)x✝:MeasurableSet s⊢ (nsmul 0 𝓒).μ s = Measure.count s
rcases h_cases s with hs | hs zero.inl ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitethis:Subsingleton (Fin 0 → ι)h_cases:∀ (s : Set (Fin 0 → ι)), s = ∅ ∨ s = Set.univs:Set (Fin 0 → ι)x✝:MeasurableSet shs:s = ∅⊢ (nsmul 0 𝓒).μ s = Measure.count szero.inr ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitethis:Subsingleton (Fin 0 → ι)h_cases:∀ (s : Set (Fin 0 → ι)), s = ∅ ∨ s = Set.univs:Set (Fin 0 → ι)x✝:MeasurableSet shs:s = Set.univ⊢ (nsmul 0 𝓒).μ s = Measure.count s
· zero.inl ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitethis:Subsingleton (Fin 0 → ι)h_cases:∀ (s : Set (Fin 0 → ι)), s = ∅ ∨ s = Set.univs:Set (Fin 0 → ι)x✝:MeasurableSet shs:s = ∅⊢ (nsmul 0 𝓒).μ s = Measure.count s subst hs zero.inl ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitethis:Subsingleton (Fin 0 → ι)h_cases:∀ (s : Set (Fin 0 → ι)), s = ∅ ∨ s = Set.univx✝:MeasurableSet ∅⊢ (nsmul 0 𝓒).μ ∅ = Measure.count ∅
simp [CanonicalEnsemble.nsmul] All goals completed! 🐙
· zero.inr ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitethis:Subsingleton (Fin 0 → ι)h_cases:∀ (s : Set (Fin 0 → ι)), s = ∅ ∨ s = Set.univs:Set (Fin 0 → ι)x✝:MeasurableSet shs:s = Set.univ⊢ (nsmul 0 𝓒).μ s = Measure.count s subst hs zero.inr ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinitethis:Subsingleton (Fin 0 → ι)h_cases:∀ (s : Set (Fin 0 → ι)), s = ∅ ∨ s = Set.univx✝:MeasurableSet Set.univ⊢ (nsmul 0 𝓒).μ Set.univ = Measure.count Set.univ
simp [CanonicalEnsemble.nsmul, IsFinite.μ_eq_count (𝓒:=𝓒)] All goals completed! 🐙
| succ n ih => succ ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕih:(nsmul n 𝓒).μ = Measure.count⊢ (nsmul (n + 1) 𝓒).μ = Measure.count
haveI : IsFinite (nsmul n 𝓒) := {
μ_eq_count := ih
dof_eq_zero := by ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕih:(nsmul n 𝓒).μ = Measure.count⊢ (nsmul n 𝓒).dof = 0
simp [CanonicalEnsemble.dof_nsmul, IsFinite.dof_eq_zero (𝓒:=𝓒)] All goals completed! 🐙
phase_space_unit_eq_one := by ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕih:(nsmul n 𝓒).μ = Measure.count⊢ (nsmul n 𝓒).phaseSpaceunit = 1
simp [CanonicalEnsemble.phase_space_unit_nsmul,
IsFinite.phase_space_unit_eq_one (𝓒:=𝓒)] All goals completed! 🐙
}
letI : Fintype (Fin (n+1) → ι) := inferInstance succ ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕih:(nsmul n 𝓒).μ = Measure.countthis✝:(nsmul n 𝓒).IsFinitethis:Fintype (Fin (n + 1) → ι) := inferInstance⊢ (nsmul (n + 1) 𝓒).μ = Measure.count
have h :
((𝓒 + nsmul n 𝓒).congr
(MeasurableEquiv.piFinSuccAbove (fun _ => ι) 0)).μ
= Measure.count := by ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕ⊢ (nsmul n 𝓒).μ = Measure.count succ ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕih:(nsmul n 𝓒).μ = Measure.countthis✝:(nsmul n 𝓒).IsFinitethis:Fintype (Fin (n + 1) → ι) := inferInstanceh:((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μ = Measure.count⊢ (nsmul (n + 1) 𝓒).μ = Measure.count erw [IsFinite.μ_eq_count ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕih:(nsmul n 𝓒).μ = Measure.countthis✝:(nsmul n 𝓒).IsFinitethis:Fintype (Fin (n + 1) → ι) := inferInstance⊢ Measure.count = Measure.countι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕih:(nsmul n 𝓒).μ = Measure.countthis✝:(nsmul n 𝓒).IsFinitethis:Fintype (Fin (n + 1) → ι) := inferInstance⊢ Fintype (Fin (n + 1) → ι)succ ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕih:(nsmul n 𝓒).μ = Measure.countthis✝:(nsmul n 𝓒).IsFinitethis:Fintype (Fin (n + 1) → ι) := inferInstanceh:((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μ = Measure.count⊢ (nsmul (n + 1) 𝓒).μ = Measure.count] ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕih:(nsmul n 𝓒).μ = Measure.countthis✝:(nsmul n 𝓒).IsFinitethis:Fintype (Fin (n + 1) → ι) := inferInstance⊢ Fintype (Fin (n + 1) → ι)succ ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕih:(nsmul n 𝓒).μ = Measure.countthis✝:(nsmul n 𝓒).IsFinitethis:Fintype (Fin (n + 1) → ι) := inferInstanceh:((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μ = Measure.count⊢ (nsmul (n + 1) 𝓒).μ = Measure.count; aesopsucc ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕih:(nsmul n 𝓒).μ = Measure.countthis✝:(nsmul n 𝓒).IsFinitethis:Fintype (Fin (n + 1) → ι) := inferInstanceh:((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μ = Measure.count⊢ (nsmul (n + 1) 𝓒).μ = Measure.countsucc ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕih:(nsmul n 𝓒).μ = Measure.countthis✝:(nsmul n 𝓒).IsFinitethis:Fintype (Fin (n + 1) → ι) := inferInstanceh:((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μ = Measure.count⊢ (nsmul (n + 1) 𝓒).μ = Measure.count
rw [← h succ ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕih:(nsmul n 𝓒).μ = Measure.countthis✝:(nsmul n 𝓒).IsFinitethis:Fintype (Fin (n + 1) → ι) := inferInstanceh:((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μ = Measure.count⊢ (nsmul (n + 1) 𝓒).μ = ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μ succ ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕih:(nsmul n 𝓒).μ = Measure.countthis✝:(nsmul n 𝓒).IsFinitethis:Fintype (Fin (n + 1) → ι) := inferInstanceh:((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μ = Measure.count⊢ (nsmul (n + 1) 𝓒).μ = ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μ]succ ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕih:(nsmul n 𝓒).μ = Measure.countthis✝:(nsmul n 𝓒).IsFinitethis:Fintype (Fin (n + 1) → ι) := inferInstanceh:((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μ = Measure.count⊢ (nsmul (n + 1) 𝓒).μ = ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μ; rw [← @nsmul_succ succ ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕih:(nsmul n 𝓒).μ = Measure.countthis✝:(nsmul n 𝓒).IsFinitethis:Fintype (Fin (n + 1) → ι) := inferInstanceh:((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μ = Measure.count⊢ (nsmul (n + 1) 𝓒).μ = (nsmul n.succ 𝓒).μ All goals completed! 🐙] All goals completed! 🐙
dof_eq_zero := by ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕ⊢ (nsmul n 𝓒).dof = 0
simp [CanonicalEnsemble.dof_nsmul, IsFinite.dof_eq_zero (𝓒:=𝓒)] All goals completed! 🐙
phase_space_unit_eq_one := by ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFiniten:ℕ⊢ (nsmul n 𝓒).phaseSpaceunit = 1
simp [CanonicalEnsemble.phase_space_unit_nsmul,
IsFinite.phase_space_unit_eq_one (𝓒:=𝓒)] All goals completed! 🐙
instance [IsFinite 𝓒] : IsFiniteMeasure (𝓒.μ) := by ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinite⊢ IsFiniteMeasure 𝓒.μ
rw [IsFinite.μ_eq_count ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinite⊢ IsFiniteMeasure Measure.count ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinite⊢ IsFiniteMeasure Measure.count] ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝:𝓒.IsFinite⊢ IsFiniteMeasure Measure.count
infer_instance All goals completed! 🐙In the finite (counting) case a nonempty index type gives a nonzero measure.
instance [IsFinite 𝓒] [Nonempty ι] : NeZero 𝓒.μ := by ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:Nonempty ι⊢ NeZero 𝓒.μ
refine ⟨?_⟩ ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:Nonempty ι⊢ 𝓒.μ ≠ 0
intro hμ ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:Nonempty ιhμ:𝓒.μ = 0⊢ False
obtain ⟨i₀⟩ := (inferInstance : Nonempty ι) ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:Nonempty ιhμ:𝓒.μ = 0i₀:ι⊢ False
have hone : 𝓒.μ {i₀} = 1 := by ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:Nonempty ι⊢ NeZero 𝓒.μ ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:Nonempty ιhμ:𝓒.μ = 0i₀:ιhone:𝓒.μ {i₀} = 1⊢ False
simp [IsFinite.μ_eq_count (𝓒:=𝓒)] ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:Nonempty ιhμ:𝓒.μ = 0i₀:ιhone:𝓒.μ {i₀} = 1⊢ False ι:Typeinst✝⁷:Fintype ιinst✝⁶:MeasurableSpace ιinst✝⁵:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝⁴:Fintype ι1inst✝³:MeasurableSpace ι1inst✝²:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1inst✝¹:𝓒.IsFiniteinst✝:Nonempty ιhμ:𝓒.μ = 0i₀:ιhone:𝓒.μ {i₀} = 1⊢ False
simp_all only [Measure.coe_zero, Pi.zero_apply, zero_ne_one] All goals completed! 🐙
lemma mathematicalPartitionFunction_of_fintype [IsFinite 𝓒] (T : Temperature) :
𝓒.mathematicalPartitionFunction T = ∑ i, exp (- β T * 𝓒.energy i) := by ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ 𝓒.mathematicalPartitionFunction T = ∑ i, rexp (-↑T.β * 𝓒.energy i)
rw [mathematicalPartitionFunction_eq_integral, ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ ∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μ = ∑ i, rexp (-↑T.β * 𝓒.energy i) ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ ∑ x, 𝓒.μ.real {x} • rexp (-↑T.β * 𝓒.energy x) = ∑ i, rexp (-↑T.β * 𝓒.energy i)ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable (fun i => rexp (-↑T.β * 𝓒.energy i)) 𝓒.μ MeasureTheory.integral_fintype ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ ∑ x, 𝓒.μ.real {x} • rexp (-↑T.β * 𝓒.energy x) = ∑ i, rexp (-↑T.β * 𝓒.energy i)ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable (fun i => rexp (-↑T.β * 𝓒.energy i)) 𝓒.μ ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ ∑ x, 𝓒.μ.real {x} • rexp (-↑T.β * 𝓒.energy x) = ∑ i, rexp (-↑T.β * 𝓒.energy i)ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable (fun i => rexp (-↑T.β * 𝓒.energy i)) 𝓒.μ] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ ∑ x, 𝓒.μ.real {x} • rexp (-↑T.β * 𝓒.energy x) = ∑ i, rexp (-↑T.β * 𝓒.energy i)ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable (fun i => rexp (-↑T.β * 𝓒.energy i)) 𝓒.μ
simp [IsFinite.μ_eq_count] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable (fun i => rexp (-↑T.β * 𝓒.energy i)) 𝓒.μ
· ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable (fun i => rexp (-↑T.β * 𝓒.energy i)) 𝓒.μ rw [IsFinite.μ_eq_count ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable (fun i => rexp (-↑T.β * 𝓒.energy i)) Measure.count ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable (fun i => rexp (-↑T.β * 𝓒.energy i)) Measure.count] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable (fun i => rexp (-↑T.β * 𝓒.energy i)) Measure.count
exact Integrable.of_finite All goals completed! 🐙lemma partitionFunction_of_fintype [IsFinite 𝓒] (T : Temperature) :
𝓒.partitionFunction T = ∑ i, exp (- T.β * 𝓒.energy i) := by ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ 𝓒.partitionFunction T = ∑ i, rexp (-↑T.β * 𝓒.energy i)
simp [partitionFunction, mathematicalPartitionFunction_of_fintype,
IsFinite.dof_eq_zero, IsFinite.phase_space_unit_eq_one] All goals completed! 🐙
@[simp]
lemma μBolt_of_fintype (T : Temperature) [IsFinite 𝓒] (i : ι) :
(𝓒.μBolt T).real {i} = Real.exp (- β T * 𝓒.energy i) := by ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ (𝓒.μBolt T).real {i} = rexp (-↑T.β * 𝓒.energy i)
rw [μBolt ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ (𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))).real {i} = rexp (-↑T.β * 𝓒.energy i) ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ (𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))).real {i} = rexp (-↑T.β * 𝓒.energy i)] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ (𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))).real {i} = rexp (-↑T.β * 𝓒.energy i)
simp only [neg_mul] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ (𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))).real {i} = rexp (-(↑T.β * 𝓒.energy i))
rw [@measureReal_def ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ ((𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) {i}).toReal = rexp (-(↑T.β * 𝓒.energy i)) ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ ((𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) {i}).toReal = rexp (-(↑T.β * 𝓒.energy i))] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ ((𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) {i}).toReal = rexp (-(↑T.β * 𝓒.energy i))
simp [IsFinite.μ_eq_count] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ 0 ≤ rexp (-(↑T.β * 𝓒.energy i))
exact Real.exp_nonneg _ All goals completed! 🐙
instance {T} [IsFinite 𝓒] : IsFiniteMeasure (𝓒.μBolt T) := by ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝:𝓒.IsFinite⊢ IsFiniteMeasure (𝓒.μBolt T)
rw [μBolt ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝:𝓒.IsFinite⊢ IsFiniteMeasure (𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝:𝓒.IsFinite⊢ IsFiniteMeasure (𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i)))] ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝:𝓒.IsFinite⊢ IsFiniteMeasure (𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i)))
refine isFiniteMeasure_withDensity_ofReal ?_ ι:Typeinst✝⁶:Fintype ιinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιι1:Typeinst✝³:Fintype ι1inst✝²:MeasurableSpace ι1inst✝¹:MeasurableSingletonClass ι1𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝:𝓒.IsFinite⊢ HasFiniteIntegral (fun i => rexp (-↑T.β * 𝓒.energy i)) 𝓒.μ
exact HasFiniteIntegral.of_finite All goals completed! 🐙
@[simp]
lemma μProd_of_fintype (T : Temperature) [IsFinite 𝓒] (i : ι) :
(𝓒.μProd T).real {i} = 𝓒.probability T i := by ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ (𝓒.μProd T).real {i} = 𝓒.probability T i
rw [μProd ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ (((𝓒.μBolt T) Set.univ)⁻¹ • 𝓒.μBolt T).real {i} = 𝓒.probability T i ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ (((𝓒.μBolt T) Set.univ)⁻¹ • 𝓒.μBolt T).real {i} = 𝓒.probability T i] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ (((𝓒.μBolt T) Set.univ)⁻¹ • 𝓒.μBolt T).real {i} = 𝓒.probability T i
simp [probability] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ ((𝓒.μBolt T) Set.univ).toReal⁻¹ * rexp (-(↑T.β * 𝓒.energy i)) =
rexp (-(↑T.β * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunction T
rw [inv_mul_eq_div ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ rexp (-(↑T.β * 𝓒.energy i)) / ((𝓒.μBolt T) Set.univ).toReal =
rexp (-(↑T.β * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunction T ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ rexp (-(↑T.β * 𝓒.energy i)) / ((𝓒.μBolt T) Set.univ).toReal =
rexp (-(↑T.β * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunction T] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:𝓒.IsFinitei:ι⊢ rexp (-(↑T.β * 𝓒.energy i)) / ((𝓒.μBolt T) Set.univ).toReal =
rexp (-(↑T.β * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunction T
rfl All goals completed! 🐙
lemma meanEnergy_of_fintype [IsFinite 𝓒] (T : Temperature) :
𝓒.meanEnergy T = ∑ i, 𝓒.energy i * 𝓒.probability T i := by ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ 𝓒.meanEnergy T = ∑ i, 𝓒.energy i * 𝓒.probability T i
simp [meanEnergy] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ ∫ (i : ι), 𝓒.energy i ∂𝓒.μProd T = ∑ i, 𝓒.energy i * 𝓒.probability T i
rw [MeasureTheory.integral_fintype ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ ∑ x, (𝓒.μProd T).real {x} • 𝓒.energy x = ∑ i, 𝓒.energy i * 𝓒.probability T iι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable 𝓒.energy (𝓒.μProd T) ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ ∑ x, (𝓒.μProd T).real {x} • 𝓒.energy x = ∑ i, 𝓒.energy i * 𝓒.probability T iι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable 𝓒.energy (𝓒.μProd T)] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ ∑ x, (𝓒.μProd T).real {x} • 𝓒.energy x = ∑ i, 𝓒.energy i * 𝓒.probability T iι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable 𝓒.energy (𝓒.μProd T)
simp [mul_comm] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ιinst✝¹:MeasurableSingletonClass ι𝓒:CanonicalEnsemble ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable 𝓒.energy (𝓒.μProd T)
exact Integrable.of_finite All goals completed! 🐙lemma entropy_of_fintype (T : Temperature) :
𝓒.shannonEntropy T = - kB * ∑ i, 𝓒.probability T i * log (𝓒.probability T i) := by ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ 𝓒.shannonEntropy T = -kB * ∑ i, 𝓒.probability T i * log (𝓒.probability T i)
simp [shannonEntropy] All goals completed! 🐙
lemma probability_le_one
[MeasurableSingletonClass ι] [IsFinite 𝓒] [Nonempty ι] (T : Temperature) (i : ι) :
𝓒.probability T i ≤ 1 := by ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ι⊢ 𝓒.probability T i ≤ 1
have hZpos : 0 < 𝓒.mathematicalPartitionFunction T := by
rw [mathematicalPartitionFunction_of_fintype ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ι⊢ 0 < ∑ i, rexp (-↑T.β * 𝓒.energy i) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ι⊢ 0 < ∑ i, rexp (-↑T.β * 𝓒.energy i) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ιhZpos:0 < 𝓒.mathematicalPartitionFunction T⊢ 𝓒.probability T i ≤ 1] ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ι⊢ 0 < ∑ i, rexp (-↑T.β * 𝓒.energy i) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ιhZpos:0 < 𝓒.mathematicalPartitionFunction T⊢ 𝓒.probability T i ≤ 1
exact Finset.sum_pos (fun j _ => Real.exp_pos _) Finset.univ_nonempty ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ιhZpos:0 < 𝓒.mathematicalPartitionFunction T⊢ 𝓒.probability T i ≤ 1 ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ιhZpos:0 < 𝓒.mathematicalPartitionFunction T⊢ 𝓒.probability T i ≤ 1
rw [probability, ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ιhZpos:0 < 𝓒.mathematicalPartitionFunction T⊢ rexp (-↑T.β * 𝓒.energy i) / 𝓒.mathematicalPartitionFunction T ≤ 1 ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ιhZpos:0 < 𝓒.mathematicalPartitionFunction T⊢ rexp (-↑T.β * 𝓒.energy i) ≤ ∑ i, rexp (-↑T.β * 𝓒.energy i) div_le_one hZpos, ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ιhZpos:0 < 𝓒.mathematicalPartitionFunction T⊢ rexp (-↑T.β * 𝓒.energy i) ≤ 𝓒.mathematicalPartitionFunction T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ιhZpos:0 < 𝓒.mathematicalPartitionFunction T⊢ rexp (-↑T.β * 𝓒.energy i) ≤ ∑ i, rexp (-↑T.β * 𝓒.energy i) mathematicalPartitionFunction_of_fintype ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ιhZpos:0 < 𝓒.mathematicalPartitionFunction T⊢ rexp (-↑T.β * 𝓒.energy i) ≤ ∑ i, rexp (-↑T.β * 𝓒.energy i) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ιhZpos:0 < 𝓒.mathematicalPartitionFunction T⊢ rexp (-↑T.β * 𝓒.energy i) ≤ ∑ i, rexp (-↑T.β * 𝓒.energy i)] ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ιhZpos:0 < 𝓒.mathematicalPartitionFunction T⊢ rexp (-↑T.β * 𝓒.energy i) ≤ ∑ i, rexp (-↑T.β * 𝓒.energy i)
simpa [neg_mul] using Finset.single_le_sum
(f := fun j : ι => Real.exp (- β T * 𝓒.energy j)) (fun j _ => Real.exp_nonneg _)
(Finset.mem_univ i) All goals completed! 🐙Finite specialization: strict positivity of the mathematical partition function.
lemma mathematicalPartitionFunction_pos_finite
[MeasurableSingletonClass ι] [IsFinite 𝓒] [Nonempty ι] (T : Temperature) :
0 < 𝓒.mathematicalPartitionFunction T := by ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperature⊢ 0 < 𝓒.mathematicalPartitionFunction T
simpa using (CanonicalEnsemble.mathematicalPartitionFunction_pos (𝓒:=𝓒) T) All goals completed! 🐙Finite specialization: strict positivity of the (physical) partition function.
lemma partitionFunction_pos_finite
[MeasurableSingletonClass ι] [IsFinite 𝓒] [Nonempty ι] (T : Temperature) :
0 < 𝓒.partitionFunction T := by ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperature⊢ 0 < 𝓒.partitionFunction T
simpa [partitionFunction, IsFinite.dof_eq_zero (𝓒:=𝓒),
IsFinite.phase_space_unit_eq_one (𝓒:=𝓒), pow_zero]
using mathematicalPartitionFunction_pos_finite (𝓒:=𝓒) (T:=T) All goals completed! 🐙Finite specialization: non-negativity (indeed positivity) of probabilities.
lemma probability_nonneg_finite
[MeasurableSingletonClass ι] [IsFinite 𝓒] [Nonempty ι] (T : Temperature) (i : ι) :
0 ≤ 𝓒.probability T i := by ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ι⊢ 0 ≤ 𝓒.probability T i
unfold probability ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ι⊢ 0 ≤ rexp (-↑T.β * 𝓒.energy i) / 𝓒.mathematicalPartitionFunction T
have hZpos := mathematicalPartitionFunction_pos_finite (𝓒:=𝓒) (T:=T) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturei:ιhZpos:0 < 𝓒.mathematicalPartitionFunction T⊢ 0 ≤ rexp (-↑T.β * 𝓒.energy i) / 𝓒.mathematicalPartitionFunction T
exact div_nonneg (Real.exp_nonneg _) hZpos.le All goals completed! 🐙The sum of probabilities over all microstates is 1.
lemma sum_probability_eq_one
[MeasurableSingletonClass ι] [IsFinite 𝓒] [Nonempty ι] (T : Temperature) :
∑ i, 𝓒.probability T i = 1 := by ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperature⊢ ∑ i, 𝓒.probability T i = 1
have hZne : 𝓒.mathematicalPartitionFunction T ≠ 0 :=
(mathematicalPartitionFunction_pos_finite 𝓒 T).ne' ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:TemperaturehZne:𝓒.mathematicalPartitionFunction T ≠ 0⊢ ∑ i, 𝓒.probability T i = 1
simp_rw [ ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:TemperaturehZne:𝓒.mathematicalPartitionFunction T ≠ 0⊢ ∑ i, 𝓒.probability T i = 1probability, ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:TemperaturehZne:𝓒.mathematicalPartitionFunction T ≠ 0⊢ ∑ x, rexp (-↑T.β * 𝓒.energy x) / 𝓒.mathematicalPartitionFunction T = 1 ← Finset.sum_div, ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:TemperaturehZne:𝓒.mathematicalPartitionFunction T ≠ 0⊢ (∑ i, rexp (-↑T.β * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunction T = 1 ← mathematicalPartitionFunction_of_fintype ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:TemperaturehZne:𝓒.mathematicalPartitionFunction T ≠ 0⊢ 𝓒.mathematicalPartitionFunction T / 𝓒.mathematicalPartitionFunction T = 1]
exact div_self hZne All goals completed! 🐙The entropy of a finite canonical ensemble (Shannon entropy) is non-negative.
lemma entropy_nonneg [MeasurableSingletonClass ι] [IsFinite 𝓒] [Nonempty ι] (T : Temperature) :
0 ≤ 𝓒.shannonEntropy T := by ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperature⊢ 0 ≤ 𝓒.shannonEntropy T
have hsum : ∑ i, 𝓒.probability T i * log (𝓒.probability T i) ≤ 0 :=
Fintype.sum_nonpos fun i =>
mul_nonpos_iff.2 <| Or.inl ⟨probability_nonneg_finite 𝓒 T i,
Real.log_nonpos (probability_nonneg_finite 𝓒 T i) (probability_le_one 𝓒 T i)⟩ ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturehsum:∑ i, 𝓒.probability T i * log (𝓒.probability T i) ≤ 0⊢ 0 ≤ 𝓒.shannonEntropy T
rw [shannonEntropy, ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturehsum:∑ i, 𝓒.probability T i * log (𝓒.probability T i) ≤ 0⊢ 0 ≤ -kB * ∑ i, 𝓒.probability T i * log (𝓒.probability T i) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturehsum:∑ i, 𝓒.probability T i * log (𝓒.probability T i) ≤ 0⊢ kB * ∑ i, 𝓒.probability T i * log (𝓒.probability T i) ≤ 0 neg_mul, ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturehsum:∑ i, 𝓒.probability T i * log (𝓒.probability T i) ≤ 0⊢ 0 ≤ -(kB * ∑ i, 𝓒.probability T i * log (𝓒.probability T i)) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturehsum:∑ i, 𝓒.probability T i * log (𝓒.probability T i) ≤ 0⊢ kB * ∑ i, 𝓒.probability T i * log (𝓒.probability T i) ≤ 0 neg_nonneg ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturehsum:∑ i, 𝓒.probability T i * log (𝓒.probability T i) ≤ 0⊢ kB * ∑ i, 𝓒.probability T i * log (𝓒.probability T i) ≤ 0 ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturehsum:∑ i, 𝓒.probability T i * log (𝓒.probability T i) ≤ 0⊢ kB * ∑ i, 𝓒.probability T i * log (𝓒.probability T i) ≤ 0] ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperaturehsum:∑ i, 𝓒.probability T i * log (𝓒.probability T i) ≤ 0⊢ kB * ∑ i, 𝓒.probability T i * log (𝓒.probability T i) ≤ 0
exact mul_nonpos_iff.2 <| Or.inl ⟨kB_pos.le, hsum⟩ All goals completed! 🐙lemma shannonEntropy_eq_differentialEntropy
[MeasurableSingletonClass ι] [IsFinite 𝓒] (T : Temperature) :
𝓒.shannonEntropy T = 𝓒.differentialEntropy T := by ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperature⊢ 𝓒.shannonEntropy T = 𝓒.differentialEntropy T
simp [shannonEntropy, differentialEntropy, integral_fintype, μProd_of_fintype] All goals completed! 🐙
In the finite, nonempty case the thermodynamic and Shannon entropies coincide.
All semi-classical correction factors vanish (dof = 0, phaseSpaceUnit = 1),
so the absolute thermodynamic entropy reduces to the discrete Shannon form.
theorem thermodynamicEntropy_eq_shannonEntropy [MeasurableSingletonClass ι] [IsFinite 𝓒]
(T : Temperature) :-- (hT : 0 < T.val) :
𝓒.thermodynamicEntropy T = 𝓒.shannonEntropy T := by ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperature⊢ 𝓒.thermodynamicEntropy T = 𝓒.shannonEntropy T
have h_thermo_eq_diff :
𝓒.thermodynamicEntropy T = 𝓒.differentialEntropy T := by
unfold CanonicalEnsemble.thermodynamicEntropy
CanonicalEnsemble.differentialEntropy ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperature⊢ -kB * ∫ (i : ι), log (𝓒.physicalProbability T i) ∂𝓒.μProd T = -kB * ∫ (i : ι), log (𝓒.probability T i) ∂𝓒.μProd T ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperatureh_thermo_eq_diff:𝓒.thermodynamicEntropy T = 𝓒.differentialEntropy T⊢ 𝓒.thermodynamicEntropy T = 𝓒.shannonEntropy T
have h_log :
(fun i => Real.log (𝓒.physicalProbability T i))
= (fun i => Real.log (𝓒.probability T i)) := by ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperature⊢ 𝓒.thermodynamicEntropy T = 𝓒.shannonEntropy T ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperatureh_log:(fun i => log (𝓒.physicalProbability T i)) = fun i => log (𝓒.probability T i)⊢ -kB * ∫ (i : ι), log (𝓒.physicalProbability T i) ∂𝓒.μProd T = -kB * ∫ (i : ι), log (𝓒.probability T i) ∂𝓒.μProd T ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperatureh_thermo_eq_diff:𝓒.thermodynamicEntropy T = 𝓒.differentialEntropy T⊢ 𝓒.thermodynamicEntropy T = 𝓒.shannonEntropy T
funext i ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperaturei:ι⊢ log (𝓒.physicalProbability T i) = log (𝓒.probability T i) ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperatureh_log:(fun i => log (𝓒.physicalProbability T i)) = fun i => log (𝓒.probability T i)⊢ -kB * ∫ (i : ι), log (𝓒.physicalProbability T i) ∂𝓒.μProd T = -kB * ∫ (i : ι), log (𝓒.probability T i) ∂𝓒.μProd T ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperatureh_thermo_eq_diff:𝓒.thermodynamicEntropy T = 𝓒.differentialEntropy T⊢ 𝓒.thermodynamicEntropy T = 𝓒.shannonEntropy T
simp [CanonicalEnsemble.physicalProbability,
IsFinite.dof_eq_zero (𝓒:=𝓒),
IsFinite.phase_space_unit_eq_one (𝓒:=𝓒)] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperatureh_log:(fun i => log (𝓒.physicalProbability T i)) = fun i => log (𝓒.probability T i)⊢ -kB * ∫ (i : ι), log (𝓒.physicalProbability T i) ∂𝓒.μProd T = -kB * ∫ (i : ι), log (𝓒.probability T i) ∂𝓒.μProd T ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperatureh_thermo_eq_diff:𝓒.thermodynamicEntropy T = 𝓒.differentialEntropy T⊢ 𝓒.thermodynamicEntropy T = 𝓒.shannonEntropy T ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperatureh_log:(fun i => log (𝓒.physicalProbability T i)) = fun i => log (𝓒.probability T i)⊢ -kB * ∫ (i : ι), log (𝓒.physicalProbability T i) ∂𝓒.μProd T = -kB * ∫ (i : ι), log (𝓒.probability T i) ∂𝓒.μProd T ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperatureh_thermo_eq_diff:𝓒.thermodynamicEntropy T = 𝓒.differentialEntropy T⊢ 𝓒.thermodynamicEntropy T = 𝓒.shannonEntropy T
simp_all only [physicalProbability_def] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperatureh_thermo_eq_diff:𝓒.thermodynamicEntropy T = 𝓒.differentialEntropy T⊢ 𝓒.thermodynamicEntropy T = 𝓒.shannonEntropy T ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperatureh_thermo_eq_diff:𝓒.thermodynamicEntropy T = 𝓒.differentialEntropy T⊢ 𝓒.thermodynamicEntropy T = 𝓒.shannonEntropy T
have h_shannon :
𝓒.shannonEntropy T = 𝓒.differentialEntropy T :=
(shannonEntropy_eq_differentialEntropy (𝓒:=𝓒) T) ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperatureh_thermo_eq_diff:𝓒.thermodynamicEntropy T = 𝓒.differentialEntropy Th_shannon:𝓒.shannonEntropy T = 𝓒.differentialEntropy T⊢ 𝓒.thermodynamicEntropy T = 𝓒.shannonEntropy T
calc
𝓒.thermodynamicEntropy T
= 𝓒.differentialEntropy T := h_thermo_eq_diff
_ = 𝓒.shannonEntropy T := h_shannon.symmFluctuations in Finite Systems
lemma meanSquareEnergy_of_fintype [MeasurableSingletonClass ι] [IsFinite 𝓒] (T : Temperature) :
𝓒.meanSquareEnergy T = ∑ i, (𝓒.energy i)^2 * 𝓒.probability T i := by ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperature⊢ 𝓒.meanSquareEnergy T = ∑ i, 𝓒.energy i ^ 2 * 𝓒.probability T i
simp [CanonicalEnsemble.meanSquareEnergy] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperature⊢ ∫ (i : ι), 𝓒.energy i ^ 2 ∂𝓒.μProd T = ∑ i, 𝓒.energy i ^ 2 * 𝓒.probability T i
rw [MeasureTheory.integral_fintype ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperature⊢ ∑ x, (𝓒.μProd T).real {x} • 𝓒.energy x ^ 2 = ∑ i, 𝓒.energy i ^ 2 * 𝓒.probability T iι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable (fun i => 𝓒.energy i ^ 2) (𝓒.μProd T) ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperature⊢ ∑ x, (𝓒.μProd T).real {x} • 𝓒.energy x ^ 2 = ∑ i, 𝓒.energy i ^ 2 * 𝓒.probability T iι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable (fun i => 𝓒.energy i ^ 2) (𝓒.μProd T)] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperature⊢ ∑ x, (𝓒.μProd T).real {x} • 𝓒.energy x ^ 2 = ∑ i, 𝓒.energy i ^ 2 * 𝓒.probability T iι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable (fun i => 𝓒.energy i ^ 2) (𝓒.μProd T)
simp [μProd_of_fintype, mul_comm] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:Temperature⊢ Integrable (fun i => 𝓒.energy i ^ 2) (𝓒.μProd T)
exact Integrable.of_finite All goals completed! 🐙
lemma energyVariance_of_fintype
[MeasurableSingletonClass ι] [IsFinite 𝓒] [Nonempty ι] (T : Temperature) :
𝓒.energyVariance T = (∑ i, (𝓒.energy i)^2 * 𝓒.probability T i) - (𝓒.meanEnergy T)^2 := by ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:Temperature⊢ 𝓒.energyVariance T = ∑ i, 𝓒.energy i ^ 2 * 𝓒.probability T i - 𝓒.meanEnergy T ^ 2
have hE_int := Integrable.of_finite (f := 𝓒.energy) (μ := 𝓒.μProd T) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:TemperaturehE_int:Integrable 𝓒.energy (𝓒.μProd T)⊢ 𝓒.energyVariance T = ∑ i, 𝓒.energy i ^ 2 * 𝓒.probability T i - 𝓒.meanEnergy T ^ 2
have hE2_int := Integrable.of_finite (f := fun i => (𝓒.energy i)^2) (μ := 𝓒.μProd T) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:TemperaturehE_int:Integrable 𝓒.energy (𝓒.μProd T)hE2_int:Integrable (fun i => 𝓒.energy i ^ 2) (𝓒.μProd T)⊢ 𝓒.energyVariance T = ∑ i, 𝓒.energy i ^ 2 * 𝓒.probability T i - 𝓒.meanEnergy T ^ 2
rw [CanonicalEnsemble.energyVariance_eq_meanSquareEnergy_sub_meanEnergy_sq 𝓒 T hE_int hE2_int ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:TemperaturehE_int:Integrable 𝓒.energy (𝓒.μProd T)hE2_int:Integrable (fun i => 𝓒.energy i ^ 2) (𝓒.μProd T)⊢ 𝓒.meanSquareEnergy T - 𝓒.meanEnergy T ^ 2 = ∑ i, 𝓒.energy i ^ 2 * 𝓒.probability T i - 𝓒.meanEnergy T ^ 2 ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:TemperaturehE_int:Integrable 𝓒.energy (𝓒.μProd T)hE2_int:Integrable (fun i => 𝓒.energy i ^ 2) (𝓒.μProd T)⊢ 𝓒.meanSquareEnergy T - 𝓒.meanEnergy T ^ 2 = ∑ i, 𝓒.energy i ^ 2 * 𝓒.probability T i - 𝓒.meanEnergy T ^ 2] ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:TemperaturehE_int:Integrable 𝓒.energy (𝓒.μProd T)hE2_int:Integrable (fun i => 𝓒.energy i ^ 2) (𝓒.μProd T)⊢ 𝓒.meanSquareEnergy T - 𝓒.meanEnergy T ^ 2 = ∑ i, 𝓒.energy i ^ 2 * 𝓒.probability T i - 𝓒.meanEnergy T ^ 2
rw [meanSquareEnergy_of_fintype ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:MeasurableSingletonClass ιinst✝¹:𝓒.IsFiniteinst✝:Nonempty ιT:TemperaturehE_int:Integrable 𝓒.energy (𝓒.μProd T)hE2_int:Integrable (fun i => 𝓒.energy i ^ 2) (𝓒.μProd T)⊢ ∑ i, 𝓒.energy i ^ 2 * 𝓒.probability T i - 𝓒.meanEnergy T ^ 2 =
∑ i, 𝓒.energy i ^ 2 * 𝓒.probability T i - 𝓒.meanEnergy T ^ 2 All goals completed! 🐙] All goals completed! 🐙β-parameterization for finite systems
lemma mathematicalPartitionFunctionBetaReal_pos [Nonempty ι] (b : ℝ) :
0 < 𝓒.mathematicalPartitionFunctionBetaReal b := by ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝ⊢ 0 < 𝓒.mathematicalPartitionFunctionBetaReal b
apply Finset.sum_pos h ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝ⊢ ∀ i ∈ Finset.univ, 0 < rexp (-b * 𝓒.energy i)hs ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝ⊢ Finset.univ.Nonempty
· h ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝ⊢ ∀ i ∈ Finset.univ, 0 < rexp (-b * 𝓒.energy i) intro i _ h ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝi:ιa✝:i ∈ Finset.univ⊢ 0 < rexp (-b * 𝓒.energy i); exact Real.exp_pos _ All goals completed! 🐙
· hs ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝ⊢ Finset.univ.Nonempty exact Finset.univ_nonempty All goals completed! 🐙
lemma meanEnergy_Beta_eq_finite [MeasurableSingletonClass ι] [IsFinite 𝓒] (b : ℝ) (hb : 0 < b) :
𝓒.meanEnergyBeta b = 𝓒.meanEnergyBetaReal b := by ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteb:ℝhb:0 < b⊢ 𝓒.meanEnergyBeta b = 𝓒.meanEnergyBetaReal b
let T := Temperature.ofβ (Real.toNNReal b) ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteb:ℝhb:0 < bT:Temperature := ofβ b.toNNReal⊢ 𝓒.meanEnergyBeta b = 𝓒.meanEnergyBetaReal b
have hT_beta : (T.β : ℝ) = b := by
simp [T, Real.toNNReal_of_nonneg hb.le] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteb:ℝhb:0 < bT:Temperature := ofβ b.toNNRealhT_beta:↑T.β = b⊢ 𝓒.meanEnergyBeta b = 𝓒.meanEnergyBetaReal b ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteb:ℝhb:0 < bT:Temperature := ofβ b.toNNRealhT_beta:↑T.β = b⊢ 𝓒.meanEnergyBeta b = 𝓒.meanEnergyBetaReal b
rw [meanEnergyBeta, ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteb:ℝhb:0 < bT:Temperature := ofβ b.toNNRealhT_beta:↑T.β = b⊢ 𝓒.meanEnergy (ofβ b.toNNReal) = 𝓒.meanEnergyBetaReal b ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteb:ℝhb:0 < bT:Temperature := ofβ b.toNNRealhT_beta:↑T.β = b⊢ ∑ i, 𝓒.energy i * 𝓒.probability T i = ∑ i, 𝓒.energy i * 𝓒.probabilityBetaReal b i meanEnergy_of_fintype 𝓒 T, ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteb:ℝhb:0 < bT:Temperature := ofβ b.toNNRealhT_beta:↑T.β = b⊢ ∑ i, 𝓒.energy i * 𝓒.probability T i = 𝓒.meanEnergyBetaReal b ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteb:ℝhb:0 < bT:Temperature := ofβ b.toNNRealhT_beta:↑T.β = b⊢ ∑ i, 𝓒.energy i * 𝓒.probability T i = ∑ i, 𝓒.energy i * 𝓒.probabilityBetaReal b i meanEnergyBetaReal ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteb:ℝhb:0 < bT:Temperature := ofβ b.toNNRealhT_beta:↑T.β = b⊢ ∑ i, 𝓒.energy i * 𝓒.probability T i = ∑ i, 𝓒.energy i * 𝓒.probabilityBetaReal b i ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteb:ℝhb:0 < bT:Temperature := ofβ b.toNNRealhT_beta:↑T.β = b⊢ ∑ i, 𝓒.energy i * 𝓒.probability T i = ∑ i, 𝓒.energy i * 𝓒.probabilityBetaReal b i] ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteb:ℝhb:0 < bT:Temperature := ofβ b.toNNRealhT_beta:↑T.β = b⊢ ∑ i, 𝓒.energy i * 𝓒.probability T i = ∑ i, 𝓒.energy i * 𝓒.probabilityBetaReal b i
refine Finset.sum_congr rfl fun i _ => ?_ ι:Typeinst✝³:Fintype ιinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteb:ℝhb:0 < bT:Temperature := ofβ b.toNNRealhT_beta:↑T.β = bi:ιx✝:i ∈ Finset.univ⊢ 𝓒.energy i * 𝓒.probability T i = 𝓒.energy i * 𝓒.probabilityBetaReal b i
simp [CanonicalEnsemble.probability, probabilityBetaReal,
mathematicalPartitionFunction_of_fintype, mathematicalPartitionFunctionBetaReal, hT_beta] All goals completed! 🐙lemma differentiable_meanEnergyBetaReal
[Nonempty ι] : Differentiable ℝ 𝓒.meanEnergyBetaReal := by ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ι⊢ Differentiable ℝ 𝓒.meanEnergyBetaReal
unfold meanEnergyBetaReal probabilityBetaReal mathematicalPartitionFunctionBetaReal ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ι⊢ Differentiable ℝ fun b => ∑ i, 𝓒.energy i * (rexp (-b * 𝓒.energy i) / ∑ i, rexp (-b * 𝓒.energy i))
refine Differentiable.fun_sum (by ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ι⊢ ∀ i ∈ Finset.univ, Differentiable ℝ fun b => 𝓒.energy i * (rexp (-b * 𝓒.energy i) / ∑ i, rexp (-b * 𝓒.energy i))
intro i _ ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιi:ιa✝:i ∈ Finset.univ⊢ Differentiable ℝ fun b => 𝓒.energy i * (rexp (-b * 𝓒.energy i) / ∑ i, rexp (-b * 𝓒.energy i))
refine (Differentiable.div ?_ ?_ ?_).const_mul (𝓒.energy i) refine_1 ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιi:ιa✝:i ∈ Finset.univ⊢ Differentiable ℝ fun b => rexp (-b * 𝓒.energy i)refine_2 ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιi:ιa✝:i ∈ Finset.univ⊢ Differentiable ℝ fun b => ∑ i, rexp (-b * 𝓒.energy i)refine_3 ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιi:ιa✝:i ∈ Finset.univ⊢ ∀ (x : ℝ), ∑ i, rexp (-x * 𝓒.energy i) ≠ 0
· refine_1 ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιi:ιa✝:i ∈ Finset.univ⊢ Differentiable ℝ fun b => rexp (-b * 𝓒.energy i) apply Differentiable.exp refine_1 ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιi:ιa✝:i ∈ Finset.univ⊢ Differentiable ℝ fun x => -x * 𝓒.energy i; simp All goals completed! 🐙
· refine_2 ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιi:ιa✝:i ∈ Finset.univ⊢ Differentiable ℝ fun b => ∑ i, rexp (-b * 𝓒.energy i) refine Differentiable.fun_sum ?_ refine_2 ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιi:ιa✝:i ∈ Finset.univ⊢ ∀ i ∈ Finset.univ, Differentiable ℝ fun b => rexp (-b * 𝓒.energy i); intro j _ refine_2 ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιi:ιa✝¹:i ∈ Finset.univj:ιa✝:j ∈ Finset.univ⊢ Differentiable ℝ fun b => rexp (-b * 𝓒.energy j); apply Differentiable.exp refine_2 ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιi:ιa✝¹:i ∈ Finset.univj:ιa✝:j ∈ Finset.univ⊢ Differentiable ℝ fun x => -x * 𝓒.energy j; simp All goals completed! 🐙
· refine_3 ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιi:ιa✝:i ∈ Finset.univ⊢ ∀ (x : ℝ), ∑ i, rexp (-x * 𝓒.energy i) ≠ 0 intro x refine_3 ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιi:ιa✝:i ∈ Finset.univx:ℝ⊢ ∑ i, rexp (-x * 𝓒.energy i) ≠ 0; exact (mathematicalPartitionFunctionBetaReal_pos 𝓒 x).ne' All goals completed! 🐙)Derivatives of Z and numerator
lemma differentiable_mathematicalPartitionFunctionBetaReal :
Differentiable ℝ 𝓒.mathematicalPartitionFunctionBetaReal := by ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ι⊢ Differentiable ℝ 𝓒.mathematicalPartitionFunctionBetaReal
unfold mathematicalPartitionFunctionBetaReal ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ι⊢ Differentiable ℝ fun b => ∑ i, rexp (-b * 𝓒.energy i)
refine Differentiable.fun_sum ?_ ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ι⊢ ∀ i ∈ Finset.univ, Differentiable ℝ fun b => rexp (-b * 𝓒.energy i); intro i _ ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιi:ιa✝:i ∈ Finset.univ⊢ Differentiable ℝ fun b => rexp (-b * 𝓒.energy i); simp All goals completed! 🐙lemma differentiable_meanEnergyNumerator :
Differentiable ℝ 𝓒.meanEnergyNumerator := by ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ι⊢ Differentiable ℝ 𝓒.meanEnergyNumerator
unfold meanEnergyNumerator ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ι⊢ Differentiable ℝ fun b => ∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)
refine Differentiable.fun_sum ?_ ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ι⊢ ∀ i ∈ Finset.univ, Differentiable ℝ fun b => 𝓒.energy i * rexp (-b * 𝓒.energy i); intro i _ ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιi:ιa✝:i ∈ Finset.univ⊢ Differentiable ℝ fun b => 𝓒.energy i * rexp (-b * 𝓒.energy i); apply Differentiable.const_mul ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιi:ιa✝:i ∈ Finset.univ⊢ Differentiable ℝ fun y => rexp (-y * 𝓒.energy i); simp All goals completed! 🐙
lemma deriv_mathematicalPartitionFunctionBetaReal (b : ℝ) :
deriv 𝓒.mathematicalPartitionFunctionBetaReal b = -𝓒.meanEnergyNumerator b := by ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝ⊢ deriv 𝓒.mathematicalPartitionFunctionBetaReal b = -𝓒.meanEnergyNumerator b
unfold mathematicalPartitionFunctionBetaReal meanEnergyNumerator ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝ⊢ deriv (fun b => ∑ i, rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)
have hd : ∀ c : ℝ, HasDerivAt (fun x => Real.exp (-x * c)) (-c * Real.exp (-b * c)) b := by ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝ⊢ deriv 𝓒.mathematicalPartitionFunctionBetaReal b = -𝓒.meanEnergyNumerator b ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b⊢ deriv (fun b => ∑ i, rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)
intro c ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝc:ℝ⊢ HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b⊢ deriv (fun b => ∑ i, rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)
have h : HasDerivAt (fun x => -x * c) (-c) b := by ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝ⊢ deriv 𝓒.mathematicalPartitionFunctionBetaReal b = -𝓒.meanEnergyNumerator b ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝc:ℝh:HasDerivAt (fun x => -x * c) (-c) b⊢ HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b⊢ deriv (fun b => ∑ i, rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)
simpa using (hasDerivAt_id b).neg.mul_const c ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝc:ℝh:HasDerivAt (fun x => -x * c) (-c) b⊢ HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b⊢ deriv (fun b => ∑ i, rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i) ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝc:ℝh:HasDerivAt (fun x => -x * c) (-c) b⊢ HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b⊢ deriv (fun b => ∑ i, rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)
simpa [mul_comm] using h.exp ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b⊢ deriv (fun b => ∑ i, rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i) ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b⊢ deriv (fun b => ∑ i, rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)
have h_sum : HasDerivAt (fun x => ∑ i, Real.exp (-x * 𝓒.energy i))
(∑ i, -𝓒.energy i * Real.exp (-b * 𝓒.energy i)) b :=
HasDerivAt.fun_sum fun i _ => hd (𝓒.energy i) ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) bh_sum:HasDerivAt (fun x => ∑ i, rexp (-x * 𝓒.energy i)) (∑ i, -𝓒.energy i * rexp (-b * 𝓒.energy i)) b⊢ deriv (fun b => ∑ i, rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)
simpa [Finset.sum_neg_distrib] using h_sum.deriv All goals completed! 🐙
lemma deriv_meanEnergyNumerator (b : ℝ) :
deriv 𝓒.meanEnergyNumerator b =
-∑ i, (𝓒.energy i)^2 * Real.exp (-b * 𝓒.energy i) := by ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝ⊢ deriv 𝓒.meanEnergyNumerator b = -∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)
unfold meanEnergyNumerator ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝ⊢ deriv (fun b => ∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)
have hd : ∀ c : ℝ, HasDerivAt (fun x => Real.exp (-x * c)) (-c * Real.exp (-b * c)) b := by ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝ⊢ deriv 𝓒.meanEnergyNumerator b = -∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i) ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b⊢ deriv (fun b => ∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)
intro c ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝc:ℝ⊢ HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b⊢ deriv (fun b => ∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)
have h : HasDerivAt (fun x => -x * c) (-c) b := by ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝ⊢ deriv 𝓒.meanEnergyNumerator b = -∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i) ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝc:ℝh:HasDerivAt (fun x => -x * c) (-c) b⊢ HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b⊢ deriv (fun b => ∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)
simpa using (hasDerivAt_id b).neg.mul_const c ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝc:ℝh:HasDerivAt (fun x => -x * c) (-c) b⊢ HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b⊢ deriv (fun b => ∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i) ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝc:ℝh:HasDerivAt (fun x => -x * c) (-c) b⊢ HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b⊢ deriv (fun b => ∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)
simpa [mul_comm] using h.exp ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b⊢ deriv (fun b => ∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i) ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) b⊢ deriv (fun b => ∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)
have h_sum : HasDerivAt (fun x => ∑ i, 𝓒.energy i * Real.exp (-x * 𝓒.energy i))
(∑ i, -(𝓒.energy i)^2 * Real.exp (-b * 𝓒.energy i)) b := by ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝ⊢ deriv 𝓒.meanEnergyNumerator b = -∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i) ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) bh_sum:HasDerivAt (fun x => ∑ i, 𝓒.energy i * rexp (-x * 𝓒.energy i)) (∑ i, -𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) b⊢ deriv (fun b => ∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)
refine HasDerivAt.fun_sum fun i _ => ?_ ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) bi:ιx✝:i ∈ Finset.univ⊢ HasDerivAt (fun x => 𝓒.energy i * rexp (-x * 𝓒.energy i)) (-𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) b ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) bh_sum:HasDerivAt (fun x => ∑ i, 𝓒.energy i * rexp (-x * 𝓒.energy i)) (∑ i, -𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) b⊢ deriv (fun b => ∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)
simpa [sq, mul_comm, mul_left_comm, mul_assoc] using
(hd (𝓒.energy i)).const_mul (𝓒.energy i) ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) bh_sum:HasDerivAt (fun x => ∑ i, 𝓒.energy i * rexp (-x * 𝓒.energy i)) (∑ i, -𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) b⊢ deriv (fun b => ∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i) ι:Typeinst✝¹:Fintype ιinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιb:ℝhd:∀ (c : ℝ), HasDerivAt (fun x => rexp (-x * c)) (-c * rexp (-b * c)) bh_sum:HasDerivAt (fun x => ∑ i, 𝓒.energy i * rexp (-x * 𝓒.energy i)) (∑ i, -𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) b⊢ deriv (fun b => ∑ i, 𝓒.energy i * rexp (-b * 𝓒.energy i)) b = -∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)
simpa [Finset.sum_neg_distrib, sq, mul_comm, mul_left_comm, mul_assoc] using h_sum.deriv All goals completed! 🐙Quotient rule: dU/db = U^2 - ⟨E^2⟩_β
lemma deriv_meanEnergyBetaReal (b : ℝ) :
deriv 𝓒.meanEnergyBetaReal b =
(𝓒.meanEnergyBetaReal b)^2 - ∑ i, (𝓒.energy i)^2 * 𝓒.probabilityBetaReal b i := by ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝ⊢ deriv 𝓒.meanEnergyBetaReal b = 𝓒.meanEnergyBetaReal b ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i
have hN_diff := (differentiable_meanEnergyNumerator 𝓒) b ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator b⊢ deriv 𝓒.meanEnergyBetaReal b = 𝓒.meanEnergyBetaReal b ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i
have hZ_diff := (differentiable_mathematicalPartitionFunctionBetaReal 𝓒) b ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal b⊢ deriv 𝓒.meanEnergyBetaReal b = 𝓒.meanEnergyBetaReal b ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i
have hZ_ne : 𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0 :=
(mathematicalPartitionFunctionBetaReal_pos 𝓒 b).ne' ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0⊢ deriv 𝓒.meanEnergyBetaReal b = 𝓒.meanEnergyBetaReal b ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i
have hU : 𝓒.meanEnergyBetaReal
= 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaReal := by
funext x ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0x:ℝ⊢ 𝓒.meanEnergyBetaReal x = (𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaReal) x ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaReal⊢ deriv 𝓒.meanEnergyBetaReal b = 𝓒.meanEnergyBetaReal b ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i
simp [meanEnergyBetaReal, probabilityBetaReal, meanEnergyNumerator,
mathematicalPartitionFunctionBetaReal, Pi.div_apply, Finset.sum_div, mul_div_assoc] ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaReal⊢ deriv 𝓒.meanEnergyBetaReal b = 𝓒.meanEnergyBetaReal b ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaReal⊢ deriv 𝓒.meanEnergyBetaReal b = 𝓒.meanEnergyBetaReal b ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i
have hprob : ∑ i, (𝓒.energy i)^2 * 𝓒.probabilityBetaReal b i
= (∑ i, (𝓒.energy i)^2 * Real.exp (-b * 𝓒.energy i))
/ 𝓒.mathematicalPartitionFunctionBetaReal b := by
simp [probabilityBetaReal, Finset.sum_div, mul_div_assoc] ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealhprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i =
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ deriv 𝓒.meanEnergyBetaReal b = 𝓒.meanEnergyBetaReal b ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealhprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i =
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ deriv 𝓒.meanEnergyBetaReal b = 𝓒.meanEnergyBetaReal b ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i
rw [hprob, ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealhprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i =
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ deriv 𝓒.meanEnergyBetaReal b =
𝓒.meanEnergyBetaReal b ^ 2 -
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealhprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i =
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ ((-∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) * 𝓒.mathematicalPartitionFunctionBetaReal b -
𝓒.meanEnergyNumerator b * -𝓒.meanEnergyNumerator b) /
𝓒.mathematicalPartitionFunctionBetaReal b ^ 2 =
(𝓒.meanEnergyNumerator b / 𝓒.mathematicalPartitionFunctionBetaReal b) ^ 2 -
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b hU, ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealhprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i =
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ deriv (𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaReal) b =
(𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaReal) b ^ 2 -
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealhprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i =
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ ((-∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) * 𝓒.mathematicalPartitionFunctionBetaReal b -
𝓒.meanEnergyNumerator b * -𝓒.meanEnergyNumerator b) /
𝓒.mathematicalPartitionFunctionBetaReal b ^ 2 =
(𝓒.meanEnergyNumerator b / 𝓒.mathematicalPartitionFunctionBetaReal b) ^ 2 -
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b deriv_div hN_diff hZ_diff hZ_ne, ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealhprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i =
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ (deriv 𝓒.meanEnergyNumerator b * 𝓒.mathematicalPartitionFunctionBetaReal b -
𝓒.meanEnergyNumerator b * deriv 𝓒.mathematicalPartitionFunctionBetaReal b) /
𝓒.mathematicalPartitionFunctionBetaReal b ^ 2 =
(𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaReal) b ^ 2 -
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealhprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i =
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ ((-∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) * 𝓒.mathematicalPartitionFunctionBetaReal b -
𝓒.meanEnergyNumerator b * -𝓒.meanEnergyNumerator b) /
𝓒.mathematicalPartitionFunctionBetaReal b ^ 2 =
(𝓒.meanEnergyNumerator b / 𝓒.mathematicalPartitionFunctionBetaReal b) ^ 2 -
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b deriv_meanEnergyNumerator, ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealhprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i =
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ ((-∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) * 𝓒.mathematicalPartitionFunctionBetaReal b -
𝓒.meanEnergyNumerator b * deriv 𝓒.mathematicalPartitionFunctionBetaReal b) /
𝓒.mathematicalPartitionFunctionBetaReal b ^ 2 =
(𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaReal) b ^ 2 -
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealhprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i =
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ ((-∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) * 𝓒.mathematicalPartitionFunctionBetaReal b -
𝓒.meanEnergyNumerator b * -𝓒.meanEnergyNumerator b) /
𝓒.mathematicalPartitionFunctionBetaReal b ^ 2 =
(𝓒.meanEnergyNumerator b / 𝓒.mathematicalPartitionFunctionBetaReal b) ^ 2 -
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b
deriv_mathematicalPartitionFunctionBetaReal, ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealhprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i =
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ ((-∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) * 𝓒.mathematicalPartitionFunctionBetaReal b -
𝓒.meanEnergyNumerator b * -𝓒.meanEnergyNumerator b) /
𝓒.mathematicalPartitionFunctionBetaReal b ^ 2 =
(𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaReal) b ^ 2 -
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealhprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i =
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ ((-∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) * 𝓒.mathematicalPartitionFunctionBetaReal b -
𝓒.meanEnergyNumerator b * -𝓒.meanEnergyNumerator b) /
𝓒.mathematicalPartitionFunctionBetaReal b ^ 2 =
(𝓒.meanEnergyNumerator b / 𝓒.mathematicalPartitionFunctionBetaReal b) ^ 2 -
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b Pi.div_apply ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealhprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i =
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ ((-∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) * 𝓒.mathematicalPartitionFunctionBetaReal b -
𝓒.meanEnergyNumerator b * -𝓒.meanEnergyNumerator b) /
𝓒.mathematicalPartitionFunctionBetaReal b ^ 2 =
(𝓒.meanEnergyNumerator b / 𝓒.mathematicalPartitionFunctionBetaReal b) ^ 2 -
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealhprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i =
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ ((-∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) * 𝓒.mathematicalPartitionFunctionBetaReal b -
𝓒.meanEnergyNumerator b * -𝓒.meanEnergyNumerator b) /
𝓒.mathematicalPartitionFunctionBetaReal b ^ 2 =
(𝓒.meanEnergyNumerator b / 𝓒.mathematicalPartitionFunctionBetaReal b) ^ 2 -
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b] ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealhprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i =
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ ((-∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) * 𝓒.mathematicalPartitionFunctionBetaReal b -
𝓒.meanEnergyNumerator b * -𝓒.meanEnergyNumerator b) /
𝓒.mathematicalPartitionFunctionBetaReal b ^ 2 =
(𝓒.meanEnergyNumerator b / 𝓒.mathematicalPartitionFunctionBetaReal b) ^ 2 -
(∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)) / 𝓒.mathematicalPartitionFunctionBetaReal b
set S2 := ∑ i, (𝓒.energy i) ^ 2 * Real.exp (-b * 𝓒.energy i) ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealS2:ℝ := ∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)hprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i = S2 / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ (-S2 * 𝓒.mathematicalPartitionFunctionBetaReal b - 𝓒.meanEnergyNumerator b * -𝓒.meanEnergyNumerator b) /
𝓒.mathematicalPartitionFunctionBetaReal b ^ 2 =
(𝓒.meanEnergyNumerator b / 𝓒.mathematicalPartitionFunctionBetaReal b) ^ 2 -
S2 / 𝓒.mathematicalPartitionFunctionBetaReal b
field_simp ι:Typeinst✝²:Fintype ιinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:Nonempty ιb:ℝhN_diff:DifferentiableAt ℝ 𝓒.meanEnergyNumerator bhZ_diff:DifferentiableAt ℝ 𝓒.mathematicalPartitionFunctionBetaReal bhZ_ne:𝓒.mathematicalPartitionFunctionBetaReal b ≠ 0hU:𝓒.meanEnergyBetaReal = 𝓒.meanEnergyNumerator / 𝓒.mathematicalPartitionFunctionBetaRealS2:ℝ := ∑ i, 𝓒.energy i ^ 2 * rexp (-b * 𝓒.energy i)hprob:∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal b i = S2 / 𝓒.mathematicalPartitionFunctionBetaReal b⊢ -(S2 * 𝓒.mathematicalPartitionFunctionBetaReal b) - -𝓒.meanEnergyNumerator b ^ 2 =
𝓒.meanEnergyNumerator b ^ 2 - S2 * 𝓒.mathematicalPartitionFunctionBetaReal b
ring All goals completed! 🐙(∂U/∂β) = -Var(E) for finite systems.
lemma derivWithin_meanEnergy_Beta_eq_neg_variance
[MeasurableSingletonClass ι][𝓒.IsFinite] (T : Temperature) (hT_pos : 0 < T.val) :
derivWithin 𝓒.meanEnergyBeta (Set.Ioi 0) (T.β : ℝ) = - 𝓒.energyVariance T := by ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.val⊢ derivWithin 𝓒.meanEnergyBeta (Set.Ioi 0) ↑T.β = -𝓒.energyVariance T
let β₀ := (T.β : ℝ) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.β⊢ derivWithin 𝓒.meanEnergyBeta (Set.Ioi 0) ↑T.β = -𝓒.energyVariance T
have hβ₀_pos : 0 < β₀ := beta_pos T hT_pos ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀⊢ derivWithin 𝓒.meanEnergyBeta (Set.Ioi 0) ↑T.β = -𝓒.energyVariance T
have h_eq_on : Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0) := by
intro b hb ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀b:ℝhb:b ∈ Set.Ioi 0⊢ 𝓒.meanEnergyBeta b = 𝓒.meanEnergyBetaReal b ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)⊢ derivWithin 𝓒.meanEnergyBeta (Set.Ioi 0) ↑T.β = -𝓒.energyVariance T; exact meanEnergy_Beta_eq_finite 𝓒 b hb ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)⊢ derivWithin 𝓒.meanEnergyBeta (Set.Ioi 0) ↑T.β = -𝓒.energyVariance T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)⊢ derivWithin 𝓒.meanEnergyBeta (Set.Ioi 0) ↑T.β = -𝓒.energyVariance T
rw [derivWithin_congr h_eq_on (h_eq_on hβ₀_pos) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)⊢ derivWithin 𝓒.meanEnergyBetaReal (Set.Ioi 0) β₀ = -𝓒.energyVariance T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)⊢ derivWithin 𝓒.meanEnergyBetaReal (Set.Ioi 0) β₀ = -𝓒.energyVariance T] ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)⊢ derivWithin 𝓒.meanEnergyBetaReal (Set.Ioi 0) β₀ = -𝓒.energyVariance T
have h_diff : DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀ :=
(differentiable_meanEnergyBetaReal 𝓒) β₀ ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀⊢ derivWithin 𝓒.meanEnergyBetaReal (Set.Ioi 0) β₀ = -𝓒.energyVariance T
rw [h_diff.derivWithin (uniqueDiffOn_Ioi 0 β₀ hβ₀_pos) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀⊢ deriv 𝓒.meanEnergyBetaReal β₀ = -𝓒.energyVariance T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀⊢ deriv 𝓒.meanEnergyBetaReal β₀ = -𝓒.energyVariance T] ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀⊢ deriv 𝓒.meanEnergyBetaReal β₀ = -𝓒.energyVariance T
rw [deriv_meanEnergyBetaReal 𝓒 β₀ ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T] ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T
have h_U_eq : 𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy T := by ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.val⊢ derivWithin 𝓒.meanEnergyBeta (Set.Ioi 0) ↑T.β = -𝓒.energyVariance T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy T⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T
rw [← meanEnergy_Beta_eq_finite 𝓒 β₀ hβ₀_pos ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀⊢ 𝓒.meanEnergyBeta β₀ = 𝓒.meanEnergy T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀⊢ 𝓒.meanEnergyBeta β₀ = 𝓒.meanEnergy T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy T⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T] ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀⊢ 𝓒.meanEnergyBeta β₀ = 𝓒.meanEnergy T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy T⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T
simp [meanEnergyBeta] ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀⊢ 𝓒.meanEnergy (ofβ β₀.toNNReal) = 𝓒.meanEnergy T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy T⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T
simp_all only [NNReal.coe_pos, toNNReal_coe, ofβ_β, β₀] ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy T⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy T⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T
have h_prob_eq (i : ι) : 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i := by ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.val⊢ derivWithin 𝓒.meanEnergyBeta (Set.Ioi 0) ↑T.β = -𝓒.energyVariance T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Th_prob_eq:∀ (i : ι), 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T
unfold probabilityBetaReal CanonicalEnsemble.probability ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Ti:ι⊢ rexp (-β₀ * 𝓒.energy i) / 𝓒.mathematicalPartitionFunctionBetaReal β₀ =
rexp (-↑T.β * 𝓒.energy i) / 𝓒.mathematicalPartitionFunction T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Th_prob_eq:∀ (i : ι), 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T
congr 1 e_a ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Ti:ι⊢ 𝓒.mathematicalPartitionFunctionBetaReal β₀ = 𝓒.mathematicalPartitionFunction T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Th_prob_eq:∀ (i : ι), 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T
· e_a ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Ti:ι⊢ 𝓒.mathematicalPartitionFunctionBetaReal β₀ = 𝓒.mathematicalPartitionFunction T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Th_prob_eq:∀ (i : ι), 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T unfold mathematicalPartitionFunctionBetaReal e_a ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Ti:ι⊢ ∑ i, rexp (-β₀ * 𝓒.energy i) = 𝓒.mathematicalPartitionFunction T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Th_prob_eq:∀ (i : ι), 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T
rw [mathematicalPartitionFunction_of_fintype e_a ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Ti:ι⊢ ∑ i, rexp (-β₀ * 𝓒.energy i) = ∑ i, rexp (-↑T.β * 𝓒.energy i) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Th_prob_eq:∀ (i : ι), 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T] ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Th_prob_eq:∀ (i : ι), 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Th_prob_eq:∀ (i : ι), 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i⊢ 𝓒.meanEnergyBetaReal β₀ ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T
rw [h_U_eq ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Th_prob_eq:∀ (i : ι), 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i⊢ 𝓒.meanEnergy T ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Th_prob_eq:∀ (i : ι), 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i⊢ 𝓒.meanEnergy T ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T] ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Th_prob_eq:∀ (i : ι), 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i⊢ 𝓒.meanEnergy T ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance T
simp_rw [ ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Th_prob_eq:∀ (i : ι), 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i⊢ 𝓒.meanEnergy T ^ 2 - ∑ i, 𝓒.energy i ^ 2 * 𝓒.probabilityBetaReal β₀ i = -𝓒.energyVariance Th_prob_eq ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Th_prob_eq:∀ (i : ι), 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i⊢ 𝓒.meanEnergy T ^ 2 - ∑ x, 𝓒.energy x ^ 2 * 𝓒.probability T x = -𝓒.energyVariance T]
rw [energyVariance_of_fintype 𝓒 T ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Th_prob_eq:∀ (i : ι), 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i⊢ 𝓒.meanEnergy T ^ 2 - ∑ x, 𝓒.energy x ^ 2 * 𝓒.probability T x =
-(∑ i, 𝓒.energy i ^ 2 * 𝓒.probability T i - 𝓒.meanEnergy T ^ 2) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Th_prob_eq:∀ (i : ι), 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i⊢ 𝓒.meanEnergy T ^ 2 - ∑ x, 𝓒.energy x ^ 2 * 𝓒.probability T x =
-(∑ i, 𝓒.energy i ^ 2 * 𝓒.probability T i - 𝓒.meanEnergy T ^ 2)] ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valβ₀:ℝ := ↑T.βhβ₀_pos:0 < β₀h_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff:DifferentiableAt ℝ 𝓒.meanEnergyBetaReal β₀h_U_eq:𝓒.meanEnergyBetaReal β₀ = 𝓒.meanEnergy Th_prob_eq:∀ (i : ι), 𝓒.probabilityBetaReal β₀ i = 𝓒.probability T i⊢ 𝓒.meanEnergy T ^ 2 - ∑ x, 𝓒.energy x ^ 2 * 𝓒.probability T x =
-(∑ i, 𝓒.energy i ^ 2 * 𝓒.probability T i - 𝓒.meanEnergy T ^ 2)
ring All goals completed! 🐙FDT for finite canonical ensembles: C_V = Var(E) / (k_B T²).
theorem fluctuation_dissipation_theorem_finite
[MeasurableSingletonClass ι] [𝓒.IsFinite] (T : Temperature) (hT_pos : 0 < T.val) :
𝓒.heatCapacity T = 𝓒.energyVariance T / (kB * (T.val : ℝ)^2) := by ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.val⊢ 𝓒.heatCapacity T = 𝓒.energyVariance T / (kB * ↑T.val ^ 2)
have hβ₀_pos : 0 < (T.β : ℝ) := beta_pos T hT_pos ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.β⊢ 𝓒.heatCapacity T = 𝓒.energyVariance T / (kB * ↑T.val ^ 2)
let β₀ := (T.β : ℝ) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.ββ₀:ℝ := ↑T.β⊢ 𝓒.heatCapacity T = 𝓒.energyVariance T / (kB * ↑T.val ^ 2)
have h_diff_U_beta : DifferentiableWithinAt ℝ 𝓒.meanEnergyBeta (Set.Ioi 0) β₀ := by
have h_eq_on : Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0) := by ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.val⊢ 𝓒.heatCapacity T = 𝓒.energyVariance T / (kB * ↑T.val ^ 2) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.ββ₀:ℝ := ↑T.βh_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)⊢ DifferentiableWithinAt ℝ 𝓒.meanEnergyBeta (Set.Ioi 0) β₀ ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.ββ₀:ℝ := ↑T.βh_diff_U_beta:DifferentiableWithinAt ℝ 𝓒.meanEnergyBeta (Set.Ioi 0) β₀⊢ 𝓒.heatCapacity T = 𝓒.energyVariance T / (kB * ↑T.val ^ 2)
intro b hb ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.ββ₀:ℝ := ↑T.βb:ℝhb:b ∈ Set.Ioi 0⊢ 𝓒.meanEnergyBeta b = 𝓒.meanEnergyBetaReal b ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.ββ₀:ℝ := ↑T.βh_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)⊢ DifferentiableWithinAt ℝ 𝓒.meanEnergyBeta (Set.Ioi 0) β₀ ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.ββ₀:ℝ := ↑T.βh_diff_U_beta:DifferentiableWithinAt ℝ 𝓒.meanEnergyBeta (Set.Ioi 0) β₀⊢ 𝓒.heatCapacity T = 𝓒.energyVariance T / (kB * ↑T.val ^ 2); exact meanEnergy_Beta_eq_finite 𝓒 b hb ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.ββ₀:ℝ := ↑T.βh_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)⊢ DifferentiableWithinAt ℝ 𝓒.meanEnergyBeta (Set.Ioi 0) β₀ ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.ββ₀:ℝ := ↑T.βh_diff_U_beta:DifferentiableWithinAt ℝ 𝓒.meanEnergyBeta (Set.Ioi 0) β₀⊢ 𝓒.heatCapacity T = 𝓒.energyVariance T / (kB * ↑T.val ^ 2) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.ββ₀:ℝ := ↑T.βh_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)⊢ DifferentiableWithinAt ℝ 𝓒.meanEnergyBeta (Set.Ioi 0) β₀ ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.ββ₀:ℝ := ↑T.βh_diff_U_beta:DifferentiableWithinAt ℝ 𝓒.meanEnergyBeta (Set.Ioi 0) β₀⊢ 𝓒.heatCapacity T = 𝓒.energyVariance T / (kB * ↑T.val ^ 2)
have h_diff' := (differentiable_meanEnergyBetaReal 𝓒) (T.β : ℝ) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.ββ₀:ℝ := ↑T.βh_eq_on:Set.EqOn 𝓒.meanEnergyBeta 𝓒.meanEnergyBetaReal (Set.Ioi 0)h_diff':DifferentiableAt ℝ 𝓒.meanEnergyBetaReal ↑T.β⊢ DifferentiableWithinAt ℝ 𝓒.meanEnergyBeta (Set.Ioi 0) β₀ ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.ββ₀:ℝ := ↑T.βh_diff_U_beta:DifferentiableWithinAt ℝ 𝓒.meanEnergyBeta (Set.Ioi 0) β₀⊢ 𝓒.heatCapacity T = 𝓒.energyVariance T / (kB * ↑T.val ^ 2)
exact DifferentiableWithinAt.congr_of_eventuallyEq h_diff'.differentiableWithinAt
(eventuallyEq_nhdsWithin_of_eqOn h_eq_on) (h_eq_on hβ₀_pos) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.ββ₀:ℝ := ↑T.βh_diff_U_beta:DifferentiableWithinAt ℝ 𝓒.meanEnergyBeta (Set.Ioi 0) β₀⊢ 𝓒.heatCapacity T = 𝓒.energyVariance T / (kB * ↑T.val ^ 2) ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.ββ₀:ℝ := ↑T.βh_diff_U_beta:DifferentiableWithinAt ℝ 𝓒.meanEnergyBeta (Set.Ioi 0) β₀⊢ 𝓒.heatCapacity T = 𝓒.energyVariance T / (kB * ↑T.val ^ 2)
have h_Var_eq_neg_dUdβ := derivWithin_meanEnergy_Beta_eq_neg_variance 𝓒 T hT_pos ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.ββ₀:ℝ := ↑T.βh_diff_U_beta:DifferentiableWithinAt ℝ 𝓒.meanEnergyBeta (Set.Ioi 0) β₀h_Var_eq_neg_dUdβ:derivWithin 𝓒.meanEnergyBeta (Set.Ioi 0) ↑T.β = -𝓒.energyVariance T⊢ 𝓒.heatCapacity T = 𝓒.energyVariance T / (kB * ↑T.val ^ 2)
exact CanonicalEnsemble.fluctuation_dissipation_energy_parametric 𝓒 T hT_pos
(by ι:Typeinst✝⁴:Fintype ιinst✝³:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝²:Nonempty ιinst✝¹:MeasurableSingletonClass ιinst✝:𝓒.IsFiniteT:TemperaturehT_pos:0 < T.valhβ₀_pos:0 < ↑T.ββ₀:ℝ := ↑T.βh_diff_U_beta:DifferentiableWithinAt ℝ 𝓒.meanEnergyBeta (Set.Ioi 0) β₀h_Var_eq_neg_dUdβ:derivWithin 𝓒.meanEnergyBeta (Set.Ioi 0) ↑T.β = -𝓒.energyVariance T⊢ 𝓒.energyVariance T = -derivWithin 𝓒.meanEnergyBeta (Set.Ioi 0) ↑T.β simp_all only [NNReal.coe_pos, neg_neg, β₀] All goals completed! 🐙) h_diff_U_beta