Theorem: Finset.univ_of_card_le_three
File: Mathlib/RingTheory/Fintype.lean

tactic: refine (eq_of_subset_of_card_le (subset_univ _) ?_).symm
state_before: R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h : Fintype.card R ≤ 3
⊢ univ = {0, 1, -1}
state_after: R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h : Fintype.card R ≤ 3
⊢ univ.card ≤ {0, 1, -1}.card

tactic: rcases lt_or_eq_of_le h with h | h
state_before: R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h : Fintype.card R ≤ 3
⊢ univ.card ≤ {0, 1, -1}.card
state_after: case inl
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R < 3
⊢ univ.card ≤ {0, 1, -1}.card

case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
⊢ univ.card ≤ {0, 1, -1}.card

tactic: apply card_le_card
state_before: case inl
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R < 3
⊢ univ.card ≤ {0, 1, -1}.card
state_after: case inl.a
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R < 3
⊢ univ ⊆ {0, 1, -1}

tactic: rw [Finset.univ_of_card_le_two (Nat.lt_succ_iff.1 h)]
state_before: case inl.a
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R < 3
⊢ univ ⊆ {0, 1, -1}
state_after: case inl.a
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R < 3
⊢ {0, 1} ⊆ {0, 1, -1}

tactic: intro a ha
state_before: case inl.a
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R < 3
⊢ {0, 1} ⊆ {0, 1, -1}
state_after: case inl.a
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R < 3
a : R
ha : a ∈ {0, 1}
⊢ a ∈ {0, 1, -1}

tactic: simp only [mem_insert, mem_singleton] at ha
state_before: case inl.a
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R < 3
a : R
ha : a ∈ {0, 1}
⊢ a ∈ {0, 1, -1}
state_after: case inl.a
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R < 3
a : R
ha : a = 0 ∨ a = 1
⊢ a ∈ {0, 1, -1}

tactic: rcases ha with rfl | rfl <;> simp
state_before: case inl.a
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R < 3
a : R
ha : a = 0 ∨ a = 1
⊢ a ∈ {0, 1, -1}
state_after: no goals

tactic: have : Nontrivial R := by
  refine Fintype.one_lt_card_iff_nontrivial.1 ?_
  rw [h]
  norm_num
state_before: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
⊢ univ.card ≤ {0, 1, -1}.card
state_after: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
⊢ univ.card ≤ {0, 1, -1}.card

tactic: rw [card_univ, h, card_insert_of_not_mem, card_insert_of_not_mem, card_singleton]
state_before: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
⊢ univ.card ≤ {0, 1, -1}.card
state_after: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
⊢ 1 ∉ {-1}

case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
⊢ 0 ∉ {1, -1}

tactic: refine Fintype.one_lt_card_iff_nontrivial.1 ?_
state_before: R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
⊢ Nontrivial R
state_after: R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
⊢ 1 < Fintype.card R

tactic: rw [h]
state_before: R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
⊢ 1 < Fintype.card R
state_after: R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
⊢ 1 < 3

tactic: norm_num
state_before: R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
⊢ 1 < 3
state_after: no goals

tactic: rw [mem_singleton]
state_before: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
⊢ 1 ∉ {-1}
state_after: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
⊢ ¬1 = -1

tactic: intro H
state_before: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
⊢ ¬1 = -1
state_after: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
H : 1 = -1
⊢ False

tactic: rw [← add_eq_zero_iff_eq_neg, one_add_one_eq_two] at H
state_before: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
H : 1 = -1
⊢ False
state_after: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
H : 2 = 0
⊢ False

tactic: apply_fun (ringEquivOfPrime R Nat.prime_three h).symm at H
state_before: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
H : 2 = 0
⊢ False
state_after: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
H : (ringEquivOfPrime R Nat.prime_three h).symm 2 = (ringEquivOfPrime R Nat.prime_three h).symm 0
⊢ False

tactic: simp only [map_ofNat, map_zero] at H
state_before: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
H : (ringEquivOfPrime R Nat.prime_three h).symm 2 = (ringEquivOfPrime R Nat.prime_three h).symm 0
⊢ False
state_after: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
H : 2 = 0
⊢ False

tactic: replace H : ((2 : ℕ) : ZMod 3) = 0 := H
state_before: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
H : 2 = 0
⊢ False
state_after: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
H : ↑2 = 0
⊢ False

tactic: rw [natCast_zmod_eq_zero_iff_dvd] at H
state_before: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
H : ↑2 = 0
⊢ False
state_after: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
H : 3 ∣ 2
⊢ False

tactic: norm_num at H
state_before: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
H : 3 ∣ 2
⊢ False
state_after: no goals

tactic: intro h
state_before: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝ : Fintype.card R ≤ 3
h : Fintype.card R = 3
this : Nontrivial R
⊢ 0 ∉ {1, -1}
state_after: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝¹ : Fintype.card R ≤ 3
h✝ : Fintype.card R = 3
this : Nontrivial R
h : 0 ∈ {1, -1}
⊢ False

tactic: simp only [mem_insert, mem_singleton, zero_eq_neg] at h
state_before: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝¹ : Fintype.card R ≤ 3
h✝ : Fintype.card R = 3
this : Nontrivial R
h : 0 ∈ {1, -1}
⊢ False
state_after: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝¹ : Fintype.card R ≤ 3
h✝ : Fintype.card R = 3
this : Nontrivial R
h : 0 = 1 ∨ 1 = 0
⊢ False

tactic: rcases h with (h | h)
state_before: case inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝¹ : Fintype.card R ≤ 3
h✝ : Fintype.card R = 3
this : Nontrivial R
h : 0 = 1 ∨ 1 = 0
⊢ False
state_after: case inr.inl
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝¹ : Fintype.card R ≤ 3
h✝ : Fintype.card R = 3
this : Nontrivial R
h : 0 = 1
⊢ False

case inr.inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝¹ : Fintype.card R ≤ 3
h✝ : Fintype.card R = 3
this : Nontrivial R
h : 1 = 0
⊢ False

tactic: exact zero_ne_one h
state_before: case inr.inl
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝¹ : Fintype.card R ≤ 3
h✝ : Fintype.card R = 3
this : Nontrivial R
h : 0 = 1
⊢ False
state_after: no goals

tactic: exact zero_ne_one h.symm
state_before: case inr.inr
R : Type u_1
inst✝² : Ring R
inst✝¹ : Fintype R
inst✝ : DecidableEq R
h✝¹ : Fintype.card R ≤ 3
h✝ : Fintype.card R = 3
this : Nontrivial R
h : 1 = 0
⊢ False
state_after: no goals