namespace http://mathhub.info/MitM/Foundation/Units ❚
import rules scala://rules.mitm.mmt.kwarc.info ❚
theory Dimensions : ur:?LF = 
  /T An SI Dimension. ❙
  dimension : type❙
  
  include ☞http://mathhub.info/MitM/Foundation?IntLiterals ❙
  
  /T A normalized representation used for equality reasoning etc. ❙
  NormedDimension : ℤ ⟶ ℤ ⟶ ℤ ⟶ ℤ ⟶ ℤ ⟶ ℤ ⟶ ℤ ⟶ dimension ❙
  /T We want the actual dimensions as a dimension. ❙
  /T We use the SI base dimensions for this. ❙
  Length : dimension ❘ // = NormedDimension 1 0 0 0 0 0 0❙
  Time : dimension❘ // = NormedDimension 0 1 0 0 0 0 0❙
  Mass : dimension❘ // = NormedDimension 0 0 1 0 0 0 0❙
  Amount : dimension❘ // = NormedDimension 0 0 0 1 0 0 0❙
  Temperature : dimension❘ // = NormedDimension 0 0 0 0 1 0 0❙
  Current : dimension❘ // = NormedDimension 0 0 0 0 0 1 0❙
  LuminousIntensity : dimension❘ // = NormedDimension 0 0 0 0 0 0 1 ❙
  DimNone : dimension❘ // = NormedDimension 0 0 0 0 0 0 0 ❙
  /T Now we want to make even more dimensions. ❙
  DimTimes: dimension ⟶ dimension ⟶ dimension ❘ # 1 *' 2 ❙
  DimDiv: dimension ⟶ dimension ⟶ dimension ❘ # 1 /' 2 ❙
  
  rule rules?DimEq ❙
❚
theory DimensionsExtended : ur:?LF =
  include ?Dimensions❙
  // Dimensionless stuff❙
  Information : dimension ❘= DimNone❙
  // Velocity, Accelleration ❙
  Velocity : dimension ❘= Length /' Time❙
  Acceleration : dimension ❘= Velocity /' Time❙
  // Area and Volume❙
  Area : dimension ❘= Length *' Length❙
  Volume : dimension ❘= Area *' Length❙
  
  // Densities ❙
  VolumeDensity : dimension ❘= DimNone /' Volume ❘  // # Density //?? ❙
  AreaDensity : dimension ❘= DimNone /' Area❙
  LineDensity : dimension ❘= DimNone /' Length❙
  // Force and Pressure❙                   
  Force : dimension ❘= Mass *' Acceleration❙
  Pressure : dimension ❘= Force /' Area❙
  // Electric Charge and Charge Densities❙
  ElectricCharge : dimension ❘= Current *' Time ❙
  ElectricChargeVolumeDensity : dimension ❘= ElectricCharge *' VolumeDensity ❘ # ElectricChargeDensity❙
  ElectricChargeAreaDensity : dimension ❘= ElectricCharge *' AreaDensity ❘ # ElectricChargeSurfaceDensity❙
  ElectricChargeLineDensity : dimension ❘= ElectricCharge *' LineDensity❙
  
  // Energy and Power❙
  Energy : dimension ❘= Force *' Length ❙
  Power : dimension ❘= Energy /' Time❙
  
  // Basic Electrostatic Units❙
  ElectricPotential : dimension ❘= Energy /' ElectricCharge ❘ # Voltage❙
  ElectricDisplacement : dimension ❘ = ElectricCharge /' Area ❙ 
  ElectricCurrentDensity : dimension ❘= Current *' AreaDensity ❘ # Polarization ❘ // # CurrentDensity ❙
  ElectricField : dimension ❘ = Voltage /' Length ❘ # ElectricFieldIntensity ❙
  
  // Other Electrical Units❙
  ElectricalResistance : dimension ❘ = Voltage /' Current ❙
  ElectricalResistivity : dimension ❘ = ElectricalResistance *' Area /' Length ❙
  ElectricalConductivity : dimension ❘ = DimNone /' ElectricalResistivity ❙ 
  ElectricFlux : dimension ❘ = Voltage *' Length ❙ 
  ElectricalCapacitance : dimension ❘ = ElectricCharge /' Voltage ❙
  ElectricalPermittivity : dimension ❘ = ElectricalCapacitance /' Length ❙
  ElectricalMobility : dimension ❘ = Velocity /' ElectricField ❙
  
  IonRecombination : dimension ❘ = Volume /' Time ❙
  // Magnetism // Hoping we don't need that for now
  
  // Heat-related , cf. Thermistor example❙
  Heat : dimension ❘ = Energy ❙ 
	// ThermalConductivity : dimension ❘ = Energy /' Length /' Temperature ❙ // TODO Name clash with quantities.mmt ❙
	ThermalHeatFlux : dimension ❘ = Energy /' Area ❙ 
  
❚