@@ -136,12 +136,14 @@ theorem InnerProductSpace.euclideanHausdorffMeasure_eq_volume :
136136 ← (stdOrthonormalBasis ℝ V).repr.toIsometryEquiv
137137 |>.symm.measurePreserving_euclideanHausdorffMeasure _ |>.map_eq,
138138 EuclideanSpace.euclideanHausdorffMeasure_eq_volume]
139- rfl
139+ simp
140140
141141/-!
142142### `μHE[d]` on an affine space matches the volume measure on the associated inner product space.
143143-/
144-
144+ /- We may want to endow an affine space with a `MeasureSpace` that transfers `volume` from its
145+ associated inner product space. If it is implemented, we can unify this lemma with the previous one.
146+ -/
145147theorem EuclideanGeometry.euclideanHausdorffMeasure_eq (p : P) :
146148 μHE[Module.finrank ℝ V] = volume.map (IsometryEquiv.vaddConst p) := by
147149 have h := (IsometryEquiv.vaddConst p)
@@ -162,3 +164,25 @@ omit [MeasurableSpace V] [BorelSpace V] [FiniteDimensional ℝ V] in
162164theorem AffineSubspace.euclideanHausdorffMeasure_coe_image (d : ℕ) (s : AffineSubspace ℝ P)
163165 (t : Set s) : μHE[d] (Subtype.val '' t) = μHE[d] t :=
164166 isometry_subtype_coe.euclideanHausdorffMeasure_image _
167+
168+ /-!
169+ ### `μHE[d]` is translation invariant
170+ -/
171+
172+ instance (d : ℕ) : VAddInvariantMeasure V P μHE[d] where
173+ measure_preimage_vadd c s hs := by
174+ simp_rw [euclideanHausdorffMeasure_def, smul_apply, nnreal_smul_coe_apply]
175+ have h : (0 : ℝ) ≤ d ∨ Function.Surjective fun (x : P) => -c +ᵥ x := by simp
176+ convert congr((volume.addHaarScalarFactor μH[d]) * $(hausdorffMeasure_vadd (-c) h s))
177+ ext y
178+ simp [Set.mem_neg_vadd_set_iff]
179+
180+ instance [AddGroup X] [IsIsometricVAdd X X] (d : ℕ) :
181+ (μHE[d] : Measure X).IsAddLeftInvariant := by
182+ rw [euclideanHausdorffMeasure_def]
183+ apply MeasureTheory.isAddLeftInvariant_smul
184+
185+ instance [AddGroup X] [IsIsometricVAdd Xᵃᵒᵖ X] (d : ℕ) :
186+ (μHE[d] : Measure X).IsAddRightInvariant := by
187+ rw [euclideanHausdorffMeasure_def]
188+ apply MeasureTheory.isAddRightInvariant_smul
0 commit comments