Imports
/-
Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Joseph Tooby-Smith
-/
module
public import Physlib.Units.DimensionPhysLib's default dimension basis
LTMCTDimensionBase is PhysLib's default basis of base dimensions β length, time,
mass, charge and temperature. Dimension LTMCTDimensionBase is the familiar
five-exponent dimension, and this module provides the concrete API on top of the
generic Dimension B:
the .length, .time, .mass, .charge, .temperature exponent projections;
the ofLTMCTDimensionBase constructor from five exponents; and
the named generators Lπ, Tπ, Mπ, Cπ, Ξπ, shown to be the generic
single base vectors.
This basis is charge-based with five generators, so it is deliberately not the
SI/ISQ base-quantity set (which takes electric current as base and adds amount of
substance and luminous intensity); see ISQDimensionBase.
@[expose] public section
PhysLib's default basis of base dimensions β length, time, mass,
charge, temperature. Note this is charge-based, so it is not the SI/ISQ
base-quantity set; see Dimension.
The length base dimension.
The time base dimension.
The mass base dimension.
The charge base dimension.
The temperature base dimension.
inductive LTMCTDimensionBase where | length | time | mass | charge | temperature
deriving DecidableEq, FintypeThe LTMCTDimensionBase projections
The five base-dimension exponents of a Dimension LTMCTDimensionBase, provided so that
the familiar .length, .time, .mass, .charge, .temperature API is available.
The length exponent of a LTMCTDimensionBase dimension.
def length (d : Dimension LTMCTDimensionBase) : β := d.exponent .length
The time exponent of a LTMCTDimensionBase dimension.
def time (d : Dimension LTMCTDimensionBase) : β := d.exponent .time
The mass exponent of a LTMCTDimensionBase dimension.
def mass (d : Dimension LTMCTDimensionBase) : β := d.exponent .mass
The charge exponent of a LTMCTDimensionBase dimension.
def charge (d : Dimension LTMCTDimensionBase) : β := d.exponent .charge
The temperature exponent of a LTMCTDimensionBase dimension.
def temperature (d : Dimension LTMCTDimensionBase) : β := d.exponent .temperature
Build a LTMCTDimensionBase dimension from its five exponents, in the order
β¨length, time, mass, charge, temperatureβ©.
def ofLTMCTDimensionBase (length time mass charge temperature : β) : Dimension LTMCTDimensionBase :=
β¨fun
| .length => length
| .time => time
| .mass => mass
| .charge => charge
| .temperature => temperatureβ©@[simp]
lemma ofLTMCTDimensionBase_length (l t m c ΞΈ : β) :
(ofLTMCTDimensionBase l t m c ΞΈ).length = l := rfl@[simp]
lemma ofLTMCTDimensionBase_time (l t m c ΞΈ : β) :
(ofLTMCTDimensionBase l t m c ΞΈ).time = t := rfl@[simp]
lemma ofLTMCTDimensionBase_mass (l t m c ΞΈ : β) :
(ofLTMCTDimensionBase l t m c ΞΈ).mass = m := rfl@[simp]
lemma ofLTMCTDimensionBase_charge (l t m c ΞΈ : β) :
(ofLTMCTDimensionBase l t m c ΞΈ).charge = c := rfl@[simp]
lemma ofLTMCTDimensionBase_temperature (l t m c ΞΈ : β) :
(ofLTMCTDimensionBase l t m c ΞΈ).temperature = ΞΈ := rfl@[simp]
lemma time_mul (d1 d2 : Dimension LTMCTDimensionBase) :
(d1 * d2).time = d1.time + d2.time := rfl@[simp]
lemma length_mul (d1 d2 : Dimension LTMCTDimensionBase) :
(d1 * d2).length = d1.length + d2.length := rfl@[simp]
lemma mass_mul (d1 d2 : Dimension LTMCTDimensionBase) :
(d1 * d2).mass = d1.mass + d2.mass := rfl@[simp]
lemma charge_mul (d1 d2 : Dimension LTMCTDimensionBase) :
(d1 * d2).charge = d1.charge + d2.charge := rfl@[simp]
lemma temperature_mul (d1 d2 : Dimension LTMCTDimensionBase) :
(d1 * d2).temperature = d1.temperature + d2.temperature := rfl@[simp]
lemma one_length : (1 : Dimension LTMCTDimensionBase).length = 0 := rfl@[simp]
lemma one_time : (1 : Dimension LTMCTDimensionBase).time = 0 := rfl@[simp]
lemma one_mass : (1 : Dimension LTMCTDimensionBase).mass = 0 := rfl@[simp]
lemma one_charge : (1 : Dimension LTMCTDimensionBase).charge = 0 := rfl@[simp]
lemma one_temperature : (1 : Dimension LTMCTDimensionBase).temperature = 0 := rfl@[simp]
lemma inv_length (d : Dimension LTMCTDimensionBase) : dβ»ΒΉ.length = -d.length := rfl@[simp]
lemma inv_time (d : Dimension LTMCTDimensionBase) : dβ»ΒΉ.time = -d.time := rfl@[simp]
lemma inv_mass (d : Dimension LTMCTDimensionBase) : dβ»ΒΉ.mass = -d.mass := rfl@[simp]
lemma inv_charge (d : Dimension LTMCTDimensionBase) : dβ»ΒΉ.charge = -d.charge := rfl@[simp]
lemma inv_temperature (d : Dimension LTMCTDimensionBase) : dβ»ΒΉ.temperature = -d.temperature := rfl@[simp]
lemma div_length (d1 d2 : Dimension LTMCTDimensionBase) :
(d1 / d2).length = d1.length - d2.length := d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 / d2).length = d1.length - d2.length
All goals completed! π@[simp]
lemma div_time (d1 d2 : Dimension LTMCTDimensionBase) : (d1 / d2).time = d1.time - d2.time := d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 / d2).time = d1.time - d2.time
All goals completed! π@[simp]
lemma div_mass (d1 d2 : Dimension LTMCTDimensionBase) : (d1 / d2).mass = d1.mass - d2.mass := d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 / d2).mass = d1.mass - d2.mass
All goals completed! π@[simp]
lemma div_charge (d1 d2 : Dimension LTMCTDimensionBase) :
(d1 / d2).charge = d1.charge - d2.charge := d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 / d2).charge = d1.charge - d2.charge
All goals completed! π@[simp]
lemma div_temperature (d1 d2 : Dimension LTMCTDimensionBase) :
(d1 / d2).temperature = d1.temperature - d2.temperature := d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 / d2).temperature = d1.temperature - d2.temperature
All goals completed! π@[simp]
lemma npow_length (d : Dimension LTMCTDimensionBase) (n : β) : (d ^ n).length = n β’ d.length := d:Dimension LTMCTDimensionBasen:ββ’ (d ^ n).length = n β’ d.length
All goals completed! π@[simp]
lemma npow_time (d : Dimension LTMCTDimensionBase) (n : β) : (d ^ n).time = n β’ d.time := d:Dimension LTMCTDimensionBasen:ββ’ (d ^ n).time = n β’ d.time
All goals completed! π@[simp]
lemma npow_mass (d : Dimension LTMCTDimensionBase) (n : β) : (d ^ n).mass = n β’ d.mass := d:Dimension LTMCTDimensionBasen:ββ’ (d ^ n).mass = n β’ d.mass
All goals completed! π@[simp]
lemma npow_charge (d : Dimension LTMCTDimensionBase) (n : β) : (d ^ n).charge = n β’ d.charge := d:Dimension LTMCTDimensionBasen:ββ’ (d ^ n).charge = n β’ d.charge
All goals completed! π@[simp]
lemma npow_temperature (d : Dimension LTMCTDimensionBase) (n : β) :
(d ^ n).temperature = n β’ d.temperature := d:Dimension LTMCTDimensionBasen:ββ’ (d ^ n).temperature = n β’ d.temperature
All goals completed! πThe dimension corresponding to length.
def Lπ : Dimension LTMCTDimensionBase := ofLTMCTDimensionBase 1 0 0 0 0@[simp]
lemma Lπ_length : Lπ.length = 1 := β’ Lπ.length = 1 All goals completed! π@[simp]
lemma Lπ_time : Lπ.time = 0 := β’ Lπ.time = 0 All goals completed! π@[simp]
lemma Lπ_mass : Lπ.mass = 0 := β’ Lπ.mass = 0 All goals completed! π@[simp]
lemma Lπ_charge : Lπ.charge = 0 := β’ Lπ.charge = 0 All goals completed! π@[simp]
lemma Lπ_temperature : Lπ.temperature = 0 := β’ Lπ.temperature = 0 All goals completed! πThe dimension corresponding to time.
def Tπ : Dimension LTMCTDimensionBase := ofLTMCTDimensionBase 0 1 0 0 0@[simp]
lemma Tπ_length : Tπ.length = 0 := β’ Tπ.length = 0 All goals completed! π@[simp]
lemma Tπ_time : Tπ.time = 1 := β’ Tπ.time = 1 All goals completed! π@[simp]
lemma Tπ_mass : Tπ.mass = 0 := β’ Tπ.mass = 0 All goals completed! π@[simp]
lemma Tπ_charge : Tπ.charge = 0 := β’ Tπ.charge = 0 All goals completed! π@[simp]
lemma Tπ_temperature : Tπ.temperature = 0 := β’ Tπ.temperature = 0 All goals completed! πThe dimension corresponding to mass.
def Mπ : Dimension LTMCTDimensionBase := ofLTMCTDimensionBase 0 0 1 0 0The dimension corresponding to charge.
def Cπ : Dimension LTMCTDimensionBase := ofLTMCTDimensionBase 0 0 0 1 0The dimension corresponding to temperature.
def Ξπ : Dimension LTMCTDimensionBase := ofLTMCTDimensionBase 0 0 0 0 1The named generators are the base vectors
Each named generator Lπ, Tπ, β¦ is the generic single base vector at the
corresponding base dimension, exhibiting them as instances of the basis-generic API.
lemma Lπ_eq_single : Lπ = single .length := β’ Lπ = single LTMCTDimensionBase.length
b:LTMCTDimensionBaseβ’ Lπ.exponent b = (single LTMCTDimensionBase.length).exponent b; β’ Lπ.exponent LTMCTDimensionBase.length = (single LTMCTDimensionBase.length).exponent LTMCTDimensionBase.lengthβ’ Lπ.exponent LTMCTDimensionBase.time = (single LTMCTDimensionBase.length).exponent LTMCTDimensionBase.timeβ’ Lπ.exponent LTMCTDimensionBase.mass = (single LTMCTDimensionBase.length).exponent LTMCTDimensionBase.massβ’ Lπ.exponent LTMCTDimensionBase.charge = (single LTMCTDimensionBase.length).exponent LTMCTDimensionBase.chargeβ’ Lπ.exponent LTMCTDimensionBase.temperature = (single LTMCTDimensionBase.length).exponent LTMCTDimensionBase.temperature β’ Lπ.exponent LTMCTDimensionBase.length = (single LTMCTDimensionBase.length).exponent LTMCTDimensionBase.lengthβ’ Lπ.exponent LTMCTDimensionBase.time = (single LTMCTDimensionBase.length).exponent LTMCTDimensionBase.timeβ’ Lπ.exponent LTMCTDimensionBase.mass = (single LTMCTDimensionBase.length).exponent LTMCTDimensionBase.massβ’ Lπ.exponent LTMCTDimensionBase.charge = (single LTMCTDimensionBase.length).exponent LTMCTDimensionBase.chargeβ’ Lπ.exponent LTMCTDimensionBase.temperature = (single LTMCTDimensionBase.length).exponent LTMCTDimensionBase.temperature All goals completed! πlemma Tπ_eq_single : Tπ = single .time := β’ Tπ = single LTMCTDimensionBase.time
b:LTMCTDimensionBaseβ’ Tπ.exponent b = (single LTMCTDimensionBase.time).exponent b; β’ Tπ.exponent LTMCTDimensionBase.length = (single LTMCTDimensionBase.time).exponent LTMCTDimensionBase.lengthβ’ Tπ.exponent LTMCTDimensionBase.time = (single LTMCTDimensionBase.time).exponent LTMCTDimensionBase.timeβ’ Tπ.exponent LTMCTDimensionBase.mass = (single LTMCTDimensionBase.time).exponent LTMCTDimensionBase.massβ’ Tπ.exponent LTMCTDimensionBase.charge = (single LTMCTDimensionBase.time).exponent LTMCTDimensionBase.chargeβ’ Tπ.exponent LTMCTDimensionBase.temperature = (single LTMCTDimensionBase.time).exponent LTMCTDimensionBase.temperature β’ Tπ.exponent LTMCTDimensionBase.length = (single LTMCTDimensionBase.time).exponent LTMCTDimensionBase.lengthβ’ Tπ.exponent LTMCTDimensionBase.time = (single LTMCTDimensionBase.time).exponent LTMCTDimensionBase.timeβ’ Tπ.exponent LTMCTDimensionBase.mass = (single LTMCTDimensionBase.time).exponent LTMCTDimensionBase.massβ’ Tπ.exponent LTMCTDimensionBase.charge = (single LTMCTDimensionBase.time).exponent LTMCTDimensionBase.chargeβ’ Tπ.exponent LTMCTDimensionBase.temperature = (single LTMCTDimensionBase.time).exponent LTMCTDimensionBase.temperature All goals completed! πlemma Mπ_eq_single : Mπ = single .mass := β’ Mπ = single LTMCTDimensionBase.mass
b:LTMCTDimensionBaseβ’ Mπ.exponent b = (single LTMCTDimensionBase.mass).exponent b; β’ Mπ.exponent LTMCTDimensionBase.length = (single LTMCTDimensionBase.mass).exponent LTMCTDimensionBase.lengthβ’ Mπ.exponent LTMCTDimensionBase.time = (single LTMCTDimensionBase.mass).exponent LTMCTDimensionBase.timeβ’ Mπ.exponent LTMCTDimensionBase.mass = (single LTMCTDimensionBase.mass).exponent LTMCTDimensionBase.massβ’ Mπ.exponent LTMCTDimensionBase.charge = (single LTMCTDimensionBase.mass).exponent LTMCTDimensionBase.chargeβ’ Mπ.exponent LTMCTDimensionBase.temperature = (single LTMCTDimensionBase.mass).exponent LTMCTDimensionBase.temperature β’ Mπ.exponent LTMCTDimensionBase.length = (single LTMCTDimensionBase.mass).exponent LTMCTDimensionBase.lengthβ’ Mπ.exponent LTMCTDimensionBase.time = (single LTMCTDimensionBase.mass).exponent LTMCTDimensionBase.timeβ’ Mπ.exponent LTMCTDimensionBase.mass = (single LTMCTDimensionBase.mass).exponent LTMCTDimensionBase.massβ’ Mπ.exponent LTMCTDimensionBase.charge = (single LTMCTDimensionBase.mass).exponent LTMCTDimensionBase.chargeβ’ Mπ.exponent LTMCTDimensionBase.temperature = (single LTMCTDimensionBase.mass).exponent LTMCTDimensionBase.temperature All goals completed! πlemma Cπ_eq_single : Cπ = single .charge := β’ Cπ = single LTMCTDimensionBase.charge
b:LTMCTDimensionBaseβ’ Cπ.exponent b = (single LTMCTDimensionBase.charge).exponent b; β’ Cπ.exponent LTMCTDimensionBase.length = (single LTMCTDimensionBase.charge).exponent LTMCTDimensionBase.lengthβ’ Cπ.exponent LTMCTDimensionBase.time = (single LTMCTDimensionBase.charge).exponent LTMCTDimensionBase.timeβ’ Cπ.exponent LTMCTDimensionBase.mass = (single LTMCTDimensionBase.charge).exponent LTMCTDimensionBase.massβ’ Cπ.exponent LTMCTDimensionBase.charge = (single LTMCTDimensionBase.charge).exponent LTMCTDimensionBase.chargeβ’ Cπ.exponent LTMCTDimensionBase.temperature = (single LTMCTDimensionBase.charge).exponent LTMCTDimensionBase.temperature β’ Cπ.exponent LTMCTDimensionBase.length = (single LTMCTDimensionBase.charge).exponent LTMCTDimensionBase.lengthβ’ Cπ.exponent LTMCTDimensionBase.time = (single LTMCTDimensionBase.charge).exponent LTMCTDimensionBase.timeβ’ Cπ.exponent LTMCTDimensionBase.mass = (single LTMCTDimensionBase.charge).exponent LTMCTDimensionBase.massβ’ Cπ.exponent LTMCTDimensionBase.charge = (single LTMCTDimensionBase.charge).exponent LTMCTDimensionBase.chargeβ’ Cπ.exponent LTMCTDimensionBase.temperature = (single LTMCTDimensionBase.charge).exponent LTMCTDimensionBase.temperature All goals completed! πlemma Ξπ_eq_single : Ξπ = single .temperature := β’ Ξπ = single LTMCTDimensionBase.temperature
b:LTMCTDimensionBaseβ’ Ξπ.exponent b = (single LTMCTDimensionBase.temperature).exponent b; β’ Ξπ.exponent LTMCTDimensionBase.length = (single LTMCTDimensionBase.temperature).exponent LTMCTDimensionBase.lengthβ’ Ξπ.exponent LTMCTDimensionBase.time = (single LTMCTDimensionBase.temperature).exponent LTMCTDimensionBase.timeβ’ Ξπ.exponent LTMCTDimensionBase.mass = (single LTMCTDimensionBase.temperature).exponent LTMCTDimensionBase.massβ’ Ξπ.exponent LTMCTDimensionBase.charge = (single LTMCTDimensionBase.temperature).exponent LTMCTDimensionBase.chargeβ’ Ξπ.exponent LTMCTDimensionBase.temperature =
(single LTMCTDimensionBase.temperature).exponent LTMCTDimensionBase.temperature β’ Ξπ.exponent LTMCTDimensionBase.length = (single LTMCTDimensionBase.temperature).exponent LTMCTDimensionBase.lengthβ’ Ξπ.exponent LTMCTDimensionBase.time = (single LTMCTDimensionBase.temperature).exponent LTMCTDimensionBase.timeβ’ Ξπ.exponent LTMCTDimensionBase.mass = (single LTMCTDimensionBase.temperature).exponent LTMCTDimensionBase.massβ’ Ξπ.exponent LTMCTDimensionBase.charge = (single LTMCTDimensionBase.temperature).exponent LTMCTDimensionBase.chargeβ’ Ξπ.exponent LTMCTDimensionBase.temperature =
(single LTMCTDimensionBase.temperature).exponent LTMCTDimensionBase.temperature All goals completed! π