Theorem: MvPolynomial.NewtonIdentities.pairMap_mem_pairs
File: Mathlib/RingTheory/MvPolynomial/NewtonIdentities.lean

tactic: rw [mem_pairs] at h ⊢
state_before: σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h : t ∈ MvPolynomial.NewtonIdentities.pairs σ k
⊢ MvPolynomial.NewtonIdentities.pairMap σ t ∈ MvPolynomial.NewtonIdentities.pairs σ k
state_after: σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h : t.1.card ≤ k ∧ (t.1.card = k → t.2 ∈ t.1)
⊢ (MvPolynomial.NewtonIdentities.pairMap σ t).1.card ≤ k ∧
    ((MvPolynomial.NewtonIdentities.pairMap σ t).1.card = k →
      (MvPolynomial.NewtonIdentities.pairMap σ t).2 ∈ (MvPolynomial.NewtonIdentities.pairMap σ t).1)

tactic: rcases (em (t.snd ∈ t.fst)) with h1 | h1
state_before: σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h : t.1.card ≤ k ∧ (t.1.card = k → t.2 ∈ t.1)
⊢ (MvPolynomial.NewtonIdentities.pairMap σ t).1.card ≤ k ∧
    ((MvPolynomial.NewtonIdentities.pairMap σ t).1.card = k →
      (MvPolynomial.NewtonIdentities.pairMap σ t).2 ∈ (MvPolynomial.NewtonIdentities.pairMap σ t).1)
state_after: case inl
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h : t.1.card ≤ k ∧ (t.1.card = k → t.2 ∈ t.1)
h1 : t.2 ∈ t.1
⊢ (MvPolynomial.NewtonIdentities.pairMap σ t).1.card ≤ k ∧
    ((MvPolynomial.NewtonIdentities.pairMap σ t).1.card = k →
      (MvPolynomial.NewtonIdentities.pairMap σ t).2 ∈ (MvPolynomial.NewtonIdentities.pairMap σ t).1)

case inr
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h : t.1.card ≤ k ∧ (t.1.card = k → t.2 ∈ t.1)
h1 : t.2 ∉ t.1
⊢ (MvPolynomial.NewtonIdentities.pairMap σ t).1.card ≤ k ∧
    ((MvPolynomial.NewtonIdentities.pairMap σ t).1.card = k →
      (MvPolynomial.NewtonIdentities.pairMap σ t).2 ∈ (MvPolynomial.NewtonIdentities.pairMap σ t).1)

tactic: rw [pairMap_of_snd_mem_fst σ h1]
state_before: case inl
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h : t.1.card ≤ k ∧ (t.1.card = k → t.2 ∈ t.1)
h1 : t.2 ∈ t.1
⊢ (MvPolynomial.NewtonIdentities.pairMap σ t).1.card ≤ k ∧
    ((MvPolynomial.NewtonIdentities.pairMap σ t).1.card = k →
      (MvPolynomial.NewtonIdentities.pairMap σ t).2 ∈ (MvPolynomial.NewtonIdentities.pairMap σ t).1)
state_after: case inl
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h : t.1.card ≤ k ∧ (t.1.card = k → t.2 ∈ t.1)
h1 : t.2 ∈ t.1
⊢ (t.1.erase t.2, t.2).1.card ≤ k ∧ ((t.1.erase t.2, t.2).1.card = k → (t.1.erase t.2, t.2).2 ∈ (t.1.erase t.2, t.2).1)

tactic: simp only [h1, implies_true, and_true] at h
state_before: case inl
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h : t.1.card ≤ k ∧ (t.1.card = k → t.2 ∈ t.1)
h1 : t.2 ∈ t.1
⊢ (t.1.erase t.2, t.2).1.card ≤ k ∧ ((t.1.erase t.2, t.2).1.card = k → (t.1.erase t.2, t.2).2 ∈ (t.1.erase t.2, t.2).1)
state_after: case inl
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h1 : t.2 ∈ t.1
h : t.1.card ≤ k
⊢ (t.1.erase t.2, t.2).1.card ≤ k ∧ ((t.1.erase t.2, t.2).1.card = k → (t.1.erase t.2, t.2).2 ∈ (t.1.erase t.2, t.2).1)

tactic: simp only [card_erase_of_mem h1, tsub_le_iff_right, mem_erase, ne_eq, h1]
state_before: case inl
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h1 : t.2 ∈ t.1
h : t.1.card ≤ k
⊢ (t.1.erase t.2, t.2).1.card ≤ k ∧ ((t.1.erase t.2, t.2).1.card = k → (t.1.erase t.2, t.2).2 ∈ (t.1.erase t.2, t.2).1)
state_after: case inl
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h1 : t.2 ∈ t.1
h : t.1.card ≤ k
⊢ t.1.card ≤ k + 1 ∧ (t.1.card - 1 = k → ¬True ∧ True)

tactic: refine ⟨le_step h, ?_⟩
state_before: case inl
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h1 : t.2 ∈ t.1
h : t.1.card ≤ k
⊢ t.1.card ≤ k + 1 ∧ (t.1.card - 1 = k → ¬True ∧ True)
state_after: case inl
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h1 : t.2 ∈ t.1
h : t.1.card ≤ k
⊢ t.1.card - 1 = k → ¬True ∧ True

tactic: by_contra h2
state_before: case inl
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h1 : t.2 ∈ t.1
h : t.1.card ≤ k
⊢ t.1.card - 1 = k → ¬True ∧ True
state_after: case inl
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h1 : t.2 ∈ t.1
h : t.1.card ≤ k
h2 : ¬(t.1.card - 1 = k → ¬True ∧ True)
⊢ False

tactic: simp only [not_true_eq_false, and_true, not_forall, not_false_eq_true, exists_prop] at h2
state_before: case inl
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h1 : t.2 ∈ t.1
h : t.1.card ≤ k
h2 : ¬(t.1.card - 1 = k → ¬True ∧ True)
⊢ False
state_after: case inl
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h1 : t.2 ∈ t.1
h : t.1.card ≤ k
h2 : t.1.card - 1 = k
⊢ False

tactic: rw [← h2] at h
state_before: case inl
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h1 : t.2 ∈ t.1
h : t.1.card ≤ k
h2 : t.1.card - 1 = k
⊢ False
state_after: case inl
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h1 : t.2 ∈ t.1
h : t.1.card ≤ t.1.card - 1
h2 : t.1.card - 1 = k
⊢ False

tactic: exact not_le_of_lt (sub_lt (card_pos.mpr ⟨t.snd, h1⟩) zero_lt_one) h
state_before: case inl
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h1 : t.2 ∈ t.1
h : t.1.card ≤ t.1.card - 1
h2 : t.1.card - 1 = k
⊢ False
state_after: no goals

tactic: rw [pairMap_of_snd_nmem_fst σ h1]
state_before: case inr
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h : t.1.card ≤ k ∧ (t.1.card = k → t.2 ∈ t.1)
h1 : t.2 ∉ t.1
⊢ (MvPolynomial.NewtonIdentities.pairMap σ t).1.card ≤ k ∧
    ((MvPolynomial.NewtonIdentities.pairMap σ t).1.card = k →
      (MvPolynomial.NewtonIdentities.pairMap σ t).2 ∈ (MvPolynomial.NewtonIdentities.pairMap σ t).1)
state_after: case inr
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h : t.1.card ≤ k ∧ (t.1.card = k → t.2 ∈ t.1)
h1 : t.2 ∉ t.1
⊢ (cons t.2 t.1 h1, t.2).1.card ≤ k ∧
    ((cons t.2 t.1 h1, t.2).1.card = k → (cons t.2 t.1 h1, t.2).2 ∈ (cons t.2 t.1 h1, t.2).1)

tactic: simp only [h1] at h
state_before: case inr
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h : t.1.card ≤ k ∧ (t.1.card = k → t.2 ∈ t.1)
h1 : t.2 ∉ t.1
⊢ (cons t.2 t.1 h1, t.2).1.card ≤ k ∧
    ((cons t.2 t.1 h1, t.2).1.card = k → (cons t.2 t.1 h1, t.2).2 ∈ (cons t.2 t.1 h1, t.2).1)
state_after: case inr
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h1 : t.2 ∉ t.1
h : t.1.card ≤ k ∧ (t.1.card = k → False)
⊢ (cons t.2 t.1 h1, t.2).1.card ≤ k ∧
    ((cons t.2 t.1 h1, t.2).1.card = k → (cons t.2 t.1 h1, t.2).2 ∈ (cons t.2 t.1 h1, t.2).1)

tactic: simp only [card_cons, mem_cons, true_or, implies_true, and_true]
state_before: case inr
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h1 : t.2 ∉ t.1
h : t.1.card ≤ k ∧ (t.1.card = k → False)
⊢ (cons t.2 t.1 h1, t.2).1.card ≤ k ∧
    ((cons t.2 t.1 h1, t.2).1.card = k → (cons t.2 t.1 h1, t.2).2 ∈ (cons t.2 t.1 h1, t.2).1)
state_after: case inr
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h1 : t.2 ∉ t.1
h : t.1.card ≤ k ∧ (t.1.card = k → False)
⊢ t.1.card + 1 ≤ k

tactic: exact (le_iff_eq_or_lt.mp h.left).resolve_left h.right
state_before: case inr
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
t : Finset σ × σ
h1 : t.2 ∉ t.1
h : t.1.card ≤ k ∧ (t.1.card = k → False)
⊢ t.1.card + 1 ≤ k
state_after: no goals