Theorem: LO.FirstOrder.Arith.Model.dvd_iff_bounded (Arithmetization/Basic/PeanoMinus.lean)

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b✝ c a b : M
⊢ a ∣ b ↔ ∃ c ≤ b, b = a * c
Tactic:
by_cases hx : a = 0
State after:
case pos
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b✝ c a b : M
hx : a = 0
⊢ a ∣ b ↔ ∃ c ≤ b, b = a * c

case neg
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b✝ c a b : M
hx : ¬a = 0
⊢ a ∣ b ↔ ∃ c ≤ b, b = a * c

State before:
case pos
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b✝ c a b : M
hx : a = 0
⊢ a ∣ b ↔ ∃ c ≤ b, b = a * c
Tactic:
simp[hx]
State after:
case pos
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b✝ c a b : M
hx : a = 0
⊢ b = 0 → ∃ x, x ≤ b

State before:
case pos
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b✝ c a b : M
hx : a = 0
⊢ b = 0 → ∃ x, x ≤ b
Tactic:
rintro rfl
State after:
case pos
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b c a : M
hx : a = 0
⊢ ∃ x, x ≤ 0

State before:
case pos
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b c a : M
hx : a = 0
⊢ ∃ x, x ≤ 0
Tactic:
exact ⟨0, by simp⟩
State after:
no goals

State before:
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b c a : M
hx : a = 0
⊢ 0 ≤ 0
Tactic:
simp
State after:
no goals

State before:
case neg
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b✝ c a b : M
hx : ¬a = 0
⊢ a ∣ b ↔ ∃ c ≤ b, b = a * c
Tactic:
constructor
State after:
case neg.mp
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b✝ c a b : M
hx : ¬a = 0
⊢ a ∣ b → ∃ c ≤ b, b = a * c

case neg.mpr
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b✝ c a b : M
hx : ¬a = 0
⊢ (∃ c ≤ b, b = a * c) → a ∣ b

State before:
case neg.mp
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b✝ c a b : M
hx : ¬a = 0
⊢ a ∣ b → ∃ c ≤ b, b = a * c
Tactic:
rintro ⟨c, rfl⟩
State after:
case neg.mp.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b c✝ a : M
hx : ¬a = 0
c : M
⊢ ∃ c_1 ≤ a * c, a * c = a * c_1

State before:
case neg.mp.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b c✝ a : M
hx : ¬a = 0
c : M
⊢ ∃ c_1 ≤ a * c, a * c = a * c_1
Tactic:
exact ⟨c, le_mul_self_of_pos_left (pos_iff_ne_zero.mpr hx), rfl⟩
State after:
no goals

State before:
case neg.mpr
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b✝ c a b : M
hx : ¬a = 0
⊢ (∃ c ≤ b, b = a * c) → a ∣ b
Tactic:
rintro ⟨c, hz, rfl⟩
State after:
case neg.mpr.intro.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b c✝ a : M
hx : ¬a = 0
c : M
hz : c ≤ a * c
⊢ a ∣ a * c

State before:
case neg.mpr.intro.intro
M : Type u_1
inst✝⁵ : Zero M
inst✝⁴ : One M
inst✝³ : Add M
inst✝² : Mul M
inst✝¹ : LT M
inst✝ : M ⊧ₘ* 𝐏𝐀⁻
a✝ b c✝ a : M
hx : ¬a = 0
c : M
hz : c ≤ a * c
⊢ a ∣ a * c
Tactic:
exact dvd_mul_right a c
State after:
no goals