Imports
/-
Copyright (c) 2026 Nicolas Rouquette. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Nicolas Rouquette
-/
module
public import Physlib.Units.LTMCTDimensionBase
public import Physlib.Units.ISQDimensionBaseBridging PhysLib's default basis and the ISQ basis
LTMCTDimensionBase (length, time, mass, charge, temperature) and ISQDimensionBase
(the seven ISO/IEC 80000-1 base quantities) make different base/derived choices. This
module relates them by the two truth-preserving directions of Dimension.Embedding
and Dimension.Projection:
ltmctToISQ : Dimension.Embedding LTMCTDimensionBase ISQDimensionBase β the
dimension-preserving inclusion of PhysLib dimensions into ISQ dimensions. It
sends the charge generator to the derived ISQ charge I Β· T (toISQHom_Cπ), so it
is faithful (toISQHom_injective) and physically correct, not a bare relabelling.
isqToLTMCT : Dimension.Projection ISQDimensionBase LTMCTDimensionBase β the
truth-preserving reduction of ISQ dimensions onto PhysLib's. It reads electric
current as charge/time and forgets amount of substance and luminous intensity (the
base quantities PhysLib does not track).
The two fit together as a retraction, isqToLTMCT β ltmctToISQ = id
(isqToLTMCT_comp_ltmctToISQ): PhysLib's basis embeds faithfully into ISQ and is
recovered exactly by the projection β but the reverse composite is not the identity,
because amount of substance and luminous intensity cannot be recovered once dropped.
That is the asymmetry: one can reduce ISQ to LTMCT, but not conjure the extra base
quantities back without adding them.
@[expose] public section
The function underlying toISQHom: fix length, mass, time and temperature, and
send PhysLib's charge generator to the derived ISQ charge I Β· T (the current
exponent is the charge exponent, and the time exponent absorbs it).
def toISQFun (d : Dimension LTMCTDimensionBase) : Dimension ISQDimensionBase :=
β¨fun
| .length => d.exponent .length
| .mass => d.exponent .mass
| .time => d.exponent .time + d.exponent .charge
| .current => d.exponent .charge
| .temperature => d.exponent .temperature
| .amount => 0
| .luminousIntensity => 0β©The dimension-preserving embedding of PhysLib dimensions into the ISQ dimensions.
def toISQHom : Dimension LTMCTDimensionBase β* Dimension ISQDimensionBase where
toFun := toISQFun
map_one' := β’ toISQFun 1 = 1 b:ISQDimensionBaseβ’ (toISQFun 1).exponent b = exponent 1 b; β’ (toISQFun 1).exponent ISQDimensionBase.length = exponent 1 ISQDimensionBase.lengthβ’ (toISQFun 1).exponent ISQDimensionBase.mass = exponent 1 ISQDimensionBase.massβ’ (toISQFun 1).exponent ISQDimensionBase.time = exponent 1 ISQDimensionBase.timeβ’ (toISQFun 1).exponent ISQDimensionBase.current = exponent 1 ISQDimensionBase.currentβ’ (toISQFun 1).exponent ISQDimensionBase.temperature = exponent 1 ISQDimensionBase.temperatureβ’ (toISQFun 1).exponent ISQDimensionBase.amount = exponent 1 ISQDimensionBase.amountβ’ (toISQFun 1).exponent ISQDimensionBase.luminousIntensity = exponent 1 ISQDimensionBase.luminousIntensity β’ (toISQFun 1).exponent ISQDimensionBase.length = exponent 1 ISQDimensionBase.lengthβ’ (toISQFun 1).exponent ISQDimensionBase.mass = exponent 1 ISQDimensionBase.massβ’ (toISQFun 1).exponent ISQDimensionBase.time = exponent 1 ISQDimensionBase.timeβ’ (toISQFun 1).exponent ISQDimensionBase.current = exponent 1 ISQDimensionBase.currentβ’ (toISQFun 1).exponent ISQDimensionBase.temperature = exponent 1 ISQDimensionBase.temperatureβ’ (toISQFun 1).exponent ISQDimensionBase.amount = exponent 1 ISQDimensionBase.amountβ’ (toISQFun 1).exponent ISQDimensionBase.luminousIntensity = exponent 1 ISQDimensionBase.luminousIntensity All goals completed! π
map_mul' d1 d2 := d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 * d2).toISQFun = d1.toISQFun * d2.toISQFun
d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseb:ISQDimensionBaseβ’ (d1 * d2).toISQFun.exponent b = (d1.toISQFun * d2.toISQFun).exponent b
d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 * d2).toISQFun.exponent ISQDimensionBase.length = (d1.toISQFun * d2.toISQFun).exponent ISQDimensionBase.lengthd1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 * d2).toISQFun.exponent ISQDimensionBase.mass = (d1.toISQFun * d2.toISQFun).exponent ISQDimensionBase.massd1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 * d2).toISQFun.exponent ISQDimensionBase.time = (d1.toISQFun * d2.toISQFun).exponent ISQDimensionBase.timed1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 * d2).toISQFun.exponent ISQDimensionBase.current = (d1.toISQFun * d2.toISQFun).exponent ISQDimensionBase.currentd1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 * d2).toISQFun.exponent ISQDimensionBase.temperature =
(d1.toISQFun * d2.toISQFun).exponent ISQDimensionBase.temperatured1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 * d2).toISQFun.exponent ISQDimensionBase.amount = (d1.toISQFun * d2.toISQFun).exponent ISQDimensionBase.amountd1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 * d2).toISQFun.exponent ISQDimensionBase.luminousIntensity =
(d1.toISQFun * d2.toISQFun).exponent ISQDimensionBase.luminousIntensity d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 * d2).toISQFun.exponent ISQDimensionBase.length = (d1.toISQFun * d2.toISQFun).exponent ISQDimensionBase.lengthd1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 * d2).toISQFun.exponent ISQDimensionBase.mass = (d1.toISQFun * d2.toISQFun).exponent ISQDimensionBase.massd1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 * d2).toISQFun.exponent ISQDimensionBase.time = (d1.toISQFun * d2.toISQFun).exponent ISQDimensionBase.timed1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 * d2).toISQFun.exponent ISQDimensionBase.current = (d1.toISQFun * d2.toISQFun).exponent ISQDimensionBase.currentd1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 * d2).toISQFun.exponent ISQDimensionBase.temperature =
(d1.toISQFun * d2.toISQFun).exponent ISQDimensionBase.temperatured1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 * d2).toISQFun.exponent ISQDimensionBase.amount = (d1.toISQFun * d2.toISQFun).exponent ISQDimensionBase.amountd1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ (d1 * d2).toISQFun.exponent ISQDimensionBase.luminousIntensity =
(d1.toISQFun * d2.toISQFun).exponent ISQDimensionBase.luminousIntensity d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseβ’ 0 = 0 + 0
all_goals All goals completed! π
toISQHom applied to a dimension is toISQFun.
lemma toISQHom_apply (d : Dimension LTMCTDimensionBase) : toISQHom d = toISQFun d := rfl
The function underlying fromISQHom: fix length, mass and temperature, read
electric current as charge/time (the charge exponent is the current exponent, and the
time exponent subtracts it), and drop amount of substance and luminous intensity.
def fromISQFun (d : Dimension ISQDimensionBase) : Dimension LTMCTDimensionBase :=
β¨fun
| .length => d.exponent .length
| .time => d.exponent .time - d.exponent .current
| .mass => d.exponent .mass
| .charge => d.exponent .current
| .temperature => d.exponent .temperatureβ©The truth-preserving reduction of ISQ dimensions onto PhysLib's.
def fromISQHom : Dimension ISQDimensionBase β* Dimension LTMCTDimensionBase where
toFun := fromISQFun
map_one' := β’ fromISQFun 1 = 1 b:LTMCTDimensionBaseβ’ (fromISQFun 1).exponent b = exponent 1 b; β’ (fromISQFun 1).exponent LTMCTDimensionBase.length = exponent 1 LTMCTDimensionBase.lengthβ’ (fromISQFun 1).exponent LTMCTDimensionBase.time = exponent 1 LTMCTDimensionBase.timeβ’ (fromISQFun 1).exponent LTMCTDimensionBase.mass = exponent 1 LTMCTDimensionBase.massβ’ (fromISQFun 1).exponent LTMCTDimensionBase.charge = exponent 1 LTMCTDimensionBase.chargeβ’ (fromISQFun 1).exponent LTMCTDimensionBase.temperature = exponent 1 LTMCTDimensionBase.temperature β’ (fromISQFun 1).exponent LTMCTDimensionBase.length = exponent 1 LTMCTDimensionBase.lengthβ’ (fromISQFun 1).exponent LTMCTDimensionBase.time = exponent 1 LTMCTDimensionBase.timeβ’ (fromISQFun 1).exponent LTMCTDimensionBase.mass = exponent 1 LTMCTDimensionBase.massβ’ (fromISQFun 1).exponent LTMCTDimensionBase.charge = exponent 1 LTMCTDimensionBase.chargeβ’ (fromISQFun 1).exponent LTMCTDimensionBase.temperature = exponent 1 LTMCTDimensionBase.temperature All goals completed! π
map_mul' d1 d2 := d1:Dimension ISQDimensionBased2:Dimension ISQDimensionBaseβ’ (d1 * d2).fromISQFun = d1.fromISQFun * d2.fromISQFun
d1:Dimension ISQDimensionBased2:Dimension ISQDimensionBaseb:LTMCTDimensionBaseβ’ (d1 * d2).fromISQFun.exponent b = (d1.fromISQFun * d2.fromISQFun).exponent b
d1:Dimension ISQDimensionBased2:Dimension ISQDimensionBaseβ’ (d1 * d2).fromISQFun.exponent LTMCTDimensionBase.length =
(d1.fromISQFun * d2.fromISQFun).exponent LTMCTDimensionBase.lengthd1:Dimension ISQDimensionBased2:Dimension ISQDimensionBaseβ’ (d1 * d2).fromISQFun.exponent LTMCTDimensionBase.time = (d1.fromISQFun * d2.fromISQFun).exponent LTMCTDimensionBase.timed1:Dimension ISQDimensionBased2:Dimension ISQDimensionBaseβ’ (d1 * d2).fromISQFun.exponent LTMCTDimensionBase.mass = (d1.fromISQFun * d2.fromISQFun).exponent LTMCTDimensionBase.massd1:Dimension ISQDimensionBased2:Dimension ISQDimensionBaseβ’ (d1 * d2).fromISQFun.exponent LTMCTDimensionBase.charge =
(d1.fromISQFun * d2.fromISQFun).exponent LTMCTDimensionBase.charged1:Dimension ISQDimensionBased2:Dimension ISQDimensionBaseβ’ (d1 * d2).fromISQFun.exponent LTMCTDimensionBase.temperature =
(d1.fromISQFun * d2.fromISQFun).exponent LTMCTDimensionBase.temperature d1:Dimension ISQDimensionBased2:Dimension ISQDimensionBaseβ’ (d1 * d2).fromISQFun.exponent LTMCTDimensionBase.length =
(d1.fromISQFun * d2.fromISQFun).exponent LTMCTDimensionBase.lengthd1:Dimension ISQDimensionBased2:Dimension ISQDimensionBaseβ’ (d1 * d2).fromISQFun.exponent LTMCTDimensionBase.time = (d1.fromISQFun * d2.fromISQFun).exponent LTMCTDimensionBase.timed1:Dimension ISQDimensionBased2:Dimension ISQDimensionBaseβ’ (d1 * d2).fromISQFun.exponent LTMCTDimensionBase.mass = (d1.fromISQFun * d2.fromISQFun).exponent LTMCTDimensionBase.massd1:Dimension ISQDimensionBased2:Dimension ISQDimensionBaseβ’ (d1 * d2).fromISQFun.exponent LTMCTDimensionBase.charge =
(d1.fromISQFun * d2.fromISQFun).exponent LTMCTDimensionBase.charged1:Dimension ISQDimensionBased2:Dimension ISQDimensionBaseβ’ (d1 * d2).fromISQFun.exponent LTMCTDimensionBase.temperature =
(d1.fromISQFun * d2.fromISQFun).exponent LTMCTDimensionBase.temperature All goals completed! π
all_goals All goals completed! π
fromISQHom applied to a dimension is fromISQFun.
lemma fromISQHom_apply (d : Dimension ISQDimensionBase) : fromISQHom d = fromISQFun d := rfl
The projection recovers PhysLib's basis from its image under the embedding:
fromISQHom β toISQHom = id.
lemma fromISQHom_comp_toISQHom :
fromISQHom.comp toISQHom = MonoidHom.id (Dimension LTMCTDimensionBase) := β’ fromISQHom.comp toISQHom = MonoidHom.id (Dimension LTMCTDimensionBase)
d:Dimension LTMCTDimensionBaseb:LTMCTDimensionBaseβ’ ((fromISQHom.comp toISQHom) d).exponent b = ((MonoidHom.id (Dimension LTMCTDimensionBase)) d).exponent b
d:Dimension LTMCTDimensionBaseβ’ ((fromISQHom.comp toISQHom) d).exponent LTMCTDimensionBase.length =
((MonoidHom.id (Dimension LTMCTDimensionBase)) d).exponent LTMCTDimensionBase.lengthd:Dimension LTMCTDimensionBaseβ’ ((fromISQHom.comp toISQHom) d).exponent LTMCTDimensionBase.time =
((MonoidHom.id (Dimension LTMCTDimensionBase)) d).exponent LTMCTDimensionBase.timed:Dimension LTMCTDimensionBaseβ’ ((fromISQHom.comp toISQHom) d).exponent LTMCTDimensionBase.mass =
((MonoidHom.id (Dimension LTMCTDimensionBase)) d).exponent LTMCTDimensionBase.massd:Dimension LTMCTDimensionBaseβ’ ((fromISQHom.comp toISQHom) d).exponent LTMCTDimensionBase.charge =
((MonoidHom.id (Dimension LTMCTDimensionBase)) d).exponent LTMCTDimensionBase.charged:Dimension LTMCTDimensionBaseβ’ ((fromISQHom.comp toISQHom) d).exponent LTMCTDimensionBase.temperature =
((MonoidHom.id (Dimension LTMCTDimensionBase)) d).exponent LTMCTDimensionBase.temperature d:Dimension LTMCTDimensionBaseβ’ ((fromISQHom.comp toISQHom) d).exponent LTMCTDimensionBase.length =
((MonoidHom.id (Dimension LTMCTDimensionBase)) d).exponent LTMCTDimensionBase.lengthd:Dimension LTMCTDimensionBaseβ’ ((fromISQHom.comp toISQHom) d).exponent LTMCTDimensionBase.time =
((MonoidHom.id (Dimension LTMCTDimensionBase)) d).exponent LTMCTDimensionBase.timed:Dimension LTMCTDimensionBaseβ’ ((fromISQHom.comp toISQHom) d).exponent LTMCTDimensionBase.mass =
((MonoidHom.id (Dimension LTMCTDimensionBase)) d).exponent LTMCTDimensionBase.massd:Dimension LTMCTDimensionBaseβ’ ((fromISQHom.comp toISQHom) d).exponent LTMCTDimensionBase.charge =
((MonoidHom.id (Dimension LTMCTDimensionBase)) d).exponent LTMCTDimensionBase.charged:Dimension LTMCTDimensionBaseβ’ ((fromISQHom.comp toISQHom) d).exponent LTMCTDimensionBase.temperature =
((MonoidHom.id (Dimension LTMCTDimensionBase)) d).exponent LTMCTDimensionBase.temperature All goals completed! π
all_goals All goals completed! π
toISQHom is injective: PhysLib dimensions include faithfully into ISQ.
d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseh:toISQHom d1 = toISQHom d2key:β (b : ISQDimensionBase), d1.toISQFun.exponent b = d2.toISQFun.exponent bβ’ d1 = d2
ext b d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseh:toISQHom d1 = toISQHom d2key:β (b : ISQDimensionBase), d1.toISQFun.exponent b = d2.toISQFun.exponent bb:LTMCTDimensionBaseβ’ d1.exponent b = d2.exponent b
cases b with
| length => length d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseh:toISQHom d1 = toISQHom d2key:β (b : ISQDimensionBase), d1.toISQFun.exponent b = d2.toISQFun.exponent bβ’ d1.exponent LTMCTDimensionBase.length = d2.exponent LTMCTDimensionBase.length simpa only [toISQFun] using key .length All goals completed! π
| time => time d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseh:toISQHom d1 = toISQHom d2key:β (b : ISQDimensionBase), d1.toISQFun.exponent b = d2.toISQFun.exponent bβ’ d1.exponent LTMCTDimensionBase.time = d2.exponent LTMCTDimensionBase.time
have ht := key .time time d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseh:toISQHom d1 = toISQHom d2key:β (b : ISQDimensionBase), d1.toISQFun.exponent b = d2.toISQFun.exponent bht:d1.toISQFun.exponent ISQDimensionBase.time = d2.toISQFun.exponent ISQDimensionBase.timeβ’ d1.exponent LTMCTDimensionBase.time = d2.exponent LTMCTDimensionBase.time
have hc := key .current time d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseh:toISQHom d1 = toISQHom d2key:β (b : ISQDimensionBase), d1.toISQFun.exponent b = d2.toISQFun.exponent bht:d1.toISQFun.exponent ISQDimensionBase.time = d2.toISQFun.exponent ISQDimensionBase.timehc:d1.toISQFun.exponent ISQDimensionBase.current = d2.toISQFun.exponent ISQDimensionBase.currentβ’ d1.exponent LTMCTDimensionBase.time = d2.exponent LTMCTDimensionBase.time
simp only [toISQFun] at ht hc time d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseh:toISQHom d1 = toISQHom d2key:β (b : ISQDimensionBase), d1.toISQFun.exponent b = d2.toISQFun.exponent bht:d1.exponent LTMCTDimensionBase.time + d1.exponent LTMCTDimensionBase.charge =
d2.exponent LTMCTDimensionBase.time + d2.exponent LTMCTDimensionBase.chargehc:d1.exponent LTMCTDimensionBase.charge = d2.exponent LTMCTDimensionBase.chargeβ’ d1.exponent LTMCTDimensionBase.time = d2.exponent LTMCTDimensionBase.time
linarith All goals completed! π
| mass => mass d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseh:toISQHom d1 = toISQHom d2key:β (b : ISQDimensionBase), d1.toISQFun.exponent b = d2.toISQFun.exponent bβ’ d1.exponent LTMCTDimensionBase.mass = d2.exponent LTMCTDimensionBase.mass simpa only [toISQFun] using key .mass All goals completed! π
| charge => charge d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseh:toISQHom d1 = toISQHom d2key:β (b : ISQDimensionBase), d1.toISQFun.exponent b = d2.toISQFun.exponent bβ’ d1.exponent LTMCTDimensionBase.charge = d2.exponent LTMCTDimensionBase.charge simpa only [toISQFun] using key .current All goals completed! π
| temperature => temperature d1:Dimension LTMCTDimensionBased2:Dimension LTMCTDimensionBaseh:toISQHom d1 = toISQHom d2key:β (b : ISQDimensionBase), d1.toISQFun.exponent b = d2.toISQFun.exponent bβ’ d1.exponent LTMCTDimensionBase.temperature = d2.exponent LTMCTDimensionBase.temperature simpa only [toISQFun] using key .temperature All goals completed! π
fromISQHom is surjective: every PhysLib dimension is the reduction of some ISQ
dimension (namely its own embedding).
lemma fromISQHom_surjective : Function.Surjective fromISQHom := fun y =>
β¨toISQHom y, by y:Dimension LTMCTDimensionBaseβ’ fromISQHom (toISQHom y) = y rw [β MonoidHom.comp_apply, y:Dimension LTMCTDimensionBaseβ’ (fromISQHom.comp toISQHom) y = y All goals completed! π fromISQHom_comp_toISQHom, y:Dimension LTMCTDimensionBaseβ’ (MonoidHom.id (Dimension LTMCTDimensionBase)) y = y All goals completed! π MonoidHom.id_apply y:Dimension LTMCTDimensionBaseβ’ y = y All goals completed! π] All goals completed! πβ©
PhysLib's dimensions embed into the ISQ dimensions (charge β¦ I Β· T).
def ltmctToISQ : Embedding LTMCTDimensionBase ISQDimensionBase where
toHom := toISQHom
inj := toISQHom_injectiveThe ISQ dimensions project onto PhysLib's, reading current as charge/time and forgetting amount of substance and luminous intensity.
def isqToLTMCT : Projection ISQDimensionBase LTMCTDimensionBase where
toHom := fromISQHom
surj := fromISQHom_surjective
The projection is a retraction of the embedding: isqToLTMCT β ltmctToISQ = id. So
PhysLib's basis embeds faithfully into ISQ and is recovered by the projection, but not
conversely β amount of substance and luminous intensity cannot be recovered.
lemma isqToLTMCT_comp_ltmctToISQ :
isqToLTMCT.toHom.comp ltmctToISQ.toHom = MonoidHom.id (Dimension LTMCTDimensionBase) :=
fromISQHom_comp_toISQHom
The embedding is physically faithful on charge: PhysLib's charge generator Cπ
maps to the derived ISQ charge I Β· T.
lemma toISQHom_Cπ : toISQHom Cπ = ISQDimensionBase.charge := by β’ toISQHom Cπ = ISQDimensionBase.charge
ext b b:ISQDimensionBaseβ’ (toISQHom Cπ).exponent b = ISQDimensionBase.charge.exponent b
cases b length β’ (toISQHom Cπ).exponent ISQDimensionBase.length = ISQDimensionBase.charge.exponent ISQDimensionBase.lengthmass β’ (toISQHom Cπ).exponent ISQDimensionBase.mass = ISQDimensionBase.charge.exponent ISQDimensionBase.masstime β’ (toISQHom Cπ).exponent ISQDimensionBase.time = ISQDimensionBase.charge.exponent ISQDimensionBase.timecurrent β’ (toISQHom Cπ).exponent ISQDimensionBase.current = ISQDimensionBase.charge.exponent ISQDimensionBase.currenttemperature β’ (toISQHom Cπ).exponent ISQDimensionBase.temperature = ISQDimensionBase.charge.exponent ISQDimensionBase.temperatureamount β’ (toISQHom Cπ).exponent ISQDimensionBase.amount = ISQDimensionBase.charge.exponent ISQDimensionBase.amountluminousIntensity β’ (toISQHom Cπ).exponent ISQDimensionBase.luminousIntensity =
ISQDimensionBase.charge.exponent ISQDimensionBase.luminousIntensity <;> length β’ (toISQHom Cπ).exponent ISQDimensionBase.length = ISQDimensionBase.charge.exponent ISQDimensionBase.lengthmass β’ (toISQHom Cπ).exponent ISQDimensionBase.mass = ISQDimensionBase.charge.exponent ISQDimensionBase.masstime β’ (toISQHom Cπ).exponent ISQDimensionBase.time = ISQDimensionBase.charge.exponent ISQDimensionBase.timecurrent β’ (toISQHom Cπ).exponent ISQDimensionBase.current = ISQDimensionBase.charge.exponent ISQDimensionBase.currenttemperature β’ (toISQHom Cπ).exponent ISQDimensionBase.temperature = ISQDimensionBase.charge.exponent ISQDimensionBase.temperatureamount β’ (toISQHom Cπ).exponent ISQDimensionBase.amount = ISQDimensionBase.charge.exponent ISQDimensionBase.amountluminousIntensity β’ (toISQHom Cπ).exponent ISQDimensionBase.luminousIntensity =
ISQDimensionBase.charge.exponent ISQDimensionBase.luminousIntensity simp [toISQHom_apply, toISQFun, Cπ, ofLTMCTDimensionBase,
ISQDimensionBase.charge, single_exponent] All goals completed! π