Theorem: Dfinsupp.lex_fibration
File: Mathlib/Data/Dfinsupp/WellFounded.lean

tactic: rintro ⟨p, x₁, x₂⟩ x ⟨i, hr, hs⟩
state_before: ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
⊢ Fibration (InvImage (GameAdd (Dfinsupp.Lex r s) (Dfinsupp.Lex r s)) snd) (Dfinsupp.Lex r s) fun x =>
    piecewise x.snd.fst x.snd.snd x.fst

tactic: simp_rw [piecewise_apply] at hs hr
state_before: case mk.mk.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = ↑((fun x => piecewise x.snd.fst x.snd.snd x.fst) (p, x₁, x₂)) j
hs : s i (↑x i) (↑((fun x => piecewise x.snd.fst x.snd.snd x.fst) (p, x₁, x₂)) i)
⊢ ∃ a',
    InvImage (GameAdd (Dfinsupp.Lex r s) (Dfinsupp.Lex r s)) snd a' (p, x₁, x₂) ∧
      (fun x => piecewise x.snd.fst x.snd.snd x.fst) a' = x

tactic: split_ifs at hs with hp
state_before: case mk.mk.intro.intro
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hs : s i (↑x i) (if i ∈ p then ↑x₁ i else ↑x₂ i)
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
⊢ ∃ a',
    InvImage (GameAdd (Dfinsupp.Lex r s) (Dfinsupp.Lex r s)) snd a' (p, x₁, x₂) ∧
      (fun x => piecewise x.snd.fst x.snd.snd x.fst) a' = x

tactic: refine ⟨⟨{ j | r j i → j ∈ p }, piecewise x₁ x { j | r j i }, x₂⟩,
  .fst ⟨i, fun j hj ↦ ?_, ?_⟩, ?_⟩ <;> simp only [piecewise_apply, Set.mem_setOf_eq]
state_before: case mk.mk.intro.intro.inl
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : i ∈ p
hs : s i (↑x i) (↑x₁ i)
⊢ ∃ a',
    InvImage (GameAdd (Dfinsupp.Lex r s) (Dfinsupp.Lex r s)) snd a' (p, x₁, x₂) ∧
      (fun x => piecewise x.snd.fst x.snd.snd x.fst) a' = x

tactic: simp only [if_pos hj]
state_before: case mk.mk.intro.intro.inl.refine_1
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : i ∈ p
hs : s i (↑x i) (↑x₁ i)
j : ι
hj : r j i
⊢ (if r j i then ↑x₁ j else ↑x j) = ↑x₁ j

tactic: split_ifs with hi
state_before: case mk.mk.intro.intro.inl.refine_2
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : i ∈ p
hs : s i (↑x i) (↑x₁ i)
⊢ s i (if r i i then ↑x₁ i else ↑x i) (↑x₁ i)

tactic: rwa [hr i hi, if_pos hp] at hs
state_before: case mk.mk.intro.intro.inl.refine_2.inl
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : i ∈ p
hs : s i (↑x i) (↑x₁ i)
hi : r i i
⊢ s i (↑x₁ i) (↑x₁ i)

tactic: assumption
state_before: case mk.mk.intro.intro.inl.refine_2.inr
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : i ∈ p
hs : s i (↑x i) (↑x₁ i)
hi : ¬r i i
⊢ s i (↑x i) (↑x₁ i)

tactic: ext1 j
state_before: case mk.mk.intro.intro.inl.refine_3
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : i ∈ p
hs : s i (↑x i) (↑x₁ i)
⊢ piecewise (piecewise x₁ x {j | r j i}) x₂ {j | r j i → j ∈ p} = x

tactic: simp only [piecewise_apply, Set.mem_setOf_eq]
state_before: case mk.mk.intro.intro.inl.refine_3.h
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : i ∈ p
hs : s i (↑x i) (↑x₁ i)
j : ι
⊢ ↑(piecewise (piecewise x₁ x {j | r j i}) x₂ {j | r j i → j ∈ p}) j = ↑x j

tactic: split_ifs with h₁ h₂ <;> try rfl
state_before: case mk.mk.intro.intro.inl.refine_3.h
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : i ∈ p
hs : s i (↑x i) (↑x₁ i)
j : ι
⊢ (if r j i → j ∈ p then if r j i then ↑x₁ j else ↑x j else ↑x₂ j) = ↑x j

tactic: rfl
state_before: case mk.mk.intro.intro.inl.refine_3.h.inr
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : i ∈ p
hs : s i (↑x i) (↑x₁ i)
j : ι
h₁ : ¬(r j i → j ∈ p)
⊢ ↑x₂ j = ↑x j

tactic: rw [hr j h₂, if_pos (h₁ h₂)]
state_before: case mk.mk.intro.intro.inl.refine_3.h.inl.inl
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : i ∈ p
hs : s i (↑x i) (↑x₁ i)
j : ι
h₁ : r j i → j ∈ p
h₂ : r j i
⊢ ↑x₁ j = ↑x j

tactic: rw [not_imp] at h₁
state_before: case mk.mk.intro.intro.inl.refine_3.h.inr
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : i ∈ p
hs : s i (↑x i) (↑x₁ i)
j : ι
h₁ : ¬(r j i → j ∈ p)
⊢ ↑x₂ j = ↑x j

tactic: rw [hr j h₁.1, if_neg h₁.2]
state_before: case mk.mk.intro.intro.inl.refine_3.h.inr
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : i ∈ p
hs : s i (↑x i) (↑x₁ i)
j : ι
h₁ : r j i ∧ ¬j ∈ p
⊢ ↑x₂ j = ↑x j

tactic: refine ⟨⟨{ j | r j i ∧ j ∈ p }, x₁, piecewise x₂ x { j | r j i }⟩,
  .snd ⟨i, fun j hj ↦ ?_, ?_⟩, ?_⟩ <;> simp only [piecewise_apply, Set.mem_setOf_eq]
state_before: case mk.mk.intro.intro.inr
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : ¬i ∈ p
hs : s i (↑x i) (↑x₂ i)
⊢ ∃ a',
    InvImage (GameAdd (Dfinsupp.Lex r s) (Dfinsupp.Lex r s)) snd a' (p, x₁, x₂) ∧
      (fun x => piecewise x.snd.fst x.snd.snd x.fst) a' = x

tactic: exact if_pos hj
state_before: case mk.mk.intro.intro.inr.refine_1
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : ¬i ∈ p
hs : s i (↑x i) (↑x₂ i)
j : ι
hj : r j i
⊢ (if r j i then ↑x₂ j else ↑x j) = ↑x₂ j

tactic: split_ifs with hi
state_before: case mk.mk.intro.intro.inr.refine_2
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : ¬i ∈ p
hs : s i (↑x i) (↑x₂ i)
⊢ s i (if r i i then ↑x₂ i else ↑x i) (↑x₂ i)

tactic: rwa [hr i hi, if_neg hp] at hs
state_before: case mk.mk.intro.intro.inr.refine_2.inl
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : ¬i ∈ p
hs : s i (↑x i) (↑x₂ i)
hi : r i i
⊢ s i (↑x₂ i) (↑x₂ i)

tactic: assumption
state_before: case mk.mk.intro.intro.inr.refine_2.inr
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : ¬i ∈ p
hs : s i (↑x i) (↑x₂ i)
hi : ¬r i i
⊢ s i (↑x i) (↑x₂ i)

tactic: ext1 j
state_before: case mk.mk.intro.intro.inr.refine_3
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : ¬i ∈ p
hs : s i (↑x i) (↑x₂ i)
⊢ piecewise x₁ (piecewise x₂ x {j | r j i}) {j | r j i ∧ j ∈ p} = x

tactic: simp only [piecewise_apply, Set.mem_setOf_eq]
state_before: case mk.mk.intro.intro.inr.refine_3.h
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : ¬i ∈ p
hs : s i (↑x i) (↑x₂ i)
j : ι
⊢ ↑(piecewise x₁ (piecewise x₂ x {j | r j i}) {j | r j i ∧ j ∈ p}) j = ↑x j

tactic: split_ifs with h₁ h₂ <;> try rfl
state_before: case mk.mk.intro.intro.inr.refine_3.h
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : ¬i ∈ p
hs : s i (↑x i) (↑x₂ i)
j : ι
⊢ (if r j i ∧ j ∈ p then ↑x₁ j else if r j i then ↑x₂ j else ↑x j) = ↑x j

tactic: rfl
state_before: case mk.mk.intro.intro.inr.refine_3.h.inr.inr
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : ¬i ∈ p
hs : s i (↑x i) (↑x₂ i)
j : ι
h₁ : ¬(r j i ∧ j ∈ p)
h₂ : ¬r j i
⊢ ↑x j = ↑x j

tactic: rw [hr j h₁.1, if_pos h₁.2]
state_before: case mk.mk.intro.intro.inr.refine_3.h.inl
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : ¬i ∈ p
hs : s i (↑x i) (↑x₂ i)
j : ι
h₁ : r j i ∧ j ∈ p
⊢ ↑x₁ j = ↑x j

tactic: rw [hr j h₂, if_neg]
state_before: case mk.mk.intro.intro.inr.refine_3.h.inr.inl
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : ¬i ∈ p
hs : s i (↑x i) (↑x₂ i)
j : ι
h₁ : ¬(r j i ∧ j ∈ p)
h₂ : r j i
⊢ ↑x₂ j = ↑x j

tactic: simpa [h₂] using h₁
state_before: case mk.mk.intro.intro.inr.refine_3.h.inr.inl.hnc
ι : Type u_1
α : ι → Type u_2
inst✝¹ : (i : ι) → Zero (α i)
r : ι → ι → Prop
s : (i : ι) → α i → α i → Prop
inst✝ : (i : ι) → (s : Set ι) → Decidable (i ∈ s)
p : Set ι
x₁ x₂ x : Π₀ (i : ι), α i
i : ι
hr : ∀ (j : ι), r j i → ↑x j = if j ∈ p then ↑x₁ j else ↑x₂ j
hp : ¬i ∈ p
hs : s i (↑x i) (↑x₂ i)
j : ι
h₁ : ¬(r j i ∧ j ∈ p)
h₂ : r j i
⊢ ¬j ∈ p