-- Mathlib/MeasureTheory/Group/FundamentalDomain.lean
theorem QuotientMeasureEqMeasurePreimage.isFiniteMeasure_quotient
    (μ : Measure (Quotient α_mod_G)) [QuotientMeasureEqMeasurePreimage ν μ]
    [hasFun : HasFundamentalDomain G α ν] (h : covolume G α ν ≠ ∞) :
    IsFiniteMeasure μ

Proof state:
G : Type u_1
α : Type u_3
inst✝⁷ : Group G
inst✝⁶ : MulAction G α
inst✝⁵ : MeasurableSpace α
ν : Measure α
inst✝⁴ : SMulInvariantMeasure G α ν
inst✝³ : Countable G
inst✝² : MeasurableSpace G
inst✝¹ : MeasurableSMul G α
μ : Measure (Quotient α_mod_G)
inst✝ : QuotientMeasureEqMeasurePreimage ν μ
hasFun : HasFundamentalDomain G α ν
h : covolume G α ν ≠ ⊤
𝓕 : Set α
h𝓕 : IsFundamentalDomain G 𝓕 ν
⊢ Fact (ν 𝓕 < ⊤)

Tactic:
apply Fact.mk

Result:
case out
G : Type u_1
α : Type u_3
inst✝⁷ : Group G
inst✝⁶ : MulAction G α
inst✝⁵ : MeasurableSpace α
ν : Measure α
inst✝⁴ : SMulInvariantMeasure G α ν
inst✝³ : Countable G
inst✝² : MeasurableSpace G
inst✝¹ : MeasurableSMul G α
μ : Measure (Quotient α_mod_G)
inst✝ : QuotientMeasureEqMeasurePreimage ν μ
hasFun : HasFundamentalDomain G α ν
h : covolume G α ν ≠ ⊤
𝓕 : Set α
h𝓕 : IsFundamentalDomain G 𝓕 ν
⊢ ν 𝓕 < ⊤

Proof state:
case h.e'_3
G : Type u_1
α : Type u_3
inst✝⁷ : Group G
inst✝⁶ : MulAction G α
inst✝⁵ : MeasurableSpace α
ν : Measure α
inst✝⁴ : SMulInvariantMeasure G α ν
inst✝³ : Countable G
inst✝² : MeasurableSpace G
inst✝¹ : MeasurableSMul G α
μ : Measure (Quotient α_mod_G)
inst✝ : QuotientMeasureEqMeasurePreimage ν μ
hasFun : HasFundamentalDomain G α ν
h : covolume G α ν ≠ ⊤
𝓕 : Set α
h𝓕 : IsFundamentalDomain G 𝓕 ν
⊢ ν 𝓕 = covolume G α ν

Tactic:
exact (h𝓕.covolume_eq_volume ν).symm

Result:
no goals

Proof state:
case out
G : Type u_1
α : Type u_3
inst✝⁷ : Group G
inst✝⁶ : MulAction G α
inst✝⁵ : MeasurableSpace α
ν : Measure α
inst✝⁴ : SMulInvariantMeasure G α ν
inst✝³ : Countable G
inst✝² : MeasurableSpace G
inst✝¹ : MeasurableSMul G α
μ : Measure (Quotient α_mod_G)
inst✝ : QuotientMeasureEqMeasurePreimage ν μ
hasFun : HasFundamentalDomain G α ν
h : covolume G α ν ≠ ⊤
𝓕 : Set α
h𝓕 : IsFundamentalDomain G 𝓕 ν
⊢ ν 𝓕 < ⊤

Tactic:
convert Ne.lt_top h

Result:
case h.e'_3
G : Type u_1
α : Type u_3
inst✝⁷ : Group G
inst✝⁶ : MulAction G α
inst✝⁵ : MeasurableSpace α
ν : Measure α
inst✝⁴ : SMulInvariantMeasure G α ν
inst✝³ : Countable G
inst✝² : MeasurableSpace G
inst✝¹ : MeasurableSMul G α
μ : Measure (Quotient α_mod_G)
inst✝ : QuotientMeasureEqMeasurePreimage ν μ
hasFun : HasFundamentalDomain G α ν
h : covolume G α ν ≠ ⊤
𝓕 : Set α
h𝓕 : IsFundamentalDomain G 𝓕 ν
⊢ ν 𝓕 = covolume G α ν

Proof state:
case intro
G : Type u_1
α : Type u_3
inst✝⁷ : Group G
inst✝⁶ : MulAction G α
inst✝⁵ : MeasurableSpace α
ν : Measure α
inst✝⁴ : SMulInvariantMeasure G α ν
inst✝³ : Countable G
inst✝² : MeasurableSpace G
inst✝¹ : MeasurableSMul G α
μ : Measure (Quotient α_mod_G)
inst✝ : QuotientMeasureEqMeasurePreimage ν μ
hasFun : HasFundamentalDomain G α ν
h : covolume G α ν ≠ ⊤
𝓕 : Set α
h𝓕 : IsFundamentalDomain G 𝓕 ν
⊢ IsFiniteMeasure μ

Tactic:
rw [h𝓕.projection_respects_measure (μ := μ)]

Result:
case intro
G : Type u_1
α : Type u_3
inst✝⁷ : Group G
inst✝⁶ : MulAction G α
inst✝⁵ : MeasurableSpace α
ν : Measure α
inst✝⁴ : SMulInvariantMeasure G α ν
inst✝³ : Countable G
inst✝² : MeasurableSpace G
inst✝¹ : MeasurableSMul G α
μ : Measure (Quotient α_mod_G)
inst✝ : QuotientMeasureEqMeasurePreimage ν μ
hasFun : HasFundamentalDomain G α ν
h : covolume G α ν ≠ ⊤
𝓕 : Set α
h𝓕 : IsFundamentalDomain G 𝓕 ν
⊢ IsFiniteMeasure (Measure.map (Quotient.mk α_mod_G) (ν.restrict 𝓕))

Proof state:
G : Type u_1
α : Type u_3
inst✝⁷ : Group G
inst✝⁶ : MulAction G α
inst✝⁵ : MeasurableSpace α
ν : Measure α
inst✝⁴ : SMulInvariantMeasure G α ν
inst✝³ : Countable G
inst✝² : MeasurableSpace G
inst✝¹ : MeasurableSMul G α
μ : Measure (Quotient α_mod_G)
inst✝ : QuotientMeasureEqMeasurePreimage ν μ
hasFun : HasFundamentalDomain G α ν
h : covolume G α ν ≠ ⊤
⊢ IsFiniteMeasure μ

Tactic:
obtain ⟨𝓕, h𝓕⟩ := hasFun.ExistsIsFundamentalDomain

Result:
case intro
G : Type u_1
α : Type u_3
inst✝⁷ : Group G
inst✝⁶ : MulAction G α
inst✝⁵ : MeasurableSpace α
ν : Measure α
inst✝⁴ : SMulInvariantMeasure G α ν
inst✝³ : Countable G
inst✝² : MeasurableSpace G
inst✝¹ : MeasurableSMul G α
μ : Measure (Quotient α_mod_G)
inst✝ : QuotientMeasureEqMeasurePreimage ν μ
hasFun : HasFundamentalDomain G α ν
h : covolume G α ν ≠ ⊤
𝓕 : Set α
h𝓕 : IsFundamentalDomain G 𝓕 ν
⊢ IsFiniteMeasure μ

Proof state:
case intro
G : Type u_1
α : Type u_3
inst✝⁷ : Group G
inst✝⁶ : MulAction G α
inst✝⁵ : MeasurableSpace α
ν : Measure α
inst✝⁴ : SMulInvariantMeasure G α ν
inst✝³ : Countable G
inst✝² : MeasurableSpace G
inst✝¹ : MeasurableSMul G α
μ : Measure (Quotient α_mod_G)
inst✝ : QuotientMeasureEqMeasurePreimage ν μ
hasFun : HasFundamentalDomain G α ν
h : covolume G α ν ≠ ⊤
𝓕 : Set α
h𝓕 : IsFundamentalDomain G 𝓕 ν
this : Fact (ν 𝓕 < ⊤)
⊢ IsFiniteMeasure (Measure.map (Quotient.mk α_mod_G) (ν.restrict 𝓕))

Tactic:
infer_instance

Result:
no goals

Proof state:
case intro
G : Type u_1
α : Type u_3
inst✝⁷ : Group G
inst✝⁶ : MulAction G α
inst✝⁵ : MeasurableSpace α
ν : Measure α
inst✝⁴ : SMulInvariantMeasure G α ν
inst✝³ : Countable G
inst✝² : MeasurableSpace G
inst✝¹ : MeasurableSMul G α
μ : Measure (Quotient α_mod_G)
inst✝ : QuotientMeasureEqMeasurePreimage ν μ
hasFun : HasFundamentalDomain G α ν
h : covolume G α ν ≠ ⊤
𝓕 : Set α
h𝓕 : IsFundamentalDomain G 𝓕 ν
⊢ IsFiniteMeasure (Measure.map (Quotient.mk α_mod_G) (ν.restrict 𝓕))

Tactic:
have : Fact (ν 𝓕 < ∞) := by
  apply Fact.mk
  convert Ne.lt_top h
  exact (h𝓕.covolume_eq_volume ν).symm

Result:
case intro
G : Type u_1
α : Type u_3
inst✝⁷ : Group G
inst✝⁶ : MulAction G α
inst✝⁵ : MeasurableSpace α
ν : Measure α
inst✝⁴ : SMulInvariantMeasure G α ν
inst✝³ : Countable G
inst✝² : MeasurableSpace G
inst✝¹ : MeasurableSMul G α
μ : Measure (Quotient α_mod_G)
inst✝ : QuotientMeasureEqMeasurePreimage ν μ
hasFun : HasFundamentalDomain G α ν
h : covolume G α ν ≠ ⊤
𝓕 : Set α
h𝓕 : IsFundamentalDomain G 𝓕 ν
this : Fact (ν 𝓕 < ⊤)
⊢ IsFiniteMeasure (Measure.map (Quotient.mk α_mod_G) (ν.restrict 𝓕))