Theorem: CompletelyDistribLattice.MinimalAxioms.iSup_iInf_eq
File: Mathlib/Order/CompleteBooleanAlgebra.lean

Proof steps:
state_before: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
⊢ let x := minAx.toCompleteLattice;
  ⨆ i, ⨅ j, f i j = ⨅ g, ⨆ i, f i (g i)
state_after: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
⊢ let x := minAx.toCompleteLattice;
  ⨆ i, ⨅ j, f i j = ⨅ g, ⨆ i, f i (g i)
tactic: let _ := minAx.toCompleteLattice
state_before: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
⊢ let x := minAx.toCompleteLattice;
  ⨆ i, ⨅ j, f i j = ⨅ g, ⨆ i, f i (g i)
state_after: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
⊢ ⨅ g, ⨆ i, f i (g i) ≤ ⨆ i, ⨅ j, f i j
tactic: refine le_antisymm iSup_iInf_le ?_
state_before: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
⊢ ⨅ g, ⨆ i, f i (g i) ≤ ⨆ i, ⨅ j, f i j
state_after: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
⊢ ⨆ g, ⨅ i, f (g i) (i (g i)) ≤ ⨆ i, ⨅ j, f i j
tactic: rw [minAx.iInf_iSup_eq']
state_before: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
⊢ ⨆ g, ⨅ i, f (g i) (i (g i)) ≤ ⨆ i, ⨅ j, f i j
state_after: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
g : ((i : ι) → κ i) → ι
⊢ ⨅ i, f (g i) (i (g i)) ≤ ⨆ i, ⨅ j, f i j
tactic: refine iSup_le fun g => ?_
state_before: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
g : ((i : ι) → κ i) → ι
⊢ ⨅ i, f (g i) (i (g i)) ≤ ⨆ i, ⨅ j, f i j
state_after: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
g : ((i : ι) → κ i) → ι
a : ι
ha : ∀ (b : κ a), ∃ f, ∃ (h : a = g f), h ▸ b = f (g f)
⊢ ⨅ i, f (g i) (i (g i)) ≤ ⨆ i, ⨅ j, f i j
tactic: have ⟨a, ha⟩ : ∃ a, ∀ b, ∃ f, ∃ h : a = g f, h ▸ b = f (g f) := of_not_not fun h => by
    push_neg at h
    choose h hh using h
    have := hh _ h rfl
    contradiction
state_before: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
g : ((i : ι) → κ i) → ι
a : ι
ha : ∀ (b : κ a), ∃ f, ∃ (h : a = g f), h ▸ b = f (g f)
⊢ ⨅ i, f (g i) (i (g i)) ≤ ⨆ i, ⨅ j, f i j
state_after: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
g : ((i : ι) → κ i) → ι
a : ι
ha : ∀ (b : κ a), ∃ f, ∃ (h : a = g f), h ▸ b = f (g f)
⊢ ⨅ i, f (g i) (i (g i)) ≤ ⨅ j, f a j
tactic: refine le_trans ?_ (le_iSup _ a)
state_before: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
g : ((i : ι) → κ i) → ι
a : ι
ha : ∀ (b : κ a), ∃ f, ∃ (h : a = g f), h ▸ b = f (g f)
⊢ ⨅ i, f (g i) (i (g i)) ≤ ⨅ j, f a j
state_after: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
g : ((i : ι) → κ i) → ι
a : ι
ha : ∀ (b : κ a), ∃ f, ∃ (h : a = g f), h ▸ b = f (g f)
b : κ a
⊢ ⨅ i, f (g i) (i (g i)) ≤ f a b
tactic: refine le_iInf fun b => ?_
state_before: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
g : ((i : ι) → κ i) → ι
a : ι
ha : ∀ (b : κ a), ∃ f, ∃ (h : a = g f), h ▸ b = f (g f)
b : κ a
⊢ ⨅ i, f (g i) (i (g i)) ≤ f a b
state_after: case intro.intro
α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
g : ((i : ι) → κ i) → ι
h : (i : ι) → κ i
ha : ∀ (b : κ (g h)), ∃ f, ∃ (h_1 : g h = g f), h_1 ▸ b = f (g f)
⊢ ⨅ i, f (g i) (i (g i)) ≤ f (g h) (h (g h))
tactic: obtain ⟨h, rfl, rfl⟩ := ha b
state_before: case intro.intro
α : Type u
β : Type v
ι : Sort w
κ : ι → Sort w'
minAx : MinimalAxioms α
f : (i : ι) → κ i → α
x✝ : CompleteLattice α := minAx.toCompleteLattice
g : ((i : ι) → κ i) → ι
h : (i : ι) → κ i
ha : ∀ (b : κ (g h)), ∃ f, ∃ (h_1 : g h = g f), h_1 ▸ b = f (g f)
⊢ ⨅ i, f (g i) (i (g i)) ≤ f (g h) (h (g h))
state_after: no goals
tactic: exact iInf_le _ _