Theorem: Ring.DirectLimit.of.zero_exact
File: Mathlib/Algebra/DirectLimit.lean

tactic: haveI : Nonempty ι := ⟨i⟩
state_before: R : Type u
inst✝⁴ : Ring R
ι : Type v
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : (of G (fun i j h => ⇑(f' i j h)) i) x = 0
⊢ ∃ j, ∃ (hij : i ≤ j), (f' i j hij) x = 0
state_after: R : Type u
inst✝⁴ : Ring R
ι : Type v
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : (of G (fun i j h => ⇑(f' i j h)) i) x = 0
this : Nonempty ι
⊢ ∃ j, ∃ (hij : i ≤ j), (f' i j hij) x = 0

tactic: let ⟨j, s, H, hxs, hx⟩ := of.zero_exact_aux hix
state_before: R : Type u
inst✝⁴ : Ring R
ι : Type v
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : (of G (fun i j h => ⇑(f' i j h)) i) x = 0
this : Nonempty ι
⊢ ∃ j, ∃ (hij : i ≤ j), (f' i j hij) x = 0
state_after: R : Type u
inst✝⁴ : Ring R
ι : Type v
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : (of G (fun i j h => ⇑(f' i j h)) i) x = 0
this : Nonempty ι
j : ι
s : Set ((i : ι) × G i)
H : ∀ k ∈ s, k.fst ≤ j
hxs : (FreeCommRing.of ⟨i, x⟩).IsSupported s
hx :
  ∀ [inst : DecidablePred fun x => x ∈ s],
    (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (FreeCommRing.of ⟨i, x⟩)) = 0
⊢ ∃ j, ∃ (hij : i ≤ j), (f' i j hij) x = 0

tactic: have hixs : (⟨i, x⟩ : Σi, G i) ∈ s := isSupported_of.1 hxs
state_before: R : Type u
inst✝⁴ : Ring R
ι : Type v
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : (of G (fun i j h => ⇑(f' i j h)) i) x = 0
this : Nonempty ι
j : ι
s : Set ((i : ι) × G i)
H : ∀ k ∈ s, k.fst ≤ j
hxs : (FreeCommRing.of ⟨i, x⟩).IsSupported s
hx :
  ∀ [inst : DecidablePred fun x => x ∈ s],
    (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (FreeCommRing.of ⟨i, x⟩)) = 0
⊢ ∃ j, ∃ (hij : i ≤ j), (f' i j hij) x = 0
state_after: R : Type u
inst✝⁴ : Ring R
ι : Type v
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : (of G (fun i j h => ⇑(f' i j h)) i) x = 0
this : Nonempty ι
j : ι
s : Set ((i : ι) × G i)
H : ∀ k ∈ s, k.fst ≤ j
hxs : (FreeCommRing.of ⟨i, x⟩).IsSupported s
hx :
  ∀ [inst : DecidablePred fun x => x ∈ s],
    (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (FreeCommRing.of ⟨i, x⟩)) = 0
hixs : ⟨i, x⟩ ∈ s
⊢ ∃ j, ∃ (hij : i ≤ j), (f' i j hij) x = 0

tactic: classical specialize @hx _
state_before: R : Type u
inst✝⁴ : Ring R
ι : Type v
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : (of G (fun i j h => ⇑(f' i j h)) i) x = 0
this : Nonempty ι
j : ι
s : Set ((i : ι) × G i)
H : ∀ k ∈ s, k.fst ≤ j
hxs : (FreeCommRing.of ⟨i, x⟩).IsSupported s
hx :
  ∀ [inst : DecidablePred fun x => x ∈ s],
    (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (FreeCommRing.of ⟨i, x⟩)) = 0
hixs : ⟨i, x⟩ ∈ s
⊢ ∃ j, ∃ (hij : i ≤ j), (f' i j hij) x = 0
state_after: R : Type u
inst✝⁴ : Ring R
ι : Type v
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : (of G (fun i j h => ⇑(f' i j h)) i) x = 0
this : Nonempty ι
j : ι
s : Set ((i : ι) × G i)
H : ∀ k ∈ s, k.fst ≤ j
hxs : (FreeCommRing.of ⟨i, x⟩).IsSupported s
hixs : ⟨i, x⟩ ∈ s
hx : (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (FreeCommRing.of ⟨i, x⟩)) = 0
⊢ ∃ j, ∃ (hij : i ≤ j), (f' i j hij) x = 0

tactic: exact ⟨j, H ⟨i, x⟩ hixs, by classical rw [restriction_of, dif_pos hixs, lift_of] at hx; exact hx⟩
state_before: R : Type u
inst✝⁴ : Ring R
ι : Type v
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : (of G (fun i j h => ⇑(f' i j h)) i) x = 0
this : Nonempty ι
j : ι
s : Set ((i : ι) × G i)
H : ∀ k ∈ s, k.fst ≤ j
hxs : (FreeCommRing.of ⟨i, x⟩).IsSupported s
hixs : ⟨i, x⟩ ∈ s
hx : (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (FreeCommRing.of ⟨i, x⟩)) = 0
⊢ ∃ j, ∃ (hij : i ≤ j), (f' i j hij) x = 0
state_after: no goals

tactic: specialize @hx _
state_before: R : Type u
inst✝⁴ : Ring R
ι : Type v
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : (of G (fun i j h => ⇑(f' i j h)) i) x = 0
this : Nonempty ι
j : ι
s : Set ((i : ι) × G i)
H : ∀ k ∈ s, k.fst ≤ j
hxs : (FreeCommRing.of ⟨i, x⟩).IsSupported s
hx :
  ∀ [inst : DecidablePred fun x => x ∈ s],
    (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (FreeCommRing.of ⟨i, x⟩)) = 0
hixs : ⟨i, x⟩ ∈ s
⊢ ∃ j, ∃ (hij : i ≤ j), (f' i j hij) x = 0
state_after: R : Type u
inst✝⁴ : Ring R
ι : Type v
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : (of G (fun i j h => ⇑(f' i j h)) i) x = 0
this : Nonempty ι
j : ι
s : Set ((i : ι) × G i)
H : ∀ k ∈ s, k.fst ≤ j
hxs : (FreeCommRing.of ⟨i, x⟩).IsSupported s
hixs : ⟨i, x⟩ ∈ s
hx : (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (FreeCommRing.of ⟨i, x⟩)) = 0
⊢ ∃ j, ∃ (hij : i ≤ j), (f' i j hij) x = 0

tactic: classical rw [restriction_of, dif_pos hixs, lift_of] at hx; exact hx
state_before: R : Type u
inst✝⁴ : Ring R
ι : Type v
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : (of G (fun i j h => ⇑(f' i j h)) i) x = 0
this : Nonempty ι
j : ι
s : Set ((i : ι) × G i)
H : ∀ k ∈ s, k.fst ≤ j
hxs : (FreeCommRing.of ⟨i, x⟩).IsSupported s
hixs : ⟨i, x⟩ ∈ s
hx : (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (FreeCommRing.of ⟨i, x⟩)) = 0
⊢ (f' i j ⋯) x = 0
state_after: no goals

tactic: rw [restriction_of, dif_pos hixs, lift_of] at hx
state_before: R : Type u
inst✝⁴ : Ring R
ι : Type v
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : (of G (fun i j h => ⇑(f' i j h)) i) x = 0
this : Nonempty ι
j : ι
s : Set ((i : ι) × G i)
H : ∀ k ∈ s, k.fst ≤ j
hxs : (FreeCommRing.of ⟨i, x⟩).IsSupported s
hixs : ⟨i, x⟩ ∈ s
hx : (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (FreeCommRing.of ⟨i, x⟩)) = 0
⊢ (f' i j ⋯) x = 0
state_after: R : Type u
inst✝⁴ : Ring R
ι : Type v
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : (of G (fun i j h => ⇑(f' i j h)) i) x = 0
this : Nonempty ι
j : ι
s : Set ((i : ι) × G i)
H : ∀ k ∈ s, k.fst ≤ j
hxs : (FreeCommRing.of ⟨i, x⟩).IsSupported s
hixs : ⟨i, x⟩ ∈ s
hx : (f' (↑⟨⟨i, x⟩, hixs⟩).fst j ⋯) (↑⟨⟨i, x⟩, hixs⟩).snd = 0
⊢ (f' i j ⋯) x = 0

tactic: exact hx
state_before: R : Type u
inst✝⁴ : Ring R
ι : Type v
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : (of G (fun i j h => ⇑(f' i j h)) i) x = 0
this : Nonempty ι
j : ι
s : Set ((i : ι) × G i)
H : ∀ k ∈ s, k.fst ≤ j
hxs : (FreeCommRing.of ⟨i, x⟩).IsSupported s
hixs : ⟨i, x⟩ ∈ s
hx : (f' (↑⟨⟨i, x⟩, hixs⟩).fst j ⋯) (↑⟨⟨i, x⟩, hixs⟩).snd = 0
⊢ (f' i j ⋯) x = 0
state_after: no goals