Imports
/-
Copyright (c) 2025 Fabio Anza. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Mitch Scheffer, Fabio Anza
-/
module
public import Mathlib.Analysis.SpecialFunctions.Pow.Real -- for Real.rpow_def_of_posIdeal gas: basic entropy and adiabatic relations
In this module we formalize a simple thermodynamic model of a monophase ideal gas. We:
Define the entropy S(U,V,N) = N sβ + N R (c \log(U/Uβ) + \log(V/Vβ) - (c+1)\log(N/Nβ)),
Prove equivalent formulations of the adiabatic relation for two states (U_a, V_a) and (U_b, V_b) at fixed N:
c \log(U_a/U_b) + \log(V_a/V_b) = 0,
(U_a/U_b)^c (V_a/V_b) = 1,
U_a^c V_a = U_b^c V_b (the latter follows from (2)).
@[expose] public sectionEntropy of a monophase ideal gas: S(U,V,N) = N s0 + N R (c log(U/U0) + log(V/V0) - (c+1) log(N/N0)).
def entropy
(c R s0 U0 V0 N0 : β) (U V N : β) : β :=
N * s0 +
N * R *
(c * log (U / U0) +
log (V / V0) -
(c + 1) * log (N / N0))Adiabatic relation in logarithmic form: If S(Ua,Va,N) = S(Ub,Vb,N) with N fixed, then c * log (Ua/Ub) + log (Va/Vb) = 0.
s0:βU0:βV0:βN0:βc:βR:βUa:βUb:βVa:βVb:βN:βhUa:0 < UahUb:0 < UbhVa:0 < VahVb:0 < VbhN:0 < NhU0:0 < U0hV0:0 < V0hR:0 < RhS:N * s0 + N * R * (c * (log Ua - log U0) + (log Va - log V0) - (c + 1) * log (N / N0)) =
N * s0 + N * R * (c * (log Ub - log U0) + (log Vb - log V0) - (c + 1) * log (N / N0))key:N * R * (c * (log Ua - log Ub) + (log Va - log Vb)) = 0β’ c * (log Ua - log Ub) + (log Va - log Vb) = 0
exact (mul_eq_zero.mp key).resolve_left (mul_ne_zero hN.ne' hR.ne') All goals completed! πAdiabatic relation in product form: If S(Ua,Va,N) = S(Ub,Vb,N) with N fixed, then (Ua/Ub)^c * (Va/Vb) = 1.
theorem adiabatic_relation_UaUbVaVb
{s0 U0 V0 N0 c R : β}
{Ua Ub Va Vb N : β}
(hUa : 0 < Ua) (hUb : 0 < Ub)
(hVa : 0 < Va) (hVb : 0 < Vb)
(hN : 0 < N)
(hU0 : 0 < U0) (hV0 : 0 < V0)
(hR : 0 < R)
(hS :
entropy c R s0 U0 V0 N0 Ua Va N =
entropy c R s0 U0 V0 N0 Ub Vb N) :
(Real.rpow (Ua / Ub) c) * (Va / Vb) = 1 := by s0:βU0:βV0:βN0:βc:βR:βUa:βUb:βVa:βVb:βN:βhUa:0 < UahUb:0 < UbhVa:0 < VahVb:0 < VbhN:0 < NhU0:0 < U0hV0:0 < V0hR:0 < RhS:entropy c R s0 U0 V0 N0 Ua Va N = entropy c R s0 U0 V0 N0 Ub Vb Nβ’ (Ua / Ub).rpow c * (Va / Vb) = 1
have hlog := adiabatic_relation_log hUa hUb hVa hVb hN hU0 hV0 hR hS s0:βU0:βV0:βN0:βc:βR:βUa:βUb:βVa:βVb:βN:βhUa:0 < UahUb:0 < UbhVa:0 < VahVb:0 < VbhN:0 < NhU0:0 < U0hV0:0 < V0hR:0 < RhS:entropy c R s0 U0 V0 N0 Ua Va N = entropy c R s0 U0 V0 N0 Ub Vb Nhlog:c * log (Ua / Ub) + log (Va / Vb) = 0β’ (Ua / Ub).rpow c * (Va / Vb) = 1
-- The product is `exp` of the left-hand side of `hlog`, i.e. `exp 0 = 1`.
show (Ua / Ub) ^ c * (Va / Vb) = 1 s0:βU0:βV0:βN0:βc:βR:βUa:βUb:βVa:βVb:βN:βhUa:0 < UahUb:0 < UbhVa:0 < VahVb:0 < VbhN:0 < NhU0:0 < U0hV0:0 < V0hR:0 < RhS:entropy c R s0 U0 V0 N0 Ua Va N = entropy c R s0 U0 V0 N0 Ub Vb Nhlog:c * log (Ua / Ub) + log (Va / Vb) = 0β’ (Ua / Ub) ^ c * (Va / Vb) = 1
rw [Real.rpow_def_of_pos (div_pos hUa hUb), s0:βU0:βV0:βN0:βc:βR:βUa:βUb:βVa:βVb:βN:βhUa:0 < UahUb:0 < UbhVa:0 < VahVb:0 < VbhN:0 < NhU0:0 < U0hV0:0 < V0hR:0 < RhS:entropy c R s0 U0 V0 N0 Ua Va N = entropy c R s0 U0 V0 N0 Ub Vb Nhlog:c * log (Ua / Ub) + log (Va / Vb) = 0β’ rexp (log (Ua / Ub) * c) * (Va / Vb) = 1 All goals completed! π β Real.exp_log (div_pos hVa hVb), s0:βU0:βV0:βN0:βc:βR:βUa:βUb:βVa:βVb:βN:βhUa:0 < UahUb:0 < UbhVa:0 < VahVb:0 < VbhN:0 < NhU0:0 < U0hV0:0 < V0hR:0 < RhS:entropy c R s0 U0 V0 N0 Ua Va N = entropy c R s0 U0 V0 N0 Ub Vb Nhlog:c * log (Ua / Ub) + log (Va / Vb) = 0β’ rexp (log (Ua / Ub) * c) * rexp (log (Va / Vb)) = 1 All goals completed! π
β Real.exp_add, s0:βU0:βV0:βN0:βc:βR:βUa:βUb:βVa:βVb:βN:βhUa:0 < UahUb:0 < UbhVa:0 < VahVb:0 < VbhN:0 < NhU0:0 < U0hV0:0 < V0hR:0 < RhS:entropy c R s0 U0 V0 N0 Ua Va N = entropy c R s0 U0 V0 N0 Ub Vb Nhlog:c * log (Ua / Ub) + log (Va / Vb) = 0β’ rexp (log (Ua / Ub) * c + log (Va / Vb)) = 1 All goals completed! π mul_comm (log (Ua / Ub)) c, s0:βU0:βV0:βN0:βc:βR:βUa:βUb:βVa:βVb:βN:βhUa:0 < UahUb:0 < UbhVa:0 < VahVb:0 < VbhN:0 < NhU0:0 < U0hV0:0 < V0hR:0 < RhS:entropy c R s0 U0 V0 N0 Ua Va N = entropy c R s0 U0 V0 N0 Ub Vb Nhlog:c * log (Ua / Ub) + log (Va / Vb) = 0β’ rexp (c * log (Ua / Ub) + log (Va / Vb)) = 1 All goals completed! π hlog, s0:βU0:βV0:βN0:βc:βR:βUa:βUb:βVa:βVb:βN:βhUa:0 < UahUb:0 < UbhVa:0 < VahVb:0 < VbhN:0 < NhU0:0 < U0hV0:0 < V0hR:0 < RhS:entropy c R s0 U0 V0 N0 Ua Va N = entropy c R s0 U0 V0 N0 Ub Vb Nhlog:c * log (Ua / Ub) + log (Va / Vb) = 0β’ rexp 0 = 1 All goals completed! π Real.exp_zero s0:βU0:βV0:βN0:βc:βR:βUa:βUb:βVa:βVb:βN:βhUa:0 < UahUb:0 < UbhVa:0 < VahVb:0 < VbhN:0 < NhU0:0 < U0hV0:0 < V0hR:0 < RhS:entropy c R s0 U0 V0 N0 Ua Va N = entropy c R s0 U0 V0 N0 Ub Vb Nhlog:c * log (Ua / Ub) + log (Va / Vb) = 0β’ 1 = 1 All goals completed! π] All goals completed! π