Theorem: NumberField.mixedEmbedding.convexBodySum_volume_eq_zero_of_le_zero
File: Mathlib/NumberTheory/NumberField/CanonicalEmbedding/ConvexBody.lean

tactic: obtain hB | hB := lt_or_eq_of_le hB
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB : B ≤ 0
⊢ volume (convexBodySum K B) = 0
state_after: case inl
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B < 0
⊢ volume (convexBodySum K B) = 0

case inr
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B = 0
⊢ volume (convexBodySum K B) = 0

tactic: suffices convexBodySum K B = ∅ by rw [this, measure_empty]
state_before: case inl
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B < 0
⊢ volume (convexBodySum K B) = 0
state_after: case inl
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B < 0
⊢ convexBodySum K B = ∅

tactic: ext x
state_before: case inl
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B < 0
⊢ convexBodySum K B = ∅
state_after: case inl.h
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B < 0
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
⊢ x ∈ convexBodySum K B ↔ x ∈ ∅

tactic: refine ⟨fun hx => ?_, fun h => h.elim⟩
state_before: case inl.h
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B < 0
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
⊢ x ∈ convexBodySum K B ↔ x ∈ ∅
state_after: case inl.h
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B < 0
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
hx : x ∈ convexBodySum K B
⊢ x ∈ ∅

tactic: rw [Set.mem_setOf] at hx
state_before: case inl.h
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B < 0
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
hx : x ∈ convexBodySum K B
⊢ x ∈ ∅
state_after: case inl.h
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B < 0
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
hx : convexBodySumFun x ≤ B
⊢ x ∈ ∅

tactic: linarith [convexBodySumFun_nonneg x]
state_before: case inl.h
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B < 0
x : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
hx : convexBodySumFun x ≤ B
⊢ x ∈ ∅
state_after: no goals

tactic: rw [this, measure_empty]
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B < 0
this : convexBodySum K B = ∅
⊢ volume (convexBodySum K B) = 0
state_after: no goals

tactic: suffices convexBodySum K B = { 0 } by rw [this, measure_singleton]
state_before: case inr
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B = 0
⊢ volume (convexBodySum K B) = 0
state_after: case inr
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B = 0
⊢ convexBodySum K B = {0}

tactic: ext
state_before: case inr
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B = 0
⊢ convexBodySum K B = {0}
state_after: case inr.h
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B = 0
x✝ : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
⊢ x✝ ∈ convexBodySum K B ↔ x✝ ∈ {0}

tactic: rw [convexBodySum, Set.mem_setOf_eq, Set.mem_singleton_iff, hB, ← convexBodySumFun_eq_zero_iff]
state_before: case inr.h
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B = 0
x✝ : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
⊢ x✝ ∈ convexBodySum K B ↔ x✝ ∈ {0}
state_after: case inr.h
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B = 0
x✝ : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
⊢ convexBodySumFun x✝ ≤ 0 ↔ convexBodySumFun x✝ = 0

tactic: exact (convexBodySumFun_nonneg _).le_iff_eq
state_before: case inr.h
K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B = 0
x✝ : ({ w // w.IsReal } → ℝ) × ({ w // w.IsComplex } → ℂ)
⊢ convexBodySumFun x✝ ≤ 0 ↔ convexBodySumFun x✝ = 0
state_after: no goals

tactic: rw [this, measure_singleton]
state_before: K : Type u_1
inst✝¹ : Field K
inst✝ : NumberField K
B✝ B : ℝ
hB✝ : B ≤ 0
hB : B = 0
this : convexBodySum K B = {0}
⊢ volume (convexBodySum K B) = 0
state_after: no goals