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 Mathlib.MeasureTheory.Integral.Prod
public import Physlib.Thermodynamics.Temperature.BasicCanonical Ensemble: Core Definitions
A canonical ensemble describes a system in thermal equilibrium with a heat bath at fixed
temperature T. This file gives a measure–theoretic, semi–classical formalization intended to
work uniformly for discrete (counting measure) and continuous (Lebesgue–type) models.
1. Semi–Classical Normalization
Classical phase–space integrals produce dimensionful quantities. To obtain dimensionless thermodynamic objects (and an absolute entropy) we introduce:
phaseSpaceUnit : ℝ (physically Planck's constant h);
dof : ℕ the number of degrees of freedom.
The physical partition function is obtained from the mathematical one by dividing by
phaseSpaceUnit ^ dof. This yields the standard semi–classical correction preventing
ambiguities such as the Gibbs paradox.
2. Mathematical vs Physical Quantities
We keep both layers:
Mathematical / raw:
mathematicalPartitionFunction (T) : ∫ exp(-β E) dμ
probability (density w.r.t. μ)
differentialEntropy (can be negative, unit–dependent)
Physical / dimensionless:
partitionFunction : Z = Z_math / h^dof
physicalProbability : dimensionless density
helmholtzFreeEnergy : F = -kB T log Z
thermodynamicEntropy : absolute entropy (U - F)/T = -kB ∫ ρ_phys log ρ_phys
Each physical quantity is expressed explicitly in terms of its mathematical ancestor.
3. Core Structure
We assume phaseSpaceUnit > 0 and μ σ–finite. No probability assumption is imposed:
normalization is recovered via the Boltzmann weighted measure.
4. Boltzmann & Probability Measures
μBolt T : Boltzmann (unnormalized) measure withDensity exp(-β E)
μProd T : normalized probability measure (rescaled μBolt T)
probability T i : the density exp(-β E(i)) / Z_math
physicalProbability : probability * (phase_space_unit ^ dof)
5. Energies & Entropies
meanEnergy : expectation of energy under μProd.
differentialEntropy : -kB ∫ log(probability) dμProd
thermodynamicEntropy : -kB ∫ log(physicalProbability) dμProd
(proved later to coincide with the textbook (U - F)/T).
A helper lemma supplies positivity of the partition function under mild assumptions and
non–negativity criteria for the entropy when probability ≤ 1 (automatic in finite discrete
settings, not in general continuous ones).
6. Algebraic Operations
We construct composite ensembles:
Addition (𝓒₁ + 𝓒₂) on product microstates: energies add, measures take product,
degrees of freedom add, and (physically) the same phaseSpaceUnit is reused.
Multiplicity nsmul n 𝓒: n distinguishable, non–interacting copies (product of n copies).
Transport along measurable equivalences via congr.
These operations respect partition functions, free energies, and (under suitable hypotheses) mean energies and integrability.
7. Notational & Implementation Notes
We work over an arbitrary measurable type ι, allowing both finite and continuous models.
β is accessed through the Temperature structure (T.β).
Most positivity / finiteness conditions are hypotheses on lemmas instead of global axioms, enabling reuse in formal derivations of fluctuation and response identities.
8. References
L. D. Landau & E. M. Lifshitz, Statistical Physics, Part 1.
D. Tong, Cambridge Lecture Notes (sections on canonical ensemble).
https://www.damtp.cam.ac.uk/user/tong/statphys/one.pdf
https://www.damtp.cam.ac.uk/user/tong/statphys/two.pdf
9. Roadmap
Subsequent files (Lemmas.lean) prove:
Relations among entropies and free energies.
Fundamental identity F = U - T S.
Derivative (response) formulas: U = -∂_β log Z.
@[expose] public section
A Canonical ensemble is described by a type ι, corresponding to the type of microstates,
and a map ι → ℝ which associates which each microstate an energy
and physical constants needed to define dimensionless thermodynamic quantities.
The energy of associated with a microstate of the canonical ensemble.
The number of degrees of freedom, used to make the partition function dimensionless.
For a classical system of N particles in 3D, this is 3N. For a system of N spins,
this is typically 0 as the state space is already discrete.
The unit of action used to make the phase space volume dimensionless.
This constant is necessary to define an absolute (rather than relative) thermodynamic
entropy. In the semi-classical approach, this unit is identified with Planck's constant h.
For discrete systems with a counting measure, this unit should be set to 1.
Assumption that the phase space unit is positive.
The measure on the indexing set of microstates.
structure CanonicalEnsemble (ι : Type) [MeasurableSpace ι] : Type where energy : ι → ℝ dof : ℕ phaseSpaceunit : ℝ := 1 hPos : 0 < phaseSpaceunit := by positivity
energy_measurable : Measurable energy μ : MeasureTheory.Measure ι := by volume_tac
[μ_sigmaFinite : SigmaFinite μ]instance : SigmaFinite 𝓒.μ := 𝓒.μ_sigmaFinite@[ext]
lemma ext {𝓒 𝓒' : CanonicalEnsemble ι} (h_energy : 𝓒.energy = 𝓒'.energy)
(h_dof : 𝓒.dof = 𝓒'.dof) (h_h : 𝓒.phaseSpaceunit = 𝓒'.phaseSpaceunit)
(h_μ : 𝓒.μ = 𝓒'.μ) : 𝓒 = 𝓒' := ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ι𝓒':CanonicalEnsemble ιh_energy:𝓒.energy = 𝓒'.energyh_dof:𝓒.dof = 𝓒'.dofh_h:𝓒.phaseSpaceunit = 𝓒'.phaseSpaceunith_μ:𝓒.μ = 𝓒'.μ⊢ 𝓒 = 𝓒'
ι:Typeinst✝:MeasurableSpace ι𝓒':CanonicalEnsemble ιenergy✝:ι → ℝdof✝:ℕphaseSpaceunit✝:ℝhPos✝:0 < phaseSpaceunit✝energy_measurable✝:Measurable energy✝μ✝:Measure ιμ_sigmaFinite✝:SigmaFinite μ✝h_energy:{ energy := energy✝, dof := dof✝, phaseSpaceunit := phaseSpaceunit✝, hPos := hPos✝,
energy_measurable := energy_measurable✝, μ := μ✝, μ_sigmaFinite := μ_sigmaFinite✝ }.energy =
𝓒'.energyh_dof:{ energy := energy✝, dof := dof✝, phaseSpaceunit := phaseSpaceunit✝, hPos := hPos✝,
energy_measurable := energy_measurable✝, μ := μ✝, μ_sigmaFinite := μ_sigmaFinite✝ }.dof =
𝓒'.dofh_h:{ energy := energy✝, dof := dof✝, phaseSpaceunit := phaseSpaceunit✝, hPos := hPos✝,
energy_measurable := energy_measurable✝, μ := μ✝, μ_sigmaFinite := μ_sigmaFinite✝ }.phaseSpaceunit =
𝓒'.phaseSpaceunith_μ:{ energy := energy✝, dof := dof✝, phaseSpaceunit := phaseSpaceunit✝, hPos := hPos✝,
energy_measurable := energy_measurable✝, μ := μ✝, μ_sigmaFinite := μ_sigmaFinite✝ }.μ =
𝓒'.μ⊢ { energy := energy✝, dof := dof✝, phaseSpaceunit := phaseSpaceunit✝, hPos := hPos✝,
energy_measurable := energy_measurable✝, μ := μ✝, μ_sigmaFinite := μ_sigmaFinite✝ } =
𝓒'; ι:Typeinst✝:MeasurableSpace ιenergy✝¹:ι → ℝdof✝¹:ℕphaseSpaceunit✝¹:ℝhPos✝¹:0 < phaseSpaceunit✝energy_measurable✝¹:Measurable energy✝μ✝¹:Measure ιμ_sigmaFinite✝¹:SigmaFinite μ✝energy✝:ι → ℝdof✝:ℕphaseSpaceunit✝:ℝhPos✝:0 < phaseSpaceunit✝energy_measurable✝:Measurable energy✝μ✝:Measure ιμ_sigmaFinite✝:SigmaFinite μ✝h_energy:{ energy := energy✝¹, dof := dof✝¹, phaseSpaceunit := phaseSpaceunit✝¹, hPos := hPos✝¹,
energy_measurable := energy_measurable✝¹, μ := μ✝¹, μ_sigmaFinite := μ_sigmaFinite✝¹ }.energy =
{ energy := energy✝, dof := dof✝, phaseSpaceunit := phaseSpaceunit✝, hPos := hPos✝,
energy_measurable := energy_measurable✝, μ := μ✝, μ_sigmaFinite := μ_sigmaFinite✝ }.energyh_dof:{ energy := energy✝¹, dof := dof✝¹, phaseSpaceunit := phaseSpaceunit✝¹, hPos := hPos✝¹,
energy_measurable := energy_measurable✝¹, μ := μ✝¹, μ_sigmaFinite := μ_sigmaFinite✝¹ }.dof =
{ energy := energy✝, dof := dof✝, phaseSpaceunit := phaseSpaceunit✝, hPos := hPos✝,
energy_measurable := energy_measurable✝, μ := μ✝, μ_sigmaFinite := μ_sigmaFinite✝ }.dofh_h:{ energy := energy✝¹, dof := dof✝¹, phaseSpaceunit := phaseSpaceunit✝¹, hPos := hPos✝¹,
energy_measurable := energy_measurable✝¹, μ := μ✝¹, μ_sigmaFinite := μ_sigmaFinite✝¹ }.phaseSpaceunit =
{ energy := energy✝, dof := dof✝, phaseSpaceunit := phaseSpaceunit✝, hPos := hPos✝,
energy_measurable := energy_measurable✝, μ := μ✝, μ_sigmaFinite := μ_sigmaFinite✝ }.phaseSpaceunith_μ:{ energy := energy✝¹, dof := dof✝¹, phaseSpaceunit := phaseSpaceunit✝¹, hPos := hPos✝¹,
energy_measurable := energy_measurable✝¹, μ := μ✝¹, μ_sigmaFinite := μ_sigmaFinite✝¹ }.μ =
{ energy := energy✝, dof := dof✝, phaseSpaceunit := phaseSpaceunit✝, hPos := hPos✝,
energy_measurable := energy_measurable✝, μ := μ✝, μ_sigmaFinite := μ_sigmaFinite✝ }.μ⊢ { energy := energy✝¹, dof := dof✝¹, phaseSpaceunit := phaseSpaceunit✝¹, hPos := hPos✝¹,
energy_measurable := energy_measurable✝¹, μ := μ✝¹, μ_sigmaFinite := μ_sigmaFinite✝¹ } =
{ energy := energy✝, dof := dof✝, phaseSpaceunit := phaseSpaceunit✝, hPos := hPos✝,
energy_measurable := energy_measurable✝, μ := μ✝, μ_sigmaFinite := μ_sigmaFinite✝ }; All goals completed! 🐙@[fun_prop]
lemma energy_measurable' : Measurable 𝓒.energy := 𝓒.energy_measurableThe canonical ensemble with no microstates.
def empty : CanonicalEnsemble Empty where
energy := isEmptyElim
dof := 0
μ := 0
energy_measurable := ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1⊢ Measurable fun a => isEmptyElim a All goals completed! 🐙@[simp]
lemma congr_energy_comp_symmm (e : ι1 ≃ᵐ ι) :
(𝓒.congr e).energy ∘ e.symm = 𝓒.energy := ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ι⊢ (𝓒.congr e).energy ∘ ⇑e.symm = 𝓒.energy
All goals completed! 🐙The microstates of a canonical ensemble.
set_option linter.unusedVariables false in@[nolint unusedArguments]
abbrev microstates (𝓒 : CanonicalEnsemble ι) : Type := ιProperties of physical parameters
@[simp]
lemma dof_add (𝓒1 : CanonicalEnsemble ι) (𝓒2 : CanonicalEnsemble ι1) :
(𝓒1 + 𝓒2).dof = 𝓒1.dof + 𝓒2.dof := rfl@[simp]
lemma phase_space_unit_add (𝓒1 : CanonicalEnsemble ι) (𝓒2 : CanonicalEnsemble ι1) :
(𝓒1 + 𝓒2).phaseSpaceunit = 𝓒1.phaseSpaceunit := rfl@[simp]
lemma dof_nsmul (n : ℕ) : (nsmul n 𝓒).dof = n * 𝓒.dof := rfl@[simp]
lemma phase_space_unit_nsmul (n : ℕ) :
(nsmul n 𝓒).phaseSpaceunit = 𝓒.phaseSpaceunit := rfl@[simp]
lemma dof_congr (e : ι1 ≃ᵐ ι) :
(𝓒.congr e).dof = 𝓒.dof := rfl@[simp]
lemma phase_space_unit_congr (e : ι1 ≃ᵐ ι) :
(𝓒.congr e).phaseSpaceunit = 𝓒.phaseSpaceunit := rflThe measure
lemma μ_add : (𝓒 + 𝓒1).μ = 𝓒.μ.prod 𝓒1.μ := rfllemma μ_nsmul (n : ℕ) : (nsmul n 𝓒).μ = MeasureTheory.Measure.pi fun _ => 𝓒.μ := rfllemma μ_nsmul_zero_eq : (nsmul 0 𝓒).μ = Measure.pi (fun _ => 0) :=
congrArg Measure.pi (Subsingleton.elim _ _)The energy of the microstates
@[simp]
lemma energy_add_apply (i : microstates (𝓒 + 𝓒1)) :
(𝓒 + 𝓒1).energy i = 𝓒.energy i.1 + 𝓒1.energy i.2 := rfl@[simp]
lemma energy_nsmul_apply (n : ℕ) (f : Fin n → microstates 𝓒) :
(nsmul n 𝓒).energy f = ∑ i, 𝓒.energy (f i) := rfl@[simp]
lemma energy_congr_apply (e : ι1 ≃ᵐ ι) (i : ι1) :
(𝓒.congr e).energy i = 𝓒.energy (e i) := rflInduction for nsmul
lemma nsmul_succ (n : ℕ) [SigmaFinite 𝓒.μ] : nsmul n.succ 𝓒 = (𝓒 + nsmul n 𝓒).congr
(MeasurableEquiv.piFinSuccAbove (fun _ => ι) 0) := ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕinst✝:SigmaFinite 𝓒.μ⊢ nsmul n.succ 𝓒 = (𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)
ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕinst✝:SigmaFinite 𝓒.μ⊢ (nsmul n.succ 𝓒).energy = ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).energyι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕinst✝:SigmaFinite 𝓒.μ⊢ (nsmul n.succ 𝓒).dof = ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).dofι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕinst✝:SigmaFinite 𝓒.μ⊢ (nsmul n.succ 𝓒).phaseSpaceunit = ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).phaseSpaceunitι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕinst✝:SigmaFinite 𝓒.μ⊢ (nsmul n.succ 𝓒).μ = ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μ
ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕinst✝:SigmaFinite 𝓒.μ⊢ (nsmul n.succ 𝓒).energy = ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).energy All goals completed! 🐙
ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕinst✝:SigmaFinite 𝓒.μ⊢ (nsmul n.succ 𝓒).dof = ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).dof All goals completed! 🐙
ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕinst✝:SigmaFinite 𝓒.μ⊢ (nsmul n.succ 𝓒).phaseSpaceunit = ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).phaseSpaceunit All goals completed! 🐙
ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕinst✝:SigmaFinite 𝓒.μ⊢ (nsmul n.succ 𝓒).μ = ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μ All goals completed! 🐙Non zero nature of the measure
ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μ⊢ 𝓒.μ Set.univ * 𝓒1.μ Set.univ ≠ 0
exact NeZero.ne _ All goals completed! 🐙instance μ_neZero_congr [NeZero 𝓒.μ] (e : ι1 ≃ᵐ ι) :
NeZero (𝓒.congr e).μ :=
⟨(Measure.map_ne_zero_iff e.symm.measurable.aemeasurable).mpr (NeZero.ne _)⟩
instance [NeZero 𝓒.μ] (n : ℕ) : NeZero (nsmul n 𝓒).μ := by ι:Typeι1:Typeinst✝²:MeasurableSpace ιinst✝¹:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1inst✝:NeZero 𝓒.μn:ℕ⊢ NeZero (nsmul n 𝓒).μ
refine ⟨Measure.measure_univ_ne_zero.mp ?_⟩ ι:Typeι1:Typeinst✝²:MeasurableSpace ιinst✝¹:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1inst✝:NeZero 𝓒.μn:ℕ⊢ (nsmul n 𝓒).μ Set.univ ≠ 0
rw [μ_nsmul, ι:Typeι1:Typeinst✝²:MeasurableSpace ιinst✝¹:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1inst✝:NeZero 𝓒.μn:ℕ⊢ (Measure.pi fun x => 𝓒.μ) Set.univ ≠ 0 ι:Typeι1:Typeinst✝²:MeasurableSpace ιinst✝¹:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1inst✝:NeZero 𝓒.μn:ℕ⊢ ∏ i, 𝓒.μ Set.univ ≠ 0 Measure.pi_univ ι:Typeι1:Typeinst✝²:MeasurableSpace ιinst✝¹:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1inst✝:NeZero 𝓒.μn:ℕ⊢ ∏ i, 𝓒.μ Set.univ ≠ 0 ι:Typeι1:Typeinst✝²:MeasurableSpace ιinst✝¹:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1inst✝:NeZero 𝓒.μn:ℕ⊢ ∏ i, 𝓒.μ Set.univ ≠ 0] ι:Typeι1:Typeinst✝²:MeasurableSpace ιinst✝¹:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1inst✝:NeZero 𝓒.μn:ℕ⊢ ∏ i, 𝓒.μ Set.univ ≠ 0
exact Finset.prod_ne_zero_iff.mpr fun i _ => Measure.measure_univ_ne_zero.mpr (NeZero.ne _) All goals completed! 🐙The Boltzmann measure
instance (T : Temperature) : SigmaFinite (𝓒.μBolt T) :=
inferInstanceAs
(SigmaFinite (𝓒.μ.withDensity (fun i => ENNReal.ofReal (exp (- β T * 𝓒.energy i)))))
@[simp]
lemma μBolt_add (T : Temperature) :
(𝓒 + 𝓒1).μBolt T = (𝓒.μBolt T).prod (𝓒1.μBolt T) := by ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ (𝓒 + 𝓒1).μBolt T = (𝓒.μBolt T).prod (𝓒1.μBolt T)
simp_rw [ ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ (𝓒 + 𝓒1).μBolt T = (𝓒.μBolt T).prod (𝓒1.μBolt T)μBolt, ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ ((𝓒 + 𝓒1).μ.withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * (𝓒 + 𝓒1).energy i))) =
(𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))).prod
(𝓒1.μ.withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒1.energy i))) μ_add ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ ((𝓒.μ.prod 𝓒1.μ).withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * (𝓒 + 𝓒1).energy i))) =
(𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))).prod
(𝓒1.μ.withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒1.energy i)))]
rw [MeasureTheory.prod_withDensity ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ ((𝓒.μ.prod 𝓒1.μ).withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * (𝓒 + 𝓒1).energy i))) =
(𝓒.μ.prod 𝓒1.μ).withDensity fun z =>
ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy z.1)) * ENNReal.ofReal (rexp (-↑T.β * 𝓒1.energy z.2))hf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ Measurable fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ Measurable fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒1.energy i)) ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ ((𝓒.μ.prod 𝓒1.μ).withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * (𝓒 + 𝓒1).energy i))) =
(𝓒.μ.prod 𝓒1.μ).withDensity fun z =>
ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy z.1)) * ENNReal.ofReal (rexp (-↑T.β * 𝓒1.energy z.2))hf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ Measurable fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ Measurable fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒1.energy i))] ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ ((𝓒.μ.prod 𝓒1.μ).withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * (𝓒 + 𝓒1).energy i))) =
(𝓒.μ.prod 𝓒1.μ).withDensity fun z =>
ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy z.1)) * ENNReal.ofReal (rexp (-↑T.β * 𝓒1.energy z.2))hf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ Measurable fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ Measurable fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒1.energy i))
· ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ ((𝓒.μ.prod 𝓒1.μ).withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * (𝓒 + 𝓒1).energy i))) =
(𝓒.μ.prod 𝓒1.μ).withDensity fun z =>
ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy z.1)) * ENNReal.ofReal (rexp (-↑T.β * 𝓒1.energy z.2)) congr with i e_f ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperaturei:ι × ι1⊢ ENNReal.ofReal (rexp (-↑T.β * (𝓒 + 𝓒1).energy i)) =
ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i.1)) * ENNReal.ofReal (rexp (-↑T.β * 𝓒1.energy i.2))
rw [← ENNReal.ofReal_mul (exp_nonneg _), e_f ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperaturei:ι × ι1⊢ ENNReal.ofReal (rexp (-↑T.β * (𝓒 + 𝓒1).energy i)) =
ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i.1) * rexp (-↑T.β * 𝓒1.energy i.2)) e_f ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperaturei:ι × ι1⊢ ENNReal.ofReal (rexp (-↑T.β * (𝓒 + 𝓒1).energy i)) = ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i.1 + -↑T.β * 𝓒1.energy i.2)) ← Real.exp_add e_f ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperaturei:ι × ι1⊢ ENNReal.ofReal (rexp (-↑T.β * (𝓒 + 𝓒1).energy i)) = ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i.1 + -↑T.β * 𝓒1.energy i.2))e_f ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperaturei:ι × ι1⊢ ENNReal.ofReal (rexp (-↑T.β * (𝓒 + 𝓒1).energy i)) = ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i.1 + -↑T.β * 𝓒1.energy i.2))]e_f ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperaturei:ι × ι1⊢ ENNReal.ofReal (rexp (-↑T.β * (𝓒 + 𝓒1).energy i)) = ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i.1 + -↑T.β * 𝓒1.energy i.2))
simp only [energy_add_apply, mul_add] All goals completed! 🐙
· hf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ Measurable fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i)) fun_prop All goals completed! 🐙
· hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ Measurable fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒1.energy i)) fun_prop All goals completed! 🐙
lemma μBolt_congr (e : ι1 ≃ᵐ ι) (T : Temperature) : (𝓒.congr e).μBolt T =
(𝓒.μBolt T).map e.symm := by ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperature⊢ (𝓒.congr e).μBolt T = Measure.map (⇑e.symm) (𝓒.μBolt T)
simp [congr, μBolt] ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperature⊢ ((Measure.map (⇑e.symm) 𝓒.μ).withDensity fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) =
Measure.map (⇑e.symm) (𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i))))
refine Measure.ext_of_lintegral _ fun φ hφ ↦ ?_ ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ (∫⁻ (a : ι1), φ a ∂(Measure.map (⇑e.symm) 𝓒.μ).withDensity fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) =
∫⁻ (a : ι1), φ a ∂Measure.map (⇑e.symm) (𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i))))
rw [lintegral_withDensity_eq_lintegral_mul₀, ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ ∫⁻ (a : ι1), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ) a ∂Measure.map (⇑e.symm) 𝓒.μ =
∫⁻ (a : ι1), φ a ∂Measure.map (⇑e.symm) (𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i))))hf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) (Measure.map (⇑e.symm) 𝓒.μ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable φ (Measure.map (⇑e.symm) 𝓒.μ) ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ ∫⁻ (a : ι), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ) (e.symm a) ∂𝓒.μ =
∫⁻ (a : ι), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) * fun a => φ (e.symm a)) a ∂𝓒.μhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) 𝓒.μhg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun a => φ (e.symm a)) 𝓒.μhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable φhg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ⇑e.symmhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ⇑e.symmhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) (Measure.map (⇑e.symm) 𝓒.μ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable φ (Measure.map (⇑e.symm) 𝓒.μ) lintegral_map, ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ ∫⁻ (a : ι), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ) (e.symm a) ∂𝓒.μ =
∫⁻ (a : ι1), φ a ∂Measure.map (⇑e.symm) (𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i))))hf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ⇑e.symmhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) (Measure.map (⇑e.symm) 𝓒.μ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable φ (Measure.map (⇑e.symm) 𝓒.μ) ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ ∫⁻ (a : ι), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ) (e.symm a) ∂𝓒.μ =
∫⁻ (a : ι), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) * fun a => φ (e.symm a)) a ∂𝓒.μhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) 𝓒.μhg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun a => φ (e.symm a)) 𝓒.μhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable φhg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ⇑e.symmhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ⇑e.symmhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) (Measure.map (⇑e.symm) 𝓒.μ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable φ (Measure.map (⇑e.symm) 𝓒.μ) lintegral_map, ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ ∫⁻ (a : ι), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ) (e.symm a) ∂𝓒.μ =
∫⁻ (a : ι), φ (e.symm a) ∂𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))hf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable φhg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ⇑e.symmhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ⇑e.symmhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) (Measure.map (⇑e.symm) 𝓒.μ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable φ (Measure.map (⇑e.symm) 𝓒.μ) ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ ∫⁻ (a : ι), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ) (e.symm a) ∂𝓒.μ =
∫⁻ (a : ι), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) * fun a => φ (e.symm a)) a ∂𝓒.μhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) 𝓒.μhg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun a => φ (e.symm a)) 𝓒.μhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable φhg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ⇑e.symmhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ⇑e.symmhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) (Measure.map (⇑e.symm) 𝓒.μ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable φ (Measure.map (⇑e.symm) 𝓒.μ)
lintegral_withDensity_eq_lintegral_mul₀ ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ ∫⁻ (a : ι), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ) (e.symm a) ∂𝓒.μ =
∫⁻ (a : ι), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) * fun a => φ (e.symm a)) a ∂𝓒.μhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) 𝓒.μhg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun a => φ (e.symm a)) 𝓒.μhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable φhg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ⇑e.symmhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ⇑e.symmhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) (Measure.map (⇑e.symm) 𝓒.μ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable φ (Measure.map (⇑e.symm) 𝓒.μ) ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ ∫⁻ (a : ι), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ) (e.symm a) ∂𝓒.μ =
∫⁻ (a : ι), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) * fun a => φ (e.symm a)) a ∂𝓒.μhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) 𝓒.μhg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun a => φ (e.symm a)) 𝓒.μhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable φhg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ⇑e.symmhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ⇑e.symmhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) (Measure.map (⇑e.symm) 𝓒.μ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable φ (Measure.map (⇑e.symm) 𝓒.μ)] ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ ∫⁻ (a : ι), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ) (e.symm a) ∂𝓒.μ =
∫⁻ (a : ι), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) * fun a => φ (e.symm a)) a ∂𝓒.μhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) 𝓒.μhg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun a => φ (e.symm a)) 𝓒.μhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable φhg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ⇑e.symmhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ Measurable ⇑e.symmhf ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) (Measure.map (⇑e.symm) 𝓒.μ)hg ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ AEMeasurable φ (Measure.map (⇑e.symm) 𝓒.μ)
· ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φ⊢ ∫⁻ (a : ι), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ) (e.symm a) ∂𝓒.μ =
∫⁻ (a : ι), ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) * fun a => φ (e.symm a)) a ∂𝓒.μ congr with i e_f ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperatureφ:ι1 → ENNRealhφ:Measurable φi:ι⊢ ((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy (e i))))) * φ) (e.symm i) =
((fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))) * fun a => φ (e.symm a)) i
simp All goals completed! 🐙
all_goals fun_prop All goals completed! 🐙
lemma μBolt_nsmul [SigmaFinite 𝓒.μ] (n : ℕ) (T : Temperature) :
(nsmul n 𝓒).μBolt T = MeasureTheory.Measure.pi fun _ => (𝓒.μBolt T) := by ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:SigmaFinite 𝓒.μn:ℕT:Temperature⊢ (nsmul n 𝓒).μBolt T = Measure.pi fun x => 𝓒.μBolt T
induction n with
| zero => zero ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:SigmaFinite 𝓒.μT:Temperature⊢ (nsmul 0 𝓒).μBolt T = Measure.pi fun x => 𝓒.μBolt T
simp [nsmul, μBolt] zero ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:SigmaFinite 𝓒.μT:Temperature⊢ (Measure.pi fun x => 𝓒.μ) = Measure.pi fun x => 𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))
exact congrArg Measure.pi (Subsingleton.elim _ _) All goals completed! 🐙
| succ n ih => succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:SigmaFinite 𝓒.μT:Temperaturen:ℕih:(nsmul n 𝓒).μBolt T = Measure.pi fun x => 𝓒.μBolt T⊢ (nsmul (n + 1) 𝓒).μBolt T = Measure.pi fun x => 𝓒.μBolt T
rw [nsmul_succ, succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:SigmaFinite 𝓒.μT:Temperaturen:ℕih:(nsmul n 𝓒).μBolt T = Measure.pi fun x => 𝓒.μBolt T⊢ ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μBolt T = Measure.pi fun x => 𝓒.μBolt T succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:SigmaFinite 𝓒.μT:Temperaturen:ℕih:(nsmul n 𝓒).μBolt T = Measure.pi fun x => 𝓒.μBolt T⊢ Measure.map (⇑(MeasurableEquiv.piFinSuccAbove (fun x => ι) 0).symm) ((𝓒.μBolt T).prod (Measure.pi fun x => 𝓒.μBolt T)) =
Measure.pi fun x => 𝓒.μBolt T μBolt_congr, succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:SigmaFinite 𝓒.μT:Temperaturen:ℕih:(nsmul n 𝓒).μBolt T = Measure.pi fun x => 𝓒.μBolt T⊢ Measure.map (⇑(MeasurableEquiv.piFinSuccAbove (fun x => ι) 0).symm) ((𝓒 + nsmul n 𝓒).μBolt T) =
Measure.pi fun x => 𝓒.μBolt T succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:SigmaFinite 𝓒.μT:Temperaturen:ℕih:(nsmul n 𝓒).μBolt T = Measure.pi fun x => 𝓒.μBolt T⊢ Measure.map (⇑(MeasurableEquiv.piFinSuccAbove (fun x => ι) 0).symm) ((𝓒.μBolt T).prod (Measure.pi fun x => 𝓒.μBolt T)) =
Measure.pi fun x => 𝓒.μBolt T μBolt_add, succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:SigmaFinite 𝓒.μT:Temperaturen:ℕih:(nsmul n 𝓒).μBolt T = Measure.pi fun x => 𝓒.μBolt T⊢ Measure.map (⇑(MeasurableEquiv.piFinSuccAbove (fun x => ι) 0).symm) ((𝓒.μBolt T).prod ((nsmul n 𝓒).μBolt T)) =
Measure.pi fun x => 𝓒.μBolt Tsucc ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:SigmaFinite 𝓒.μT:Temperaturen:ℕih:(nsmul n 𝓒).μBolt T = Measure.pi fun x => 𝓒.μBolt T⊢ Measure.map (⇑(MeasurableEquiv.piFinSuccAbove (fun x => ι) 0).symm) ((𝓒.μBolt T).prod (Measure.pi fun x => 𝓒.μBolt T)) =
Measure.pi fun x => 𝓒.μBolt T ih succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:SigmaFinite 𝓒.μT:Temperaturen:ℕih:(nsmul n 𝓒).μBolt T = Measure.pi fun x => 𝓒.μBolt T⊢ Measure.map (⇑(MeasurableEquiv.piFinSuccAbove (fun x => ι) 0).symm) ((𝓒.μBolt T).prod (Measure.pi fun x => 𝓒.μBolt T)) =
Measure.pi fun x => 𝓒.μBolt Tsucc ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:SigmaFinite 𝓒.μT:Temperaturen:ℕih:(nsmul n 𝓒).μBolt T = Measure.pi fun x => 𝓒.μBolt T⊢ Measure.map (⇑(MeasurableEquiv.piFinSuccAbove (fun x => ι) 0).symm) ((𝓒.μBolt T).prod (Measure.pi fun x => 𝓒.μBolt T)) =
Measure.pi fun x => 𝓒.μBolt T]succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιinst✝:SigmaFinite 𝓒.μT:Temperaturen:ℕih:(nsmul n 𝓒).μBolt T = Measure.pi fun x => 𝓒.μBolt T⊢ Measure.map (⇑(MeasurableEquiv.piFinSuccAbove (fun x => ι) 0).symm) ((𝓒.μBolt T).prod (Measure.pi fun x => 𝓒.μBolt T)) =
Measure.pi fun x => 𝓒.μBolt T
exact ((measurePreserving_piFinSuccAbove (fun _ => 𝓒.μBolt T) 0).symm _).map_eq All goals completed! 🐙
lemma μBolt_ne_zero_of_μ_ne_zero (T : Temperature) (h : 𝓒.μ ≠ 0) :
𝓒.μBolt T ≠ 0 := by ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.μ ≠ 0⊢ 𝓒.μBolt T ≠ 0
have hm : AEMeasurable (fun i => ENNReal.ofReal (exp (- T.β * 𝓒.energy i))) 𝓒.μ := by fun_prop ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.μ ≠ 0hm:AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ⊢ 𝓒.μBolt T ≠ 0 ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.μ ≠ 0hm:AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ⊢ 𝓒.μBolt T ≠ 0
rw [μBolt, ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.μ ≠ 0hm:AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ⊢ (𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) ≠ 0 ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.μ ≠ 0hm:AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ⊢ ¬𝓒.μ {a | ¬ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a)) = 0 a} = 0 ne_eq, ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.μ ≠ 0hm:AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ⊢ ¬(𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) = 0 ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.μ ≠ 0hm:AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ⊢ ¬𝓒.μ {a | ¬ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a)) = 0 a} = 0 withDensity_eq_zero_iff hm, ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.μ ≠ 0hm:AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ⊢ ¬(fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) =ᵐ[𝓒.μ] 0 ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.μ ≠ 0hm:AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ⊢ ¬𝓒.μ {a | ¬ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a)) = 0 a} = 0 Filter.EventuallyEq, ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.μ ≠ 0hm:AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ⊢ ¬∀ᵐ (x : ι) ∂𝓒.μ, ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x)) = 0 x ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.μ ≠ 0hm:AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ⊢ ¬𝓒.μ {a | ¬ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a)) = 0 a} = 0 ae_iff ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.μ ≠ 0hm:AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ⊢ ¬𝓒.μ {a | ¬ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a)) = 0 a} = 0 ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.μ ≠ 0hm:AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ⊢ ¬𝓒.μ {a | ¬ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a)) = 0 a} = 0] ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.μ ≠ 0hm:AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ⊢ ¬𝓒.μ {a | ¬ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a)) = 0 a} = 0
simpa [ENNReal.ofReal_eq_zero, exp_pos] using h All goals completed! 🐙instance (T : Temperature) [NeZero 𝓒.μ] : NeZero (𝓒.μBolt T) := by ι:Typeι1:Typeinst✝²:MeasurableSpace ιinst✝¹:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝:NeZero 𝓒.μ⊢ NeZero (𝓒.μBolt T)
refine { out := ?_ } ι:Typeι1:Typeinst✝²:MeasurableSpace ιinst✝¹:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝:NeZero 𝓒.μ⊢ 𝓒.μBolt T ≠ 0
apply μBolt_ne_zero_of_μ_ne_zero ι:Typeι1:Typeinst✝²:MeasurableSpace ιinst✝¹:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝:NeZero 𝓒.μ⊢ 𝓒.μ ≠ 0
exact Ne.symm (NeZero.ne' 𝓒.μ) All goals completed! 🐙instance (T : Temperature) [IsFiniteMeasure (𝓒.μBolt T)] [IsFiniteMeasure (𝓒1.μBolt T)] :
IsFiniteMeasure ((𝓒 + 𝓒1).μBolt T) := by ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ IsFiniteMeasure ((𝓒 + 𝓒1).μBolt T)
simp only [μBolt_add] ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ IsFiniteMeasure ((𝓒.μBolt T).prod (𝓒1.μBolt T)); infer_instance All goals completed! 🐙instance (T : Temperature) [IsFiniteMeasure (𝓒.μBolt T)] (n : ℕ) :
IsFiniteMeasure ((nsmul n 𝓒).μBolt T) := by ι:Typeι1:Typeinst✝²:MeasurableSpace ιinst✝¹:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)n:ℕ⊢ IsFiniteMeasure ((nsmul n 𝓒).μBolt T)
simp [μBolt_nsmul] ι:Typeι1:Typeinst✝²:MeasurableSpace ιinst✝¹:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)n:ℕ⊢ IsFiniteMeasure (Measure.pi fun x => 𝓒.μBolt T); infer_instance All goals completed! 🐙The Mathematical Partition Function
lemma mathematicalPartitionFunction_eq_integral (T : Temperature) :
mathematicalPartitionFunction 𝓒 T = ∫ i, exp (- T.β * 𝓒.energy i) ∂𝓒.μ := by ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ 𝓒.mathematicalPartitionFunction T = ∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μ
rw [mathematicalPartitionFunction, ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ (𝓒.μBolt T).real Set.univ = ∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μ ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∫ (a : ι), (ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a))).toReal ∂𝓒.μ = ∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μhfm ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ AEMeasurable (fun x => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x))) 𝓒.μhf ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∀ᵐ (x : ι) ∂𝓒.μ, ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x)) < ⊤ measureReal_def, ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ((𝓒.μBolt T) Set.univ).toReal = ∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μ ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∫ (a : ι), (ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a))).toReal ∂𝓒.μ = ∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μhfm ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ AEMeasurable (fun x => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x))) 𝓒.μhf ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∀ᵐ (x : ι) ∂𝓒.μ, ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x)) < ⊤ μBolt, ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ((𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) Set.univ).toReal =
∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μ ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∫ (a : ι), (ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a))).toReal ∂𝓒.μ = ∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μhfm ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ AEMeasurable (fun x => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x))) 𝓒.μhf ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∀ᵐ (x : ι) ∂𝓒.μ, ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x)) < ⊤ withDensity_apply _ .univ, ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ (∫⁻ (a : ι) in Set.univ, ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a)) ∂𝓒.μ).toReal =
∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μ ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∫ (a : ι), (ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a))).toReal ∂𝓒.μ = ∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μhfm ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ AEMeasurable (fun x => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x))) 𝓒.μhf ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∀ᵐ (x : ι) ∂𝓒.μ, ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x)) < ⊤
setLIntegral_univ, ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ (∫⁻ (x : ι), ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x)) ∂𝓒.μ).toReal = ∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μ ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∫ (a : ι), (ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a))).toReal ∂𝓒.μ = ∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μhfm ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ AEMeasurable (fun x => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x))) 𝓒.μhf ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∀ᵐ (x : ι) ∂𝓒.μ, ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x)) < ⊤ ← integral_toReal ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∫ (a : ι), (ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a))).toReal ∂𝓒.μ = ∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μhfm ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ AEMeasurable (fun x => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x))) 𝓒.μhf ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∀ᵐ (x : ι) ∂𝓒.μ, ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x)) < ⊤ ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∫ (a : ι), (ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a))).toReal ∂𝓒.μ = ∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μhfm ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ AEMeasurable (fun x => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x))) 𝓒.μhf ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∀ᵐ (x : ι) ∂𝓒.μ, ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x)) < ⊤] ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∫ (a : ι), (ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a))).toReal ∂𝓒.μ = ∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μhfm ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ AEMeasurable (fun x => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x))) 𝓒.μhf ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∀ᵐ (x : ι) ∂𝓒.μ, ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x)) < ⊤
· ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∫ (a : ι), (ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy a))).toReal ∂𝓒.μ = ∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μ simp [ENNReal.toReal_ofReal, exp_nonneg] All goals completed! 🐙
· hfm ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ AEMeasurable (fun x => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x))) 𝓒.μ fun_prop All goals completed! 🐙
· hf ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ ∀ᵐ (x : ι) ∂𝓒.μ, ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x)) < ⊤ exact .of_forall fun i => ENNReal.ofReal_lt_top All goals completed! 🐙
lemma mathematicalPartitionFunction_add {T : Temperature} :
(𝓒 + 𝓒1).mathematicalPartitionFunction T =
𝓒.mathematicalPartitionFunction T * 𝓒1.mathematicalPartitionFunction T := by ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ (𝓒 + 𝓒1).mathematicalPartitionFunction T = 𝓒.mathematicalPartitionFunction T * 𝓒1.mathematicalPartitionFunction T
simp_rw [ ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ (𝓒 + 𝓒1).mathematicalPartitionFunction T = 𝓒.mathematicalPartitionFunction T * 𝓒1.mathematicalPartitionFunction TmathematicalPartitionFunction, ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ ((𝓒 + 𝓒1).μBolt T).real Set.univ = (𝓒.μBolt T).real Set.univ * (𝓒1.μBolt T).real Set.univ μBolt_add ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ ((𝓒.μBolt T).prod (𝓒1.μBolt T)).real Set.univ = (𝓒.μBolt T).real Set.univ * (𝓒1.μBolt T).real Set.univ]
rw [← measureReal_prod_prod, ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ ((𝓒.μBolt T).prod (𝓒1.μBolt T)).real Set.univ = ((𝓒.μBolt T).prod (𝓒1.μBolt T)).real (Set.univ ×ˢ Set.univ) All goals completed! 🐙 Set.univ_prod_univ ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperature⊢ ((𝓒.μBolt T).prod (𝓒1.μBolt T)).real Set.univ = ((𝓒.μBolt T).prod (𝓒1.μBolt T)).real Set.univ All goals completed! 🐙] All goals completed! 🐙@[simp]
lemma mathematicalPartitionFunction_congr (e : ι1 ≃ᵐ ι) (T : Temperature) :
(𝓒.congr e).mathematicalPartitionFunction T = 𝓒.mathematicalPartitionFunction T := by ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperature⊢ (𝓒.congr e).mathematicalPartitionFunction T = 𝓒.mathematicalPartitionFunction T
simp [mathematicalPartitionFunction, μBolt_congr, measureReal_def, MeasurableEquiv.map_apply] All goals completed! 🐙
The mathematicalPartitionFunction_nsmul function of n copies of a canonical ensemble.
lemma mathematicalPartitionFunction_nsmul (n : ℕ) (T : Temperature) :
(nsmul n 𝓒).mathematicalPartitionFunction T = (𝓒.mathematicalPartitionFunction T) ^ n := by ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕT:Temperature⊢ (nsmul n 𝓒).mathematicalPartitionFunction T = 𝓒.mathematicalPartitionFunction T ^ n
simp [mathematicalPartitionFunction, μBolt_nsmul, measureReal_def, Measure.pi_univ] All goals completed! 🐙lemma mathematicalPartitionFunction_nonneg (T : Temperature) :
0 ≤ 𝓒.mathematicalPartitionFunction T := measureReal_nonneg
lemma mathematicalPartitionFunction_eq_zero_iff (T : Temperature) [IsFiniteMeasure (𝓒.μBolt T)] :
mathematicalPartitionFunction 𝓒 T = 0 ↔ 𝓒.μ = 0 := by ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ 𝓒.mathematicalPartitionFunction T = 0 ↔ 𝓒.μ = 0
rw [mathematicalPartitionFunction, ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ (𝓒.μBolt T).real Set.univ = 0 ↔ 𝓒.μ = 0 ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ (𝓒.μBolt T) Set.univ = 0 ∨ (𝓒.μBolt T) Set.univ = ⊤ ↔ 𝓒.μ = 0 measureReal_def, ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ ((𝓒.μBolt T) Set.univ).toReal = 0 ↔ 𝓒.μ = 0 ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ (𝓒.μBolt T) Set.univ = 0 ∨ (𝓒.μBolt T) Set.univ = ⊤ ↔ 𝓒.μ = 0 ENNReal.toReal_eq_zero_iff ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ (𝓒.μBolt T) Set.univ = 0 ∨ (𝓒.μBolt T) Set.univ = ⊤ ↔ 𝓒.μ = 0 ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ (𝓒.μBolt T) Set.univ = 0 ∨ (𝓒.μBolt T) Set.univ = ⊤ ↔ 𝓒.μ = 0] ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ (𝓒.μBolt T) Set.univ = 0 ∨ (𝓒.μBolt T) Set.univ = ⊤ ↔ 𝓒.μ = 0
simp only [measure_ne_top, or_false] ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ (𝓒.μBolt T) Set.univ = 0 ↔ 𝓒.μ = 0
rw [μBolt, ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ (𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) Set.univ = 0 ↔ 𝓒.μ = 0 ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ 𝓒.μ ({x | ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x)) ≠ 0} ∩ Set.univ) = 0 ↔ 𝓒.μ = 0ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ MeasureTheory.withDensity_apply_eq_zero' ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ 𝓒.μ ({x | ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x)) ≠ 0} ∩ Set.univ) = 0 ↔ 𝓒.μ = 0ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ 𝓒.μ ({x | ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x)) ≠ 0} ∩ Set.univ) = 0 ↔ 𝓒.μ = 0ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ] ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ 𝓒.μ ({x | ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x)) ≠ 0} ∩ Set.univ) = 0 ↔ 𝓒.μ = 0ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ
· ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ 𝓒.μ ({x | ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy x)) ≠ 0} ∩ Set.univ) = 0 ↔ 𝓒.μ = 0 simp [ENNReal.ofReal_eq_zero, exp_pos] All goals completed! 🐙
· ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ AEMeasurable (fun i => ENNReal.ofReal (rexp (-↑T.β * 𝓒.energy i))) 𝓒.μ fun_prop All goals completed! 🐙lemma mathematicalPartitionFunction_comp_ofβ_apply (β : ℝ≥0) :
𝓒.mathematicalPartitionFunction (ofβ β) =
(𝓒.μ.withDensity (fun i => ENNReal.ofReal (exp (- β * 𝓒.energy i)))).real Set.univ := by ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιβ:ℝ≥0⊢ 𝓒.mathematicalPartitionFunction (ofβ β) =
(𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-↑β * 𝓒.energy i))).real Set.univ
simp only [mathematicalPartitionFunction, μBolt, β_ofβ, neg_mul] All goals completed! 🐙The partition function is strictly positive provided the underlying measure is non-zero and the Boltzmann measure is finite.
lemma mathematicalPartitionFunction_pos (T : Temperature)
[IsFiniteMeasure (𝓒.μBolt T)] [NeZero 𝓒.μ] :
0 < 𝓒.mathematicalPartitionFunction T := by ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μ⊢ 0 < 𝓒.mathematicalPartitionFunction T
simp [mathematicalPartitionFunction] All goals completed! 🐙The probability density
The probability measure
lemma probability_add {T : Temperature} (i : ι × ι1) :
(𝓒 + 𝓒1).probability T i = 𝓒.probability T i.1 * 𝓒1.probability T i.2 := by ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperaturei:ι × ι1⊢ (𝓒 + 𝓒1).probability T i = 𝓒.probability T i.1 * 𝓒1.probability T i.2
simp [probability, mathematicalPartitionFunction_add, mul_add, Real.exp_add, div_mul_div_comm] All goals completed! 🐙@[simp]
lemma probability_congr (e : ι1 ≃ᵐ ι) (T : Temperature) (i : ι1) :
(𝓒.congr e).probability T i = 𝓒.probability T (e i) := by ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperaturei:ι1⊢ (𝓒.congr e).probability T i = 𝓒.probability T (e i)
simp [probability] All goals completed! 🐙
lemma probability_nsmul (n : ℕ) (T : Temperature) (f : Fin n → ι) :
(nsmul n 𝓒).probability T f = ∏ i, 𝓒.probability T (f i) := by ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕT:Temperaturef:Fin n → ι⊢ (nsmul n 𝓒).probability T f = ∏ i, 𝓒.probability T (f i)
induction n with
| zero => zero ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperaturef:Fin 0 → ι⊢ (nsmul 0 𝓒).probability T f = ∏ i, 𝓒.probability T (f i) simp [probability, mathematicalPartitionFunction_nsmul] All goals completed! 🐙
| succ n ih => succ ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperaturen:ℕih:∀ (f : Fin n → ι), (nsmul n 𝓒).probability T f = ∏ i, 𝓒.probability T (f i)f:Fin (n + 1) → ι⊢ (nsmul (n + 1) 𝓒).probability T f = ∏ i, 𝓒.probability T (f i)
rw [nsmul_succ, succ ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperaturen:ℕih:∀ (f : Fin n → ι), (nsmul n 𝓒).probability T f = ∏ i, 𝓒.probability T (f i)f:Fin (n + 1) → ι⊢ ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).probability T f = ∏ i, 𝓒.probability T (f i) succ ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperaturen:ℕih:∀ (f : Fin n → ι), (nsmul n 𝓒).probability T f = ∏ i, 𝓒.probability T (f i)f:Fin (n + 1) → ι⊢ 𝓒.probability T ((MeasurableEquiv.piFinSuccAbove (fun x => ι) 0) f).1 *
(nsmul n 𝓒).probability T ((MeasurableEquiv.piFinSuccAbove (fun x => ι) 0) f).2 =
∏ i, 𝓒.probability T (f i) probability_congr, succ ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperaturen:ℕih:∀ (f : Fin n → ι), (nsmul n 𝓒).probability T f = ∏ i, 𝓒.probability T (f i)f:Fin (n + 1) → ι⊢ (𝓒 + nsmul n 𝓒).probability T ((MeasurableEquiv.piFinSuccAbove (fun x => ι) 0) f) = ∏ i, 𝓒.probability T (f i) succ ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperaturen:ℕih:∀ (f : Fin n → ι), (nsmul n 𝓒).probability T f = ∏ i, 𝓒.probability T (f i)f:Fin (n + 1) → ι⊢ 𝓒.probability T ((MeasurableEquiv.piFinSuccAbove (fun x => ι) 0) f).1 *
(nsmul n 𝓒).probability T ((MeasurableEquiv.piFinSuccAbove (fun x => ι) 0) f).2 =
∏ i, 𝓒.probability T (f i) probability_add succ ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperaturen:ℕih:∀ (f : Fin n → ι), (nsmul n 𝓒).probability T f = ∏ i, 𝓒.probability T (f i)f:Fin (n + 1) → ι⊢ 𝓒.probability T ((MeasurableEquiv.piFinSuccAbove (fun x => ι) 0) f).1 *
(nsmul n 𝓒).probability T ((MeasurableEquiv.piFinSuccAbove (fun x => ι) 0) f).2 =
∏ i, 𝓒.probability T (f i)succ ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperaturen:ℕih:∀ (f : Fin n → ι), (nsmul n 𝓒).probability T f = ∏ i, 𝓒.probability T (f i)f:Fin (n + 1) → ι⊢ 𝓒.probability T ((MeasurableEquiv.piFinSuccAbove (fun x => ι) 0) f).1 *
(nsmul n 𝓒).probability T ((MeasurableEquiv.piFinSuccAbove (fun x => ι) 0) f).2 =
∏ i, 𝓒.probability T (f i)]succ ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperaturen:ℕih:∀ (f : Fin n → ι), (nsmul n 𝓒).probability T f = ∏ i, 𝓒.probability T (f i)f:Fin (n + 1) → ι⊢ 𝓒.probability T ((MeasurableEquiv.piFinSuccAbove (fun x => ι) 0) f).1 *
(nsmul n 𝓒).probability T ((MeasurableEquiv.piFinSuccAbove (fun x => ι) 0) f).2 =
∏ i, 𝓒.probability T (f i)
simp only [MeasurableEquiv.piFinSuccAbove_apply, Fin.insertNthEquiv_zero,
Fin.consEquiv_symm_apply, ih] succ ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperaturen:ℕih:∀ (f : Fin n → ι), (nsmul n 𝓒).probability T f = ∏ i, 𝓒.probability T (f i)f:Fin (n + 1) → ι⊢ 𝓒.probability T (f 0) * ∏ i, 𝓒.probability T (Fin.tail f i) = ∏ i, 𝓒.probability T (f i)
exact (Fin.prod_univ_succAbove (fun i => 𝓒.probability T (f i)) 0).symm All goals completed! 🐙instance (T : Temperature) : SigmaFinite (𝓒.μProd T) :=
inferInstanceAs (SigmaFinite ((𝓒.μBolt T Set.univ)⁻¹ • 𝓒.μBolt T))instance (T : Temperature) [IsFiniteMeasure (𝓒.μBolt T)]
[NeZero 𝓒.μ] : IsProbabilityMeasure (𝓒.μProd T) := inferInstanceAs <|
IsProbabilityMeasure ((𝓒.μBolt T Set.univ)⁻¹ • 𝓒.μBolt T)instance {T} : IsFiniteMeasure (𝓒.μProd T) :=
inferInstanceAs (IsFiniteMeasure ((𝓒.μBolt T Set.univ)⁻¹ • 𝓒.μBolt T))
lemma μProd_add {T : Temperature} [IsFiniteMeasure (𝓒.μBolt T)]
[IsFiniteMeasure (𝓒1.μBolt T)] : (𝓒 + 𝓒1).μProd T = (𝓒.μProd T).prod (𝓒1.μProd T) := by ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (𝓒 + 𝓒1).μProd T = (𝓒.μProd T).prod (𝓒1.μProd T)
rw [μProd, ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒 + 𝓒1).μBolt T) Set.univ)⁻¹ • (𝓒 + 𝓒1).μBolt T = (𝓒.μProd T).prod (𝓒1.μProd T) ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ • (𝓒.μBolt T).prod (𝓒1.μBolt T) =
(((𝓒.μBolt T) Set.univ)⁻¹ * ((𝓒1.μBolt T) Set.univ)⁻¹) • (𝓒.μBolt T).prod (𝓒1.μBolt T) μProd, ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒 + 𝓒1).μBolt T) Set.univ)⁻¹ • (𝓒 + 𝓒1).μBolt T = (((𝓒.μBolt T) Set.univ)⁻¹ • 𝓒.μBolt T).prod (𝓒1.μProd T) ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ • (𝓒.μBolt T).prod (𝓒1.μBolt T) =
(((𝓒.μBolt T) Set.univ)⁻¹ * ((𝓒1.μBolt T) Set.univ)⁻¹) • (𝓒.μBolt T).prod (𝓒1.μBolt T) μProd, ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒 + 𝓒1).μBolt T) Set.univ)⁻¹ • (𝓒 + 𝓒1).μBolt T =
(((𝓒.μBolt T) Set.univ)⁻¹ • 𝓒.μBolt T).prod (((𝓒1.μBolt T) Set.univ)⁻¹ • 𝓒1.μBolt T) ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ • (𝓒.μBolt T).prod (𝓒1.μBolt T) =
(((𝓒.μBolt T) Set.univ)⁻¹ * ((𝓒1.μBolt T) Set.univ)⁻¹) • (𝓒.μBolt T).prod (𝓒1.μBolt T) μBolt_add, ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ • (𝓒.μBolt T).prod (𝓒1.μBolt T) =
(((𝓒.μBolt T) Set.univ)⁻¹ • 𝓒.μBolt T).prod (((𝓒1.μBolt T) Set.univ)⁻¹ • 𝓒1.μBolt T) ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ • (𝓒.μBolt T).prod (𝓒1.μBolt T) =
(((𝓒.μBolt T) Set.univ)⁻¹ * ((𝓒1.μBolt T) Set.univ)⁻¹) • (𝓒.μBolt T).prod (𝓒1.μBolt T) Measure.prod_smul_left, ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ • (𝓒.μBolt T).prod (𝓒1.μBolt T) =
((𝓒.μBolt T) Set.univ)⁻¹ • (𝓒.μBolt T).prod (((𝓒1.μBolt T) Set.univ)⁻¹ • 𝓒1.μBolt T) ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ • (𝓒.μBolt T).prod (𝓒1.μBolt T) =
(((𝓒.μBolt T) Set.univ)⁻¹ * ((𝓒1.μBolt T) Set.univ)⁻¹) • (𝓒.μBolt T).prod (𝓒1.μBolt T) Measure.prod_smul_right, ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ • (𝓒.μBolt T).prod (𝓒1.μBolt T) =
((𝓒.μBolt T) Set.univ)⁻¹ • ((𝓒1.μBolt T) Set.univ)⁻¹ • (𝓒.μBolt T).prod (𝓒1.μBolt T) ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ • (𝓒.μBolt T).prod (𝓒1.μBolt T) =
(((𝓒.μBolt T) Set.univ)⁻¹ * ((𝓒1.μBolt T) Set.univ)⁻¹) • (𝓒.μBolt T).prod (𝓒1.μBolt T) smul_smul ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ • (𝓒.μBolt T).prod (𝓒1.μBolt T) =
(((𝓒.μBolt T) Set.univ)⁻¹ * ((𝓒1.μBolt T) Set.univ)⁻¹) • (𝓒.μBolt T).prod (𝓒1.μBolt T) ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ • (𝓒.μBolt T).prod (𝓒1.μBolt T) =
(((𝓒.μBolt T) Set.univ)⁻¹ * ((𝓒1.μBolt T) Set.univ)⁻¹) • (𝓒.μBolt T).prod (𝓒1.μBolt T)] ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ • (𝓒.μBolt T).prod (𝓒1.μBolt T) =
(((𝓒.μBolt T) Set.univ)⁻¹ * ((𝓒1.μBolt T) Set.univ)⁻¹) • (𝓒.μBolt T).prod (𝓒1.μBolt T)
congr 1 e_a ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ = ((𝓒.μBolt T) Set.univ)⁻¹ * ((𝓒1.μBolt T) Set.univ)⁻¹
rw [← ENNReal.mul_inv (.inr (measure_ne_top _ _)) (.inl (measure_ne_top _ _)), e_a ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ = ((𝓒.μBolt T) Set.univ * (𝓒1.μBolt T) Set.univ)⁻¹ All goals completed! 🐙
← Measure.prod_prod, e_a ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ = (((𝓒.μBolt T).prod (𝓒1.μBolt T)) (Set.univ ×ˢ Set.univ))⁻¹ All goals completed! 🐙 Set.univ_prod_univ e_a ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)⊢ (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ = (((𝓒.μBolt T).prod (𝓒1.μBolt T)) Set.univ)⁻¹ All goals completed! 🐙] All goals completed! 🐙
lemma μProd_congr (e : ι1 ≃ᵐ ι) (T : Temperature) :
(𝓒.congr e).μProd T = (𝓒.μProd T).map e.symm := by ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperature⊢ (𝓒.congr e).μProd T = Measure.map (⇑e.symm) (𝓒.μProd T)
rw [μProd, ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperature⊢ (((𝓒.congr e).μBolt T) Set.univ)⁻¹ • (𝓒.congr e).μBolt T = Measure.map (⇑e.symm) (𝓒.μProd T) All goals completed! 🐙 μProd, ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperature⊢ (((𝓒.congr e).μBolt T) Set.univ)⁻¹ • (𝓒.congr e).μBolt T = Measure.map (⇑e.symm) (((𝓒.μBolt T) Set.univ)⁻¹ • 𝓒.μBolt T) All goals completed! 🐙 μBolt_congr, ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperature⊢ ((Measure.map (⇑e.symm) (𝓒.μBolt T)) Set.univ)⁻¹ • Measure.map (⇑e.symm) (𝓒.μBolt T) =
Measure.map (⇑e.symm) (((𝓒.μBolt T) Set.univ)⁻¹ • 𝓒.μBolt T) All goals completed! 🐙 Measure.map_smul, ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperature⊢ ((Measure.map (⇑e.symm) (𝓒.μBolt T)) Set.univ)⁻¹ • Measure.map (⇑e.symm) (𝓒.μBolt T) =
((𝓒.μBolt T) Set.univ)⁻¹ • Measure.map (⇑e.symm) (𝓒.μBolt T) All goals completed! 🐙 MeasurableEquiv.map_apply, ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperature⊢ ((𝓒.μBolt T) (⇑e.symm ⁻¹' Set.univ))⁻¹ • Measure.map (⇑e.symm) (𝓒.μBolt T) =
((𝓒.μBolt T) Set.univ)⁻¹ • Measure.map (⇑e.symm) (𝓒.μBolt T) All goals completed! 🐙 Set.preimage_univ ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperature⊢ ((𝓒.μBolt T) Set.univ)⁻¹ • Measure.map (⇑e.symm) (𝓒.μBolt T) =
((𝓒.μBolt T) Set.univ)⁻¹ • Measure.map (⇑e.symm) (𝓒.μBolt T) All goals completed! 🐙] All goals completed! 🐙
lemma μProd_nsmul (n : ℕ) (T : Temperature) [IsFiniteMeasure (𝓒.μBolt T)] :
(nsmul n 𝓒).μProd T = MeasureTheory.Measure.pi fun _ => 𝓒.μProd T := by ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ (nsmul n 𝓒).μProd T = Measure.pi fun x => 𝓒.μProd T
induction n with
| zero => zero ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ (nsmul 0 𝓒).μProd T = Measure.pi fun x => 𝓒.μProd T
simp [nsmul, μProd, μBolt] zero ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)⊢ (Measure.pi fun x => 𝓒.μ) =
Measure.pi fun x =>
(∫⁻ (i : ι), ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i))) ∂𝓒.μ)⁻¹ •
𝓒.μ.withDensity fun i => ENNReal.ofReal (rexp (-(↑T.β * 𝓒.energy i)))
exact congrArg Measure.pi (Subsingleton.elim _ _) All goals completed! 🐙
| succ n ih => succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)n:ℕih:(nsmul n 𝓒).μProd T = Measure.pi fun x => 𝓒.μProd T⊢ (nsmul (n + 1) 𝓒).μProd T = Measure.pi fun x => 𝓒.μProd T
rw [nsmul_succ, succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)n:ℕih:(nsmul n 𝓒).μProd T = Measure.pi fun x => 𝓒.μProd T⊢ ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μProd T = Measure.pi fun x => 𝓒.μProd T succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)n:ℕih:(nsmul n 𝓒).μProd T = Measure.pi fun x => 𝓒.μProd T⊢ Measure.map (⇑(MeasurableEquiv.piFinSuccAbove (fun x => ι) 0).symm) ((𝓒.μProd T).prod (Measure.pi fun x => 𝓒.μProd T)) =
Measure.pi fun x => 𝓒.μProd T μProd_congr, succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)n:ℕih:(nsmul n 𝓒).μProd T = Measure.pi fun x => 𝓒.μProd T⊢ Measure.map (⇑(MeasurableEquiv.piFinSuccAbove (fun x => ι) 0).symm) ((𝓒 + nsmul n 𝓒).μProd T) =
Measure.pi fun x => 𝓒.μProd T succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)n:ℕih:(nsmul n 𝓒).μProd T = Measure.pi fun x => 𝓒.μProd T⊢ Measure.map (⇑(MeasurableEquiv.piFinSuccAbove (fun x => ι) 0).symm) ((𝓒.μProd T).prod (Measure.pi fun x => 𝓒.μProd T)) =
Measure.pi fun x => 𝓒.μProd T μProd_add, succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)n:ℕih:(nsmul n 𝓒).μProd T = Measure.pi fun x => 𝓒.μProd T⊢ Measure.map (⇑(MeasurableEquiv.piFinSuccAbove (fun x => ι) 0).symm) ((𝓒.μProd T).prod ((nsmul n 𝓒).μProd T)) =
Measure.pi fun x => 𝓒.μProd Tsucc ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)n:ℕih:(nsmul n 𝓒).μProd T = Measure.pi fun x => 𝓒.μProd T⊢ Measure.map (⇑(MeasurableEquiv.piFinSuccAbove (fun x => ι) 0).symm) ((𝓒.μProd T).prod (Measure.pi fun x => 𝓒.μProd T)) =
Measure.pi fun x => 𝓒.μProd T ih succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)n:ℕih:(nsmul n 𝓒).μProd T = Measure.pi fun x => 𝓒.μProd T⊢ Measure.map (⇑(MeasurableEquiv.piFinSuccAbove (fun x => ι) 0).symm) ((𝓒.μProd T).prod (Measure.pi fun x => 𝓒.μProd T)) =
Measure.pi fun x => 𝓒.μProd Tsucc ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)n:ℕih:(nsmul n 𝓒).μProd T = Measure.pi fun x => 𝓒.μProd T⊢ Measure.map (⇑(MeasurableEquiv.piFinSuccAbove (fun x => ι) 0).symm) ((𝓒.μProd T).prod (Measure.pi fun x => 𝓒.μProd T)) =
Measure.pi fun x => 𝓒.μProd T]succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)n:ℕih:(nsmul n 𝓒).μProd T = Measure.pi fun x => 𝓒.μProd T⊢ Measure.map (⇑(MeasurableEquiv.piFinSuccAbove (fun x => ι) 0).symm) ((𝓒.μProd T).prod (Measure.pi fun x => 𝓒.μProd T)) =
Measure.pi fun x => 𝓒.μProd T
exact ((measurePreserving_piFinSuccAbove (fun _ => 𝓒.μProd T) 0).symm _).map_eq All goals completed! 🐙Integrability of energy
@[fun_prop]
lemma integrable_energy_add (T : Temperature) [IsFiniteMeasure (𝓒.μBolt T)]
[IsFiniteMeasure (𝓒1.μBolt T)]
(h : Integrable 𝓒.energy (𝓒.μProd T)) (h1 : Integrable 𝓒1.energy (𝓒1.μProd T)) :
Integrable (𝓒 + 𝓒1).energy ((𝓒 + 𝓒1).μProd T) := by ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)h:Integrable 𝓒.energy (𝓒.μProd T)h1:Integrable 𝓒1.energy (𝓒1.μProd T)⊢ Integrable (𝓒 + 𝓒1).energy ((𝓒 + 𝓒1).μProd T)
rw [μProd_add ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)h:Integrable 𝓒.energy (𝓒.μProd T)h1:Integrable 𝓒1.energy (𝓒1.μProd T)⊢ Integrable (𝓒 + 𝓒1).energy ((𝓒.μProd T).prod (𝓒1.μProd T)) ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)h:Integrable 𝓒.energy (𝓒.μProd T)h1:Integrable 𝓒1.energy (𝓒1.μProd T)⊢ Integrable (𝓒 + 𝓒1).energy ((𝓒.μProd T).prod (𝓒1.μProd T))] ι:Typeι1:Typeinst✝³:MeasurableSpace ιinst✝²:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:IsFiniteMeasure (𝓒1.μBolt T)h:Integrable 𝓒.energy (𝓒.μProd T)h1:Integrable 𝓒1.energy (𝓒1.μProd T)⊢ Integrable (𝓒 + 𝓒1).energy ((𝓒.μProd T).prod (𝓒1.μProd T))
exact (h.comp_fst _).fun_add (h1.comp_snd _) All goals completed! 🐙
@[fun_prop]
lemma integrable_energy_congr (T : Temperature) (e : ι1 ≃ᵐ ι)
(h : Integrable 𝓒.energy (𝓒.μProd T)) :
Integrable (𝓒.congr e).energy ((𝓒.congr e).μProd T) := by ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιT:Temperaturee:ι1 ≃ᵐ ιh:Integrable 𝓒.energy (𝓒.μProd T)⊢ Integrable (𝓒.congr e).energy ((𝓒.congr e).μProd T)
rw [μProd_congr ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιT:Temperaturee:ι1 ≃ᵐ ιh:Integrable 𝓒.energy (𝓒.μProd T)⊢ Integrable (𝓒.congr e).energy (Measure.map (⇑e.symm) (𝓒.μProd T)) ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιT:Temperaturee:ι1 ≃ᵐ ιh:Integrable 𝓒.energy (𝓒.μProd T)⊢ Integrable (𝓒.congr e).energy (Measure.map (⇑e.symm) (𝓒.μProd T))] ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιT:Temperaturee:ι1 ≃ᵐ ιh:Integrable 𝓒.energy (𝓒.μProd T)⊢ Integrable (𝓒.congr e).energy (Measure.map (⇑e.symm) (𝓒.μProd T))
exact (integrable_map_equiv e.symm _).mpr (by ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιT:Temperaturee:ι1 ≃ᵐ ιh:Integrable 𝓒.energy (𝓒.μProd T)⊢ Integrable ((𝓒.congr e).energy ∘ ⇑e.symm) (𝓒.μProd T) simpa only [congr_energy_comp_symmm] using h All goals completed! 🐙)
@[fun_prop]
lemma integrable_energy_nsmul (n : ℕ) (T : Temperature)
[IsFiniteMeasure (𝓒.μBolt T)]
(h : Integrable 𝓒.energy (𝓒.μProd T)) :
Integrable (nsmul n 𝓒).energy ((nsmul n 𝓒).μProd T) := by ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)h:Integrable 𝓒.energy (𝓒.μProd T)⊢ Integrable (nsmul n 𝓒).energy ((nsmul n 𝓒).μProd T)
induction n with
| zero => zero ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)h:Integrable 𝓒.energy (𝓒.μProd T)⊢ Integrable (nsmul 0 𝓒).energy ((nsmul 0 𝓒).μProd T) simp [nsmul] All goals completed! 🐙
| succ n ih => succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)h:Integrable 𝓒.energy (𝓒.μProd T)n:ℕih:Integrable (nsmul n 𝓒).energy ((nsmul n 𝓒).μProd T)⊢ Integrable (nsmul (n + 1) 𝓒).energy ((nsmul (n + 1) 𝓒).μProd T)
rw [nsmul_succ succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)h:Integrable 𝓒.energy (𝓒.μProd T)n:ℕih:Integrable (nsmul n 𝓒).energy ((nsmul n 𝓒).μProd T)⊢ Integrable ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).energy
(((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μProd T) succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)h:Integrable 𝓒.energy (𝓒.μProd T)n:ℕih:Integrable (nsmul n 𝓒).energy ((nsmul n 𝓒).μProd T)⊢ Integrable ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).energy
(((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μProd T)] succ ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝:IsFiniteMeasure (𝓒.μBolt T)h:Integrable 𝓒.energy (𝓒.μProd T)n:ℕih:Integrable (nsmul n 𝓒).energy ((nsmul n 𝓒).μProd T)⊢ Integrable ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).energy
(((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).μProd T)
exact integrable_energy_congr _ _ _ (integrable_energy_add _ _ _ h ih) All goals completed! 🐙The mean energy
lemma meanEnergy_add {T : Temperature}
[IsFiniteMeasure (𝓒1.μBolt T)] [IsFiniteMeasure (𝓒.μBolt T)]
[NeZero 𝓒.μ] [NeZero 𝓒1.μ]
(h1 : Integrable 𝓒.energy (𝓒.μProd T))
(h2 : Integrable 𝓒1.energy (𝓒1.μProd T)) :
(𝓒 + 𝓒1).meanEnergy T = 𝓒.meanEnergy T + 𝓒1.meanEnergy T := by ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒1.μBolt T)inst✝²:IsFiniteMeasure (𝓒.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh1:Integrable 𝓒.energy (𝓒.μProd T)h2:Integrable 𝓒1.energy (𝓒1.μProd T)⊢ (𝓒 + 𝓒1).meanEnergy T = 𝓒.meanEnergy T + 𝓒1.meanEnergy T
have hI := integrable_energy_add 𝓒 𝓒1 T h1 h2 ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒1.μBolt T)inst✝²:IsFiniteMeasure (𝓒.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh1:Integrable 𝓒.energy (𝓒.μProd T)h2:Integrable 𝓒1.energy (𝓒1.μProd T)hI:Integrable (𝓒 + 𝓒1).energy ((𝓒 + 𝓒1).μProd T)⊢ (𝓒 + 𝓒1).meanEnergy T = 𝓒.meanEnergy T + 𝓒1.meanEnergy T
rw [μProd_add ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒1.μBolt T)inst✝²:IsFiniteMeasure (𝓒.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh1:Integrable 𝓒.energy (𝓒.μProd T)h2:Integrable 𝓒1.energy (𝓒1.μProd T)hI:Integrable (𝓒 + 𝓒1).energy ((𝓒.μProd T).prod (𝓒1.μProd T))⊢ (𝓒 + 𝓒1).meanEnergy T = 𝓒.meanEnergy T + 𝓒1.meanEnergy T ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒1.μBolt T)inst✝²:IsFiniteMeasure (𝓒.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh1:Integrable 𝓒.energy (𝓒.μProd T)h2:Integrable 𝓒1.energy (𝓒1.μProd T)hI:Integrable (𝓒 + 𝓒1).energy ((𝓒.μProd T).prod (𝓒1.μProd T))⊢ (𝓒 + 𝓒1).meanEnergy T = 𝓒.meanEnergy T + 𝓒1.meanEnergy T] at hI ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒1.μBolt T)inst✝²:IsFiniteMeasure (𝓒.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh1:Integrable 𝓒.energy (𝓒.μProd T)h2:Integrable 𝓒1.energy (𝓒1.μProd T)hI:Integrable (𝓒 + 𝓒1).energy ((𝓒.μProd T).prod (𝓒1.μProd T))⊢ (𝓒 + 𝓒1).meanEnergy T = 𝓒.meanEnergy T + 𝓒1.meanEnergy T
rw [meanEnergy, ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒1.μBolt T)inst✝²:IsFiniteMeasure (𝓒.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh1:Integrable 𝓒.energy (𝓒.μProd T)h2:Integrable 𝓒1.energy (𝓒1.μProd T)hI:Integrable (𝓒 + 𝓒1).energy ((𝓒.μProd T).prod (𝓒1.μProd T))⊢ ∫ (i : ι × ι1), (𝓒 + 𝓒1).energy i ∂(𝓒 + 𝓒1).μProd T = 𝓒.meanEnergy T + 𝓒1.meanEnergy T ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒1.μBolt T)inst✝²:IsFiniteMeasure (𝓒.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh1:Integrable 𝓒.energy (𝓒.μProd T)h2:Integrable 𝓒1.energy (𝓒1.μProd T)hI:Integrable (𝓒 + 𝓒1).energy ((𝓒.μProd T).prod (𝓒1.μProd T))⊢ ∫ (x : ι), ∫ (y : ι1), (𝓒 + 𝓒1).energy (x, y) ∂𝓒1.μProd T ∂𝓒.μProd T = 𝓒.meanEnergy T + 𝓒1.meanEnergy T μProd_add, ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒1.μBolt T)inst✝²:IsFiniteMeasure (𝓒.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh1:Integrable 𝓒.energy (𝓒.μProd T)h2:Integrable 𝓒1.energy (𝓒1.μProd T)hI:Integrable (𝓒 + 𝓒1).energy ((𝓒.μProd T).prod (𝓒1.μProd T))⊢ ∫ (i : ι × ι1), (𝓒 + 𝓒1).energy i ∂(𝓒.μProd T).prod (𝓒1.μProd T) = 𝓒.meanEnergy T + 𝓒1.meanEnergy T ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒1.μBolt T)inst✝²:IsFiniteMeasure (𝓒.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh1:Integrable 𝓒.energy (𝓒.μProd T)h2:Integrable 𝓒1.energy (𝓒1.μProd T)hI:Integrable (𝓒 + 𝓒1).energy ((𝓒.μProd T).prod (𝓒1.μProd T))⊢ ∫ (x : ι), ∫ (y : ι1), (𝓒 + 𝓒1).energy (x, y) ∂𝓒1.μProd T ∂𝓒.μProd T = 𝓒.meanEnergy T + 𝓒1.meanEnergy T integral_prod _ hI ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒1.μBolt T)inst✝²:IsFiniteMeasure (𝓒.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh1:Integrable 𝓒.energy (𝓒.μProd T)h2:Integrable 𝓒1.energy (𝓒1.μProd T)hI:Integrable (𝓒 + 𝓒1).energy ((𝓒.μProd T).prod (𝓒1.μProd T))⊢ ∫ (x : ι), ∫ (y : ι1), (𝓒 + 𝓒1).energy (x, y) ∂𝓒1.μProd T ∂𝓒.μProd T = 𝓒.meanEnergy T + 𝓒1.meanEnergy T ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒1.μBolt T)inst✝²:IsFiniteMeasure (𝓒.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh1:Integrable 𝓒.energy (𝓒.μProd T)h2:Integrable 𝓒1.energy (𝓒1.μProd T)hI:Integrable (𝓒 + 𝓒1).energy ((𝓒.μProd T).prod (𝓒1.μProd T))⊢ ∫ (x : ι), ∫ (y : ι1), (𝓒 + 𝓒1).energy (x, y) ∂𝓒1.μProd T ∂𝓒.μProd T = 𝓒.meanEnergy T + 𝓒1.meanEnergy T] ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒1.μBolt T)inst✝²:IsFiniteMeasure (𝓒.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh1:Integrable 𝓒.energy (𝓒.μProd T)h2:Integrable 𝓒1.energy (𝓒1.μProd T)hI:Integrable (𝓒 + 𝓒1).energy ((𝓒.μProd T).prod (𝓒1.μProd T))⊢ ∫ (x : ι), ∫ (y : ι1), (𝓒 + 𝓒1).energy (x, y) ∂𝓒1.μProd T ∂𝓒.μProd T = 𝓒.meanEnergy T + 𝓒1.meanEnergy T
simp [integral_add (integrable_const _) h2, integral_add h1 (integrable_const _), meanEnergy] All goals completed! 🐙lemma meanEnergy_congr (e : ι1 ≃ᵐ ι) (T : Temperature) :
(𝓒.congr e).meanEnergy T = 𝓒.meanEnergy T := by ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperature⊢ (𝓒.congr e).meanEnergy T = 𝓒.meanEnergy T
simp only [meanEnergy, μProd_congr] ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperature⊢ ∫ (i : ι1), (𝓒.congr e).energy i ∂Measure.map (⇑e.symm) (𝓒.μProd T) = ∫ (i : ι), 𝓒.energy i ∂𝓒.μProd T
exact MeasurePreserving.integral_comp' ⟨e.measurable, e.map_map_symm⟩ 𝓒.energy All goals completed! 🐙
lemma meanEnergy_nsmul (n : ℕ) (T : Temperature)
[IsFiniteMeasure (𝓒.μBolt T)] [NeZero 𝓒.μ]
(h1 : Integrable 𝓒.energy (𝓒.μProd T)) :
(nsmul n 𝓒).meanEnergy T = n * 𝓒.meanEnergy T := by ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μh1:Integrable 𝓒.energy (𝓒.μProd T)⊢ (nsmul n 𝓒).meanEnergy T = ↑n * 𝓒.meanEnergy T
induction n with
| zero => zero ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μh1:Integrable 𝓒.energy (𝓒.μProd T)⊢ (nsmul 0 𝓒).meanEnergy T = ↑0 * 𝓒.meanEnergy T simp [nsmul, meanEnergy] All goals completed! 🐙
| succ n ih => succ ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μh1:Integrable 𝓒.energy (𝓒.μProd T)n:ℕih:(nsmul n 𝓒).meanEnergy T = ↑n * 𝓒.meanEnergy T⊢ (nsmul (n + 1) 𝓒).meanEnergy T = ↑(n + 1) * 𝓒.meanEnergy T
rw [nsmul_succ, succ ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μh1:Integrable 𝓒.energy (𝓒.μProd T)n:ℕih:(nsmul n 𝓒).meanEnergy T = ↑n * 𝓒.meanEnergy T⊢ ((𝓒 + nsmul n 𝓒).congr (MeasurableEquiv.piFinSuccAbove (fun x => ι) 0)).meanEnergy T = ↑(n + 1) * 𝓒.meanEnergy T succ ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μh1:Integrable 𝓒.energy (𝓒.μProd T)n:ℕih:(nsmul n 𝓒).meanEnergy T = ↑n * 𝓒.meanEnergy T⊢ 𝓒.meanEnergy T + ↑n * 𝓒.meanEnergy T = ↑(n + 1) * 𝓒.meanEnergy T meanEnergy_congr, succ ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μh1:Integrable 𝓒.energy (𝓒.μProd T)n:ℕih:(nsmul n 𝓒).meanEnergy T = ↑n * 𝓒.meanEnergy T⊢ (𝓒 + nsmul n 𝓒).meanEnergy T = ↑(n + 1) * 𝓒.meanEnergy T succ ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μh1:Integrable 𝓒.energy (𝓒.μProd T)n:ℕih:(nsmul n 𝓒).meanEnergy T = ↑n * 𝓒.meanEnergy T⊢ 𝓒.meanEnergy T + ↑n * 𝓒.meanEnergy T = ↑(n + 1) * 𝓒.meanEnergy T
meanEnergy_add _ _ h1 (integrable_energy_nsmul 𝓒 n T h1), succ ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μh1:Integrable 𝓒.energy (𝓒.μProd T)n:ℕih:(nsmul n 𝓒).meanEnergy T = ↑n * 𝓒.meanEnergy T⊢ 𝓒.meanEnergy T + (nsmul n 𝓒).meanEnergy T = ↑(n + 1) * 𝓒.meanEnergy Tsucc ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μh1:Integrable 𝓒.energy (𝓒.μProd T)n:ℕih:(nsmul n 𝓒).meanEnergy T = ↑n * 𝓒.meanEnergy T⊢ 𝓒.meanEnergy T + ↑n * 𝓒.meanEnergy T = ↑(n + 1) * 𝓒.meanEnergy T ih succ ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μh1:Integrable 𝓒.energy (𝓒.μProd T)n:ℕih:(nsmul n 𝓒).meanEnergy T = ↑n * 𝓒.meanEnergy T⊢ 𝓒.meanEnergy T + ↑n * 𝓒.meanEnergy T = ↑(n + 1) * 𝓒.meanEnergy Tsucc ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μh1:Integrable 𝓒.energy (𝓒.μProd T)n:ℕih:(nsmul n 𝓒).meanEnergy T = ↑n * 𝓒.meanEnergy T⊢ 𝓒.meanEnergy T + ↑n * 𝓒.meanEnergy T = ↑(n + 1) * 𝓒.meanEnergy T]succ ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μh1:Integrable 𝓒.energy (𝓒.μProd T)n:ℕih:(nsmul n 𝓒).meanEnergy T = ↑n * 𝓒.meanEnergy T⊢ 𝓒.meanEnergy T + ↑n * 𝓒.meanEnergy T = ↑(n + 1) * 𝓒.meanEnergy T
push_cast succ ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μh1:Integrable 𝓒.energy (𝓒.μProd T)n:ℕih:(nsmul n 𝓒).meanEnergy T = ↑n * 𝓒.meanEnergy T⊢ 𝓒.meanEnergy T + ↑n * 𝓒.meanEnergy T = (↑n + 1) * 𝓒.meanEnergy T
ring All goals completed! 🐙The differential entropy
Probabilities are non-negative, assuming a positive partition function.
-- `unusedArguments` (newly flagged under v4.32.0): the finiteness / non-zero
-- instances are part of the intended interface but not needed by this proof.
@[nolint unusedArguments]
lemma probability_nonneg
(T : Temperature) [IsFiniteMeasure (𝓒.μBolt T)] [NeZero 𝓒.μ] (i : ι) :
0 ≤ 𝓒.probability T i :=
div_nonneg (exp_nonneg _) (𝓒.mathematicalPartitionFunction_nonneg T)Probabilities are strictly positive.
lemma probability_pos
(T : Temperature) [IsFiniteMeasure (𝓒.μBolt T)] [NeZero 𝓒.μ] (i : ι) :
0 < 𝓒.probability T i :=
div_pos (exp_pos _) (𝓒.mathematicalPartitionFunction_pos T)
General entropy non-negativity under a pointwise upper bound probability ≤ 1.
This assumption holds automatically in the finite/counting case (since sums bound each term),
but can fail in general (continuous) settings; hence we separate it as a hypothesis.
Finite case: see CanonicalEnsemble.entropy_nonneg in Finite.
lemma differentialEntropy_nonneg_of_prob_le_one
(T : Temperature) [IsFiniteMeasure (𝓒.μBolt T)] [NeZero 𝓒.μ]
(hInt : Integrable (fun i => Real.log (𝓒.probability T i)) (𝓒.μProd T))
(hP_le_one : ∀ i, 𝓒.probability T i ≤ 1) :
0 ≤ 𝓒.differentialEntropy T := by ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μhInt:Integrable (fun i => log (𝓒.probability T i)) (𝓒.μProd T)hP_le_one:∀ (i : ι), 𝓒.probability T i ≤ 1⊢ 0 ≤ 𝓒.differentialEntropy T
rw [differentialEntropy ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μhInt:Integrable (fun i => log (𝓒.probability T i)) (𝓒.μProd T)hP_le_one:∀ (i : ι), 𝓒.probability T i ≤ 1⊢ 0 ≤ -kB * ∫ (i : ι), log (𝓒.probability T i) ∂𝓒.μProd T ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μhInt:Integrable (fun i => log (𝓒.probability T i)) (𝓒.μProd T)hP_le_one:∀ (i : ι), 𝓒.probability T i ≤ 1⊢ 0 ≤ -kB * ∫ (i : ι), log (𝓒.probability T i) ∂𝓒.μProd T] ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μhInt:Integrable (fun i => log (𝓒.probability T i)) (𝓒.μProd T)hP_le_one:∀ (i : ι), 𝓒.probability T i ≤ 1⊢ 0 ≤ -kB * ∫ (i : ι), log (𝓒.probability T i) ∂𝓒.μProd T
refine mul_nonneg_of_nonpos_of_nonpos (neg_nonpos.mpr kB_nonneg) ?_ ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μhInt:Integrable (fun i => log (𝓒.probability T i)) (𝓒.μProd T)hP_le_one:∀ (i : ι), 𝓒.probability T i ≤ 1⊢ ∫ (i : ι), log (𝓒.probability T i) ∂𝓒.μProd T ≤ 0
simpa using integral_mono_ae hInt (integrable_const 0) (Filter.Eventually.of_forall fun i =>
Real.log_nonpos (𝓒.probability_nonneg T i) (hP_le_one i)) All goals completed! 🐙Thermodynamic Quantities
These are the dimensionless physical quantities derived from the mathematical definitions
by incorporating the phase space volume 𝓒.phaseSpaceUnit ^ 𝓒.dof.
@[simp]
lemma partitionFunction_def (𝓒 : CanonicalEnsemble ι) (T : Temperature) :
𝓒.partitionFunction T =
𝓒.mathematicalPartitionFunction T / (𝓒.phaseSpaceunit ^ 𝓒.dof) := rfllemma partitionFunction_pos
(𝓒 : CanonicalEnsemble ι) (T : Temperature)
[IsFiniteMeasure (𝓒.μBolt T)] [NeZero 𝓒.μ] :
0 < 𝓒.partitionFunction T :=
div_pos (𝓒.mathematicalPartitionFunction_pos T) (pow_pos 𝓒.hPos _)lemma partitionFunction_congr
(𝓒 : CanonicalEnsemble ι) (e : ι1 ≃ᵐ ι) (T : Temperature) :
(𝓒.congr e).partitionFunction T = 𝓒.partitionFunction T := by ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperature⊢ (𝓒.congr e).partitionFunction T = 𝓒.partitionFunction T
simp [partitionFunction] All goals completed! 🐙lemma partitionFunction_add
(𝓒 : CanonicalEnsemble ι) (𝓒1 : CanonicalEnsemble ι1)
(T : Temperature)
(h : 𝓒.phaseSpaceunit = 𝓒1.phaseSpaceunit) :
(𝓒 + 𝓒1).partitionFunction T
= 𝓒.partitionFunction T * 𝓒1.partitionFunction T := by ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureh:𝓒.phaseSpaceunit = 𝓒1.phaseSpaceunit⊢ (𝓒 + 𝓒1).partitionFunction T = 𝓒.partitionFunction T * 𝓒1.partitionFunction T
simp [partitionFunction, mathematicalPartitionFunction_add, h, pow_add, div_mul_div_comm] All goals completed! 🐙lemma partitionFunction_nsmul
(𝓒 : CanonicalEnsemble ι) (n : ℕ) (T : Temperature) :
(nsmul n 𝓒).partitionFunction T
= (𝓒.partitionFunction T) ^ n := by ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕT:Temperature⊢ (nsmul n 𝓒).partitionFunction T = 𝓒.partitionFunction T ^ n
simp [partitionFunction, mathematicalPartitionFunction_nsmul, pow_mul', div_pow] All goals completed! 🐙lemma partitionFunction_dof_zero
(𝓒 : CanonicalEnsemble ι) (T : Temperature) (h : 𝓒.dof = 0) :
𝓒.partitionFunction T = 𝓒.mathematicalPartitionFunction T := by ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.dof = 0⊢ 𝓒.partitionFunction T = 𝓒.mathematicalPartitionFunction T
simp [partitionFunction, h] All goals completed! 🐙lemma partitionFunction_phase_space_unit_one
(𝓒 : CanonicalEnsemble ι) (T : Temperature) (h : 𝓒.phaseSpaceunit = 1) :
𝓒.partitionFunction T = 𝓒.mathematicalPartitionFunction T := by ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.phaseSpaceunit = 1⊢ 𝓒.partitionFunction T = 𝓒.mathematicalPartitionFunction T
simp [partitionFunction, h] All goals completed! 🐙
lemma log_partitionFunction
(𝓒 : CanonicalEnsemble ι) (T : Temperature)
[IsFiniteMeasure (𝓒.μBolt T)] [NeZero 𝓒.μ] :
Real.log (𝓒.partitionFunction T)
= Real.log (𝓒.mathematicalPartitionFunction T)
- (𝓒.dof : ℝ) * Real.log 𝓒.phaseSpaceunit := by ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μ⊢ log (𝓒.partitionFunction T) = log (𝓒.mathematicalPartitionFunction T) - ↑𝓒.dof * log 𝓒.phaseSpaceunit
rw [partitionFunction, ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μ⊢ log (𝓒.mathematicalPartitionFunction T / 𝓒.phaseSpaceunit ^ 𝓒.dof) =
log (𝓒.mathematicalPartitionFunction T) - ↑𝓒.dof * log 𝓒.phaseSpaceunit All goals completed! 🐙 Real.log_div (𝓒.mathematicalPartitionFunction_pos T).ne'
(pow_pos 𝓒.hPos _).ne', ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μ⊢ log (𝓒.mathematicalPartitionFunction T) - log (𝓒.phaseSpaceunit ^ 𝓒.dof) =
log (𝓒.mathematicalPartitionFunction T) - ↑𝓒.dof * log 𝓒.phaseSpaceunit All goals completed! 🐙 Real.log_pow ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μ⊢ log (𝓒.mathematicalPartitionFunction T) - ↑𝓒.dof * log 𝓒.phaseSpaceunit =
log (𝓒.mathematicalPartitionFunction T) - ↑𝓒.dof * log 𝓒.phaseSpaceunit All goals completed! 🐙] All goals completed! 🐙A rewriting form convenient under a coercion to a temperature obtained from an inverse temperature.
lemma log_partitionFunction_ofβ
(𝓒 : CanonicalEnsemble ι) (β : ℝ≥0)
[IsFiniteMeasure (𝓒.μBolt (ofβ β))] [NeZero 𝓒.μ] :
Real.log (𝓒.partitionFunction (ofβ β))
= Real.log (𝓒.mathematicalPartitionFunction (ofβ β))
- (𝓒.dof : ℝ) * Real.log 𝓒.phaseSpaceunit :=
log_partitionFunction (𝓒:=𝓒) (T:=ofβ β)The logarithm of the mathematical partition function as an integral.
lemma log_mathematicalPartitionFunction_eq
(𝓒 : CanonicalEnsemble ι) (T : Temperature) :
Real.log (𝓒.mathematicalPartitionFunction T)
= Real.log (∫ i, Real.exp (- T.β * 𝓒.energy i) ∂ 𝓒.μ) := by ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ log (𝓒.mathematicalPartitionFunction T) = log (∫ (i : ι), rexp (-↑T.β * 𝓒.energy i) ∂𝓒.μ)
simp [mathematicalPartitionFunction_eq_integral] All goals completed! 🐙@[simp]
lemma helmholtzFreeEnergy_def
(𝓒 : CanonicalEnsemble ι) (T : Temperature) :
𝓒.helmholtzFreeEnergy T = - kB * T.val * Real.log (𝓒.partitionFunction T) := rfllemma helmholtzFreeEnergy_congr
(𝓒 : CanonicalEnsemble ι) (e : ι1 ≃ᵐ ι) (T : Temperature) :
(𝓒.congr e).helmholtzFreeEnergy T = 𝓒.helmholtzFreeEnergy T := by ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperature⊢ (𝓒.congr e).helmholtzFreeEnergy T = 𝓒.helmholtzFreeEnergy T
simp [helmholtzFreeEnergy] All goals completed! 🐙lemma helmholtzFreeEnergy_dof_zero
(𝓒 : CanonicalEnsemble ι) (T : Temperature) (h : 𝓒.dof = 0) :
𝓒.helmholtzFreeEnergy T
= -kB * T.val * Real.log (𝓒.mathematicalPartitionFunction T) := by ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.dof = 0⊢ 𝓒.helmholtzFreeEnergy T = -kB * ↑T.val * log (𝓒.mathematicalPartitionFunction T)
simp [helmholtzFreeEnergy, partitionFunction, h] All goals completed! 🐙lemma helmholtzFreeEnergy_phase_space_unit_one
(𝓒 : CanonicalEnsemble ι) (T : Temperature) (h : 𝓒.phaseSpaceunit = 1) :
𝓒.helmholtzFreeEnergy T
= -kB * T.val * Real.log (𝓒.mathematicalPartitionFunction T) := by ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.phaseSpaceunit = 1⊢ 𝓒.helmholtzFreeEnergy T = -kB * ↑T.val * log (𝓒.mathematicalPartitionFunction T)
simp [helmholtzFreeEnergy, partitionFunction, h] All goals completed! 🐙
lemma helmholtzFreeEnergy_add
(𝓒 : CanonicalEnsemble ι) (𝓒1 : CanonicalEnsemble ι1) (T : Temperature)
[IsFiniteMeasure (𝓒.μBolt T)] [IsFiniteMeasure (𝓒1.μBolt T)]
[NeZero 𝓒.μ] [NeZero 𝓒1.μ]
(h : 𝓒.phaseSpaceunit = 𝓒1.phaseSpaceunit) :
(𝓒 + 𝓒1).helmholtzFreeEnergy T
= 𝓒.helmholtzFreeEnergy T + 𝓒1.helmholtzFreeEnergy T := by ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒.μBolt T)inst✝²:IsFiniteMeasure (𝓒1.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh:𝓒.phaseSpaceunit = 𝓒1.phaseSpaceunit⊢ (𝓒 + 𝓒1).helmholtzFreeEnergy T = 𝓒.helmholtzFreeEnergy T + 𝓒1.helmholtzFreeEnergy T
simp only [helmholtzFreeEnergy] ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒.μBolt T)inst✝²:IsFiniteMeasure (𝓒1.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh:𝓒.phaseSpaceunit = 𝓒1.phaseSpaceunit⊢ -kB * ↑T.val * log ((𝓒 + 𝓒1).partitionFunction T) =
-kB * ↑T.val * log (𝓒.partitionFunction T) + -kB * ↑T.val * log (𝓒1.partitionFunction T)
rw [partitionFunction_add _ _ _ h, ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒.μBolt T)inst✝²:IsFiniteMeasure (𝓒1.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh:𝓒.phaseSpaceunit = 𝓒1.phaseSpaceunit⊢ -kB * ↑T.val * log (𝓒.partitionFunction T * 𝓒1.partitionFunction T) =
-kB * ↑T.val * log (𝓒.partitionFunction T) + -kB * ↑T.val * log (𝓒1.partitionFunction T) ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒.μBolt T)inst✝²:IsFiniteMeasure (𝓒1.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh:𝓒.phaseSpaceunit = 𝓒1.phaseSpaceunit⊢ -kB * ↑T.val * (log (𝓒.partitionFunction T) + log (𝓒1.partitionFunction T)) =
-kB * ↑T.val * log (𝓒.partitionFunction T) + -kB * ↑T.val * log (𝓒1.partitionFunction T)
Real.log_mul (partitionFunction_pos 𝓒 T).ne' (partitionFunction_pos 𝓒1 T).ne' ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒.μBolt T)inst✝²:IsFiniteMeasure (𝓒1.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh:𝓒.phaseSpaceunit = 𝓒1.phaseSpaceunit⊢ -kB * ↑T.val * (log (𝓒.partitionFunction T) + log (𝓒1.partitionFunction T)) =
-kB * ↑T.val * log (𝓒.partitionFunction T) + -kB * ↑T.val * log (𝓒1.partitionFunction T) ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒.μBolt T)inst✝²:IsFiniteMeasure (𝓒1.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh:𝓒.phaseSpaceunit = 𝓒1.phaseSpaceunit⊢ -kB * ↑T.val * (log (𝓒.partitionFunction T) + log (𝓒1.partitionFunction T)) =
-kB * ↑T.val * log (𝓒.partitionFunction T) + -kB * ↑T.val * log (𝓒1.partitionFunction T)] ι:Typeι1:Typeinst✝⁵:MeasurableSpace ιinst✝⁴:MeasurableSpace ι1𝓒:CanonicalEnsemble ι𝓒1:CanonicalEnsemble ι1T:Temperatureinst✝³:IsFiniteMeasure (𝓒.μBolt T)inst✝²:IsFiniteMeasure (𝓒1.μBolt T)inst✝¹:NeZero 𝓒.μinst✝:NeZero 𝓒1.μh:𝓒.phaseSpaceunit = 𝓒1.phaseSpaceunit⊢ -kB * ↑T.val * (log (𝓒.partitionFunction T) + log (𝓒1.partitionFunction T)) =
-kB * ↑T.val * log (𝓒.partitionFunction T) + -kB * ↑T.val * log (𝓒1.partitionFunction T)
ring All goals completed! 🐙lemma helmholtzFreeEnergy_nsmul
(𝓒 : CanonicalEnsemble ι) (n : ℕ) (T : Temperature) :
(nsmul n 𝓒).helmholtzFreeEnergy T
= n * 𝓒.helmholtzFreeEnergy T := by ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕT:Temperature⊢ (nsmul n 𝓒).helmholtzFreeEnergy T = ↑n * 𝓒.helmholtzFreeEnergy T
simp only [helmholtzFreeEnergy, partitionFunction_nsmul, Real.log_pow] ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιn:ℕT:Temperature⊢ -kB * ↑T.val * (↑n * log (𝓒.partitionFunction T)) = ↑n * (-kB * ↑T.val * log (𝓒.partitionFunction T))
ring All goals completed! 🐙@[simp]
lemma physicalProbability_def (T : Temperature) (i : ι) :
𝓒.physicalProbability T i
= 𝓒.probability T i * (𝓒.phaseSpaceunit ^ 𝓒.dof) := rfllemma physicalProbability_measurable (T : Temperature) :
Measurable (𝓒.physicalProbability T) := by ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ Measurable (𝓒.physicalProbability T)
unfold physicalProbability probability ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperature⊢ Measurable fun i => rexp (-↑T.β * 𝓒.energy i) / 𝓒.mathematicalPartitionFunction T * 𝓒.phaseSpaceunit ^ 𝓒.dof
fun_prop All goals completed! 🐙lemma physicalProbability_nonneg
(T : Temperature) [IsFiniteMeasure (𝓒.μBolt T)] [NeZero 𝓒.μ] (i : ι) :
0 ≤ 𝓒.physicalProbability T i :=
mul_nonneg (𝓒.probability_nonneg T i) (pow_nonneg 𝓒.hPos.le _)lemma physicalProbability_pos
(T : Temperature) [IsFiniteMeasure (𝓒.μBolt T)] [NeZero 𝓒.μ] (i : ι) :
0 < 𝓒.physicalProbability T i :=
mul_pos (𝓒.probability_pos T i) (pow_pos 𝓒.hPos _)
lemma log_physicalProbability
(T : Temperature) [IsFiniteMeasure (𝓒.μBolt T)] [NeZero 𝓒.μ] (i : ι) :
Real.log (𝓒.physicalProbability T i)
= Real.log (𝓒.probability T i) + (𝓒.dof : ℝ) * Real.log 𝓒.phaseSpaceunit := by ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μi:ι⊢ log (𝓒.physicalProbability T i) = log (𝓒.probability T i) + ↑𝓒.dof * log 𝓒.phaseSpaceunit
rw [physicalProbability, ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μi:ι⊢ log (𝓒.probability T i * 𝓒.phaseSpaceunit ^ 𝓒.dof) = log (𝓒.probability T i) + ↑𝓒.dof * log 𝓒.phaseSpaceunit All goals completed! 🐙 Real.log_mul (𝓒.probability_pos T i).ne' (pow_pos 𝓒.hPos _).ne', ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μi:ι⊢ log (𝓒.probability T i) + log (𝓒.phaseSpaceunit ^ 𝓒.dof) = log (𝓒.probability T i) + ↑𝓒.dof * log 𝓒.phaseSpaceunit All goals completed! 🐙
Real.log_pow ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μi:ι⊢ log (𝓒.probability T i) + ↑𝓒.dof * log 𝓒.phaseSpaceunit = log (𝓒.probability T i) + ↑𝓒.dof * log 𝓒.phaseSpaceunit All goals completed! 🐙] All goals completed! 🐙lemma integral_probability
(𝓒 : CanonicalEnsemble ι) (T : Temperature)
[IsFiniteMeasure (𝓒.μBolt T)] [NeZero 𝓒.μ] :
(∫ i, 𝓒.probability T i ∂ 𝓒.μ) = 1 := by ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μ⊢ ∫ (i : ι), 𝓒.probability T i ∂𝓒.μ = 1
simp only [probability, div_eq_mul_inv, integral_mul_const,
← mathematicalPartitionFunction_eq_integral] ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μ⊢ 𝓒.mathematicalPartitionFunction T * (𝓒.mathematicalPartitionFunction T)⁻¹ = 1
exact mul_inv_cancel₀ (𝓒.mathematicalPartitionFunction_pos T).ne' All goals completed! 🐙Normalization of the dimensionless physical probability density over the base measure.
lemma integral_physicalProbability_base
(𝓒 : CanonicalEnsemble ι) (T : Temperature)
[IsFiniteMeasure (𝓒.μBolt T)] [NeZero 𝓒.μ] :
(∫ i, 𝓒.physicalProbability T i ∂ 𝓒.μ)
= 𝓒.phaseSpaceunit ^ 𝓒.dof := by ι:Typeinst✝²:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureinst✝¹:IsFiniteMeasure (𝓒.μBolt T)inst✝:NeZero 𝓒.μ⊢ ∫ (i : ι), 𝓒.physicalProbability T i ∂𝓒.μ = 𝓒.phaseSpaceunit ^ 𝓒.dof
simp [physicalProbability, integral_mul_const, integral_probability] All goals completed! 🐙lemma physicalProbability_dof_zero
(T : Temperature) (h : 𝓒.dof = 0) (i : ι) :
𝓒.physicalProbability T i = 𝓒.probability T i := by ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.dof = 0i:ι⊢ 𝓒.physicalProbability T i = 𝓒.probability T i
simp [physicalProbability, h] All goals completed! 🐙lemma physicalProbability_phase_space_unit_one
(T : Temperature) (h : 𝓒.phaseSpaceunit = 1) (i : ι) :
𝓒.physicalProbability T i = 𝓒.probability T i := by ι:Typeinst✝:MeasurableSpace ι𝓒:CanonicalEnsemble ιT:Temperatureh:𝓒.phaseSpaceunit = 1i:ι⊢ 𝓒.physicalProbability T i = 𝓒.probability T i
simp [physicalProbability, h] All goals completed! 🐙lemma physicalProbability_congr (e : ι1 ≃ᵐ ι) (T : Temperature) (i : ι1) :
(𝓒.congr e).physicalProbability T i
= 𝓒.physicalProbability T (e i) := by ι:Typeι1:Typeinst✝¹:MeasurableSpace ιinst✝:MeasurableSpace ι1𝓒:CanonicalEnsemble ιe:ι1 ≃ᵐ ιT:Temperaturei:ι1⊢ (𝓒.congr e).physicalProbability T i = 𝓒.physicalProbability T (e i)
simp [physicalProbability, probability] All goals completed! 🐙lemma physicalProbability_add
{ι1} [MeasurableSpace ι1]
(𝓒1 : CanonicalEnsemble ι1) (T : Temperature) (i : ι × ι1)
(h : 𝓒.phaseSpaceunit = 𝓒1.phaseSpaceunit) :
(𝓒 + 𝓒1).physicalProbability T i
= 𝓒.physicalProbability T i.1 * 𝓒1.physicalProbability T i.2 := by ι:Typeinst✝¹:MeasurableSpace ι𝓒:CanonicalEnsemble ιι1:Typeinst✝:MeasurableSpace ι1𝓒1:CanonicalEnsemble ι1T:Temperaturei:ι × ι1h:𝓒.phaseSpaceunit = 𝓒1.phaseSpaceunit⊢ (𝓒 + 𝓒1).physicalProbability T i = 𝓒.physicalProbability T i.1 * 𝓒1.physicalProbability T i.2
simp [physicalProbability, probability_add, phase_space_unit_add, dof_add, h, pow_add,
mul_mul_mul_comm] All goals completed! 🐙@[simp]
lemma thermodynamicEntropy_def (T : Temperature) :
𝓒.thermodynamicEntropy T = -kB * ∫ i, Real.log (𝓒.physicalProbability T i) ∂ 𝓒.μProd T := rfl