Theorem: lt_iff_exists_mul
File: Mathlib/Algebra/Order/Monoid/Canonical/Defs.lean

tactic: rw [lt_iff_le_and_ne, le_iff_exists_mul, ← exists_and_right]
state_before: α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a b c d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
⊢ a < b ↔ ∃ c, c > 1 ∧ b = a * c
state_after: α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a b c d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
⊢ (∃ x, b = a * x ∧ a ≠ b) ↔ ∃ c, c > 1 ∧ b = a * c

tactic: apply exists_congr
state_before: α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a b c d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
⊢ (∃ x, b = a * x ∧ a ≠ b) ↔ ∃ c, c > 1 ∧ b = a * c
state_after: case h
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a b c d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
⊢ ∀ (a_1 : α), b = a * a_1 ∧ a ≠ b ↔ a_1 > 1 ∧ b = a * a_1

tactic: intro c
state_before: case h
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a b c d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
⊢ ∀ (a_1 : α), b = a * a_1 ∧ a ≠ b ↔ a_1 > 1 ∧ b = a * a_1
state_after: case h
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a b c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ b = a * c ∧ a ≠ b ↔ c > 1 ∧ b = a * c

tactic: rw [and_comm, and_congr_left_iff, gt_iff_lt]
state_before: case h
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a b c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ b = a * c ∧ a ≠ b ↔ c > 1 ∧ b = a * c
state_after: case h
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a b c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ b = a * c → (a ≠ b ↔ 1 < c)

tactic: rintro rfl
state_before: case h
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a b c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ b = a * c → (a ≠ b ↔ 1 < c)
state_after: case h
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ a ≠ a * c ↔ 1 < c

tactic: constructor
state_before: case h
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ a ≠ a * c ↔ 1 < c
state_after: case h.mp
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ a ≠ a * c → 1 < c

case h.mpr
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ 1 < c → a ≠ a * c

tactic: rw [one_lt_iff_ne_one]
state_before: case h.mp
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ a ≠ a * c → 1 < c
state_after: case h.mp
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ a ≠ a * c → c ≠ 1

tactic: apply mt
state_before: case h.mp
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ a ≠ a * c → c ≠ 1
state_after: case h.mp.h₁
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ c = 1 → a = a * c

tactic: rintro rfl
state_before: case h.mp.h₁
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ c = 1 → a = a * c
state_after: case h.mp.h₁
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a c d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
⊢ a = a * 1

tactic: rw [mul_one]
state_before: case h.mp.h₁
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a c d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
⊢ a = a * 1
state_after: no goals

tactic: rw [← (self_le_mul_right a c).lt_iff_ne]
state_before: case h.mpr
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ 1 < c → a ≠ a * c
state_after: case h.mpr
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ 1 < c → a < a * c

tactic: apply lt_mul_of_one_lt_right'
state_before: case h.mpr
α : Type u
inst✝¹ : CanonicallyOrderedCommMonoid α
a c✝ d : α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
c : α
⊢ 1 < c → a < a * c
state_after: no goals