Theorem: Fin.isAddFreimanIso_Iio
File: Mathlib/Combinatorics/Additive/FreimanHom.lean

tactic: obtain _ | k := k
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
k m n : ℕ
hm : m ≠ 0
hkmn : m * k ≤ n
⊢ IsAddFreimanIso m (Iio ↑k) (Iio k) val
state_after: case zero
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
m n : ℕ
hm : m ≠ 0
hkmn : m * 0 ≤ n
⊢ IsAddFreimanIso m (Iio ↑0) (Iio 0) val

case succ
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
m n : ℕ
hm : m ≠ 0
k : ℕ
hkmn : m * (k + 1) ≤ n
⊢ IsAddFreimanIso m (Iio ↑(k + 1)) (Iio (k + 1)) val

tactic: have hkmn' : m * k ≤ n := (Nat.mul_le_mul_left _ k.le_succ).trans hkmn
state_before: case succ
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
m n : ℕ
hm : m ≠ 0
k : ℕ
hkmn : m * (k + 1) ≤ n
⊢ IsAddFreimanIso m (Iio ↑(k + 1)) (Iio (k + 1)) val
state_after: case succ
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
m n : ℕ
hm : m ≠ 0
k : ℕ
hkmn : m * (k + 1) ≤ n
hkmn' : m * k ≤ n
⊢ IsAddFreimanIso m (Iio ↑(k + 1)) (Iio (k + 1)) val

tactic: convert isAddFreimanIso_Iic hm hkmn' using 1 <;> ext x
state_before: case succ
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
m n : ℕ
hm : m ≠ 0
k : ℕ
hkmn : m * (k + 1) ≤ n
hkmn' : m * k ≤ n
⊢ IsAddFreimanIso m (Iio ↑(k + 1)) (Iio (k + 1)) val
state_after: case h.e'_6.h
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
m n : ℕ
hm : m ≠ 0
k : ℕ
hkmn : m * (k + 1) ≤ n
hkmn' : m * k ≤ n
x : Fin (n + 1)
⊢ x ∈ Iio ↑(k + 1) ↔ x ∈ Iic ↑k

case h.e'_7.h
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
m n : ℕ
hm : m ≠ 0
k : ℕ
hkmn : m * (k + 1) ≤ n
hkmn' : m * k ≤ n
x : ℕ
⊢ x ∈ Iio (k + 1) ↔ x ∈ Iic k

tactic: simp [← bot_eq_zero]
state_before: case zero
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
m n : ℕ
hm : m ≠ 0
hkmn : m * 0 ≤ n
⊢ IsAddFreimanIso m (Iio ↑0) (Iio 0) val
state_after: case zero
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
m n : ℕ
hm : m ≠ 0
hkmn : m * 0 ≤ n
⊢ IsAddFreimanIso m ∅ (Iio 0) val

tactic: simp [← _root_.bot_eq_zero, -Nat.bot_eq_zero, -bot_eq_zero']
state_before: case zero
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
m n : ℕ
hm : m ≠ 0
hkmn : m * 0 ≤ n
⊢ IsAddFreimanIso m ∅ (Iio 0) val
state_after: no goals

tactic: simp [lt_iff_val_lt_val, le_iff_val_le_val, -val_fin_le, -val_fin_lt, Nat.mod_eq_of_lt,
  aux hm hkmn']
state_before: case h.e'_6.h
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
m n : ℕ
hm : m ≠ 0
k : ℕ
hkmn : m * (k + 1) ≤ n
hkmn' : m * k ≤ n
x : Fin (n + 1)
⊢ x ∈ Iio ↑(k + 1) ↔ x ∈ Iic ↑k
state_after: case h.e'_6.h
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
m n : ℕ
hm : m ≠ 0
k : ℕ
hkmn : m * (k + 1) ≤ n
hkmn' : m * k ≤ n
x : Fin (n + 1)
⊢ ↑x < ↑(↑k + 1) ↔ ↑x ≤ k

tactic: simp_rw [← Nat.cast_add_one]
state_before: case h.e'_6.h
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
m n : ℕ
hm : m ≠ 0
k : ℕ
hkmn : m * (k + 1) ≤ n
hkmn' : m * k ≤ n
x : Fin (n + 1)
⊢ ↑x < ↑(↑k + 1) ↔ ↑x ≤ k
state_after: case h.e'_6.h
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
m n : ℕ
hm : m ≠ 0
k : ℕ
hkmn : m * (k + 1) ≤ n
hkmn' : m * k ≤ n
x : Fin (n + 1)
⊢ ↑x < ↑↑(k + 1) ↔ ↑x ≤ k

tactic: rw [Fin.val_cast_of_lt (aux hm hkmn), Nat.lt_succ_iff]
state_before: case h.e'_6.h
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
m n : ℕ
hm : m ≠ 0
k : ℕ
hkmn : m * (k + 1) ≤ n
hkmn' : m * k ≤ n
x : Fin (n + 1)
⊢ ↑x < ↑↑(k + 1) ↔ ↑x ≤ k
state_after: no goals

tactic: simp [Nat.lt_succ_iff]
state_before: case h.e'_7.h
F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
m n : ℕ
hm : m ≠ 0
k : ℕ
hkmn : m * (k + 1) ≤ n
hkmn' : m * k ≤ n
x : ℕ
⊢ x ∈ Iio (k + 1) ↔ x ∈ Iic k
state_after: no goals