text:
[GOAL]
R : Type u_1
inst✝¹ : EuclideanDomain R
inst✝ : GCDMonoid R
p✝ q✝ p q : R
hp : p ≠ 0
⊢ p / GCDMonoid.gcd p q ≠ 0
[PROOFSTEP]
obtain ⟨r, hr⟩ := GCDMonoid.gcd_dvd_left p q
[GOAL]
case intro
R : Type u_1
inst✝¹ : EuclideanDomain R
inst✝ : GCDMonoid R
p✝ q✝ p q : R
hp : p ≠ 0
r : R
hr : p = GCDMonoid.gcd p q * r
⊢ p / GCDMonoid.gcd p q ≠ 0
[PROOFSTEP]
obtain ⟨pq0, r0⟩ : GCDMonoid.gcd p q ≠ 0 ∧ r ≠ 0 := mul_ne_zero_iff.mp (hr ▸ hp)
[GOAL]
case intro.intro
R : Type u_1
inst✝¹ : EuclideanDomain R
inst✝ : GCDMonoid R
p✝ q✝ p q : R
hp : p ≠ 0
r : R
hr : p = GCDMonoid.gcd p q * r
pq0 : GCDMonoid.gcd p q ≠ 0
r0 : r ≠ 0
⊢ p / GCDMonoid.gcd p q ≠ 0
[PROOFSTEP]
nth_rw 1 [hr]
[GOAL]
case intro.intro
R : Type u_1
inst✝¹ : EuclideanDomain R
inst✝ : GCDMonoid R
p✝ q✝ p q : R
hp : p ≠ 0
r : R
hr : p = GCDMonoid.gcd p q * r
pq0 : GCDMonoid.gcd p q ≠ 0
r0 : r ≠ 0
⊢ GCDMonoid.gcd p q * r / GCDMonoid.gcd p q ≠ 0
[PROOFSTEP]
rw [mul_comm, EuclideanDomain.mul_div_cancel _ pq0]
[GOAL]
case intro.intro
R : Type u_1
inst✝¹ : EuclideanDomain R
inst✝ : GCDMonoid R
p✝ q✝ p q : R
hp : p ≠ 0
r : R
hr : p = GCDMonoid.gcd p q * r
pq0 : GCDMonoid.gcd p q ≠ 0
r0 : r ≠ 0
⊢ r ≠ 0
[PROOFSTEP]
exact r0
[GOAL]
R : Type u_1
inst✝¹ : EuclideanDomain R
inst✝ : GCDMonoid R
p✝ q✝ p q : R
hq : q ≠ 0
⊢ q / GCDMonoid.gcd p q ≠ 0
[PROOFSTEP]
obtain ⟨r, hr⟩ := GCDMonoid.gcd_dvd_right p q
[GOAL]
case intro
R : Type u_1
inst✝¹ : EuclideanDomain R
inst✝ : GCDMonoid R
p✝ q✝ p q : R
hq : q ≠ 0
r : R
hr : q = GCDMonoid.gcd p q * r
⊢ q / GCDMonoid.gcd p q ≠ 0
[PROOFSTEP]
obtain ⟨pq0, r0⟩ : GCDMonoid.gcd p q ≠ 0 ∧ r ≠ 0 := mul_ne_zero_iff.mp (hr ▸ hq)
[GOAL]
case intro.intro
R : Type u_1
inst✝¹ : EuclideanDomain R
inst✝ : GCDMonoid R
p✝ q✝ p q : R
hq : q ≠ 0
r : R
hr : q = GCDMonoid.gcd p q * r
pq0 : GCDMonoid.gcd p q ≠ 0
r0 : r ≠ 0
⊢ q / GCDMonoid.gcd p q ≠ 0
[PROOFSTEP]
nth_rw 1 [hr]
[GOAL]
case intro.intro
R : Type u_1
inst✝¹ : EuclideanDomain R
inst✝ : GCDMonoid R
p✝ q✝ p q : R
hq : q ≠ 0
r : R
hr : q = GCDMonoid.gcd p q * r
pq0 : GCDMonoid.gcd p q ≠ 0
r0 : r ≠ 0
⊢ GCDMonoid.gcd p q * r / GCDMonoid.gcd p q ≠ 0
[PROOFSTEP]
rw [mul_comm, EuclideanDomain.mul_div_cancel _ pq0]
[GOAL]
case intro.intro
R : Type u_1
inst✝¹ : EuclideanDomain R
inst✝ : GCDMonoid R
p✝ q✝ p q : R
hq : q ≠ 0
r : R
hr : q = GCDMonoid.gcd p q * r
pq0 : GCDMonoid.gcd p q ≠ 0
r0 : r ≠ 0
⊢ r ≠ 0
[PROOFSTEP]
exact r0
[GOAL]
R : Type ?u.6736
inst✝¹ : EuclideanDomain R
inst✝ : DecidableEq R
a b : R
⊢ Associated (gcd a b * lcm a b) (a * b)
[PROOFSTEP]
rw [EuclideanDomain.gcd_mul_lcm]

lm_label:
1. YES
2. YES


text:
[GOAL]
n : ℕ
⊢ (n + 1)‼ = (n + 1) * (n - 1)‼
[PROOFSTEP]
cases n
[GOAL]
case zero
⊢ (zero + 1)‼ = (zero + 1) * (zero - 1)‼
[PROOFSTEP]
rfl
[GOAL]
case succ
n✝ : ℕ
⊢ (succ n✝ + 1)‼ = (succ n✝ + 1) * (succ n✝ - 1)‼
[PROOFSTEP]
rfl
[GOAL]
k : ℕ
⊢ (k + 1 + 1)! = (k + 1 + 1)‼ * (k + 1)‼
[PROOFSTEP]
rw [doubleFactorial_add_two, factorial, factorial_eq_mul_doubleFactorial _, mul_comm _ k‼, mul_assoc]
[GOAL]
n : ℕ
⊢ (2 * (n + 1))‼ = 2 ^ (n + 1) * (n + 1)!
[PROOFSTEP]
rw [mul_add, mul_one, doubleFactorial_add_two, factorial, pow_succ, doubleFactorial_two_mul _, succ_eq_add_one]
[GOAL]
n : ℕ
⊢ (2 * n + 2) * (2 ^ n * n !) = 2 ^ n * 2 * ((n + 1) * n !)
[PROOFSTEP]
ring
[GOAL]
n : ℕ
⊢ (2 * (n + 1))‼ = ∏ i in Finset.range (n + 1), 2 * (i + 1)
[PROOFSTEP]
rw [Finset.prod_range_succ, ← doubleFactorial_eq_prod_even _, mul_comm (2 * n)‼, (by ring : 2 * (n + 1) = 2 * n + 2)]
[GOAL]
n : ℕ
⊢ 2 * (n + 1) = 2 * n + 2
[PROOFSTEP]
ring
[GOAL]
n : ℕ
⊢ (2 * n + 2)‼ = (2 * n + 2) * (2 * n)‼
[PROOFSTEP]
rfl
[GOAL]
n : ℕ
⊢ (2 * (n + 1) + 1)‼ = ∏ i in Finset.range (n + 1), (2 * (i + 1) + 1)
[PROOFSTEP]
rw [Finset.prod_range_succ, ← doubleFactorial_eq_prod_odd _, mul_comm (2 * n + 1)‼,
  (by ring : 2 * (n + 1) + 1 = 2 * n + 1 + 2)]
[GOAL]
n : ℕ
⊢ 2 * (n + 1) + 1 = 2 * n + 1 + 2
[PROOFSTEP]
ring
[GOAL]
n : ℕ
⊢ (2 * n + 1 + 2)‼ = (2 * n + 1 + 2) * (2 * n + 1)‼
[PROOFSTEP]
rfl


text:
[GOAL]
x✝ y x : ℝ
⊢ exp (arsinh x) = x + sqrt (1 + x ^ 2)
[PROOFSTEP]
apply exp_log
[GOAL]
case hx
x✝ y x : ℝ
⊢ 0 < x + sqrt (1 + x ^ 2)
[PROOFSTEP]
rw [← neg_lt_iff_pos_add']
[GOAL]
case hx
x✝ y x : ℝ
⊢ -x < sqrt (1 + x ^ 2)
[PROOFSTEP]
apply lt_sqrt_of_sq_lt
[GOAL]
case hx.h
x✝ y x : ℝ
⊢ (-x) ^ 2 < 1 + x ^ 2
[PROOFSTEP]
simp
[GOAL]
x y : ℝ
⊢ arsinh 0 = 0
[PROOFSTEP]
simp [arsinh]
[GOAL]
x✝ y x : ℝ
⊢ arsinh (-x) = -arsinh x
[PROOFSTEP]
rw [← exp_eq_exp, exp_arsinh, exp_neg, exp_arsinh]
[GOAL]
x✝ y x : ℝ
⊢ -x + sqrt (1 + (-x) ^ 2) = (x + sqrt (1 + x ^ 2))⁻¹
[PROOFSTEP]
apply eq_inv_of_mul_eq_one_left
[GOAL]
case h
x✝ y x : ℝ
⊢ (-x + sqrt (1 + (-x) ^ 2)) * (x + sqrt (1 + x ^ 2)) = 1
[PROOFSTEP]
rw [neg_sq, neg_add_eq_sub, add_comm x, mul_comm, ← sq_sub_sq, sq_sqrt, add_sub_cancel]
[GOAL]
case h
x✝ y x : ℝ
⊢ 0 ≤ 1 + x ^ 2
[PROOFSTEP]
exact add_nonneg zero_le_one (sq_nonneg _)
[GOAL]
x✝ y x : ℝ
⊢ sinh (arsinh x) = x
[PROOFSTEP]
rw [sinh_eq, ← arsinh_neg, exp_arsinh, exp_arsinh, neg_sq]
[GOAL]
x✝ y x : ℝ
⊢ (x + sqrt (1 + x ^ 2) - (-x + sqrt (1 + x ^ 2))) / 2 = x
[PROOFSTEP]
field_simp
[GOAL]
x✝ y x : ℝ
⊢ cosh (arsinh x) = sqrt (1 + x ^ 2)
[PROOFSTEP]
rw [← sqrt_sq (cosh_pos _).le, cosh_sq', sinh_arsinh]
[GOAL]
x y : ℝ
⊢ 0 ≤ arsinh x ↔ 0 ≤ x
[PROOFSTEP]
rw [← sinh_le_sinh, sinh_zero, sinh_arsinh]
[GOAL]
x y : ℝ
⊢ arsinh x ≤ 0 ↔ x ≤ 0
[PROOFSTEP]
rw [← sinh_le_sinh, sinh_zero, sinh_arsinh]
[GOAL]
x✝ y x : ℝ
⊢ HasStrictDerivAt arsinh (sqrt (1 + x ^ 2))⁻¹ x
[PROOFSTEP]
convert
  sinhHomeomorph.toLocalHomeomorph.hasStrictDerivAt_symm (mem_univ x) (cosh_pos _).ne' (hasStrictDerivAt_sinh _) using 2
[GOAL]
case h.e'_7.h.e'_3
x✝ y x : ℝ
⊢ sqrt (1 + x ^ 2) = cosh (↑(LocalHomeomorph.symm (Homeomorph.toLocalHomeomorph sinhHomeomorph)) x)
[PROOFSTEP]
exact (cosh_arsinh _).symm


text:
[GOAL]
a : ℝ
⊢ interior {z | z.re ≤ a} = {z | z.re < a}
[PROOFSTEP]
simpa only [interior_Iic] using interior_preimage_re (Iic a)
[GOAL]
a : ℝ
⊢ interior {z | z.im ≤ a} = {z | z.im < a}
[PROOFSTEP]
simpa only [interior_Iic] using interior_preimage_im (Iic a)
[GOAL]
a : ℝ
⊢ interior {z | a ≤ z.re} = {z | a < z.re}
[PROOFSTEP]
simpa only [interior_Ici] using interior_preimage_re (Ici a)
[GOAL]
a : ℝ
⊢ interior {z | a ≤ z.im} = {z | a < z.im}
[PROOFSTEP]
simpa only [interior_Ici] using interior_preimage_im (Ici a)
[GOAL]
a : ℝ
⊢ closure {z | z.re < a} = {z | z.re ≤ a}
[PROOFSTEP]
simpa only [closure_Iio] using closure_preimage_re (Iio a)
[GOAL]
a : ℝ
⊢ closure {z | z.im < a} = {z | z.im ≤ a}
[PROOFSTEP]
simpa only [closure_Iio] using closure_preimage_im (Iio a)
[GOAL]
a : ℝ
⊢ closure {z | a < z.re} = {z | a ≤ z.re}
[PROOFSTEP]
simpa only [closure_Ioi] using closure_preimage_re (Ioi a)
[GOAL]
a : ℝ
⊢ closure {z | a < z.im} = {z | a ≤ z.im}
[PROOFSTEP]
simpa only [closure_Ioi] using closure_preimage_im (Ioi a)
[GOAL]
a : ℝ
⊢ frontier {z | z.re ≤ a} = {z | z.re = a}
[PROOFSTEP]
simpa only [frontier_Iic] using frontier_preimage_re (Iic a)
[GOAL]
a : ℝ
⊢ frontier {z | z.im ≤ a} = {z | z.im = a}
[PROOFSTEP]
simpa only [frontier_Iic] using frontier_preimage_im (Iic a)
[GOAL]
a : ℝ
⊢ frontier {z | a ≤ z.re} = {z | z.re = a}
[PROOFSTEP]
simpa only [frontier_Ici] using frontier_preimage_re (Ici a)
[GOAL]
a : ℝ
⊢ frontier {z | a ≤ z.im} = {z | z.im = a}
[PROOFSTEP]
simpa only [frontier_Ici] using frontier_preimage_im (Ici a)
[GOAL]
a : ℝ
⊢ frontier {z | z.re < a} = {z | z.re = a}
[PROOFSTEP]
simpa only [frontier_Iio] using frontier_preimage_re (Iio a)
[GOAL]
a : ℝ
⊢ frontier {z | z.im < a} = {z | z.im = a}
[PROOFSTEP]
simpa only [frontier_Iio] using frontier_preimage_im (Iio a)
[GOAL]
a : ℝ
⊢ frontier {z | a < z.re} = {z | z.re = a}
[PROOFSTEP]
simpa only [frontier_Ioi] using frontier_preimage_re (Ioi a)
[GOAL]
a : ℝ
⊢ frontier {z | a < z.im} = {z | z.im = a}
[PROOFSTEP]
simpa only [frontier_Ioi] using frontier_preimage_im (Ioi a)
[GOAL]
s t : Set ℝ
⊢ closure (s ×ℂ t) = closure s ×ℂ closure t
[PROOFSTEP]
simpa only [← preimage_eq_preimage equivRealProdClm.symm.toHomeomorph.surjective,
  equivRealProdClm.symm.toHomeomorph.preimage_closure] using @closure_prod_eq _ _ _ _ s t
[GOAL]
s t : Set ℝ
⊢ interior (s ×ℂ t) = interior s ×ℂ interior t
[PROOFSTEP]
rw [Set.reProdIm, Set.reProdIm, interior_inter, interior_preimage_re, interior_preimage_im]
[GOAL]
s t : Set ℝ
⊢ frontier (s ×ℂ t) = closure s ×ℂ frontier t ∪ frontier s ×ℂ closure t
[PROOFSTEP]
simpa only [← preimage_eq_preimage equivRealProdClm.symm.toHomeomorph.surjective,
  equivRealProdClm.symm.toHomeomorph.preimage_frontier] using frontier_prod_eq s t
[GOAL]
a b : ℝ
⊢ frontier {z | a ≤ z.re ∧ b ≤ z.im} = {z | a ≤ z.re ∧ z.im = b ∨ z.re = a ∧ b ≤ z.im}
[PROOFSTEP]
simpa only [closure_Ici, frontier_Ici] using frontier_reProdIm (Ici a) (Ici b)
[GOAL]
a b : ℝ
⊢ frontier {z | a ≤ z.re ∧ z.im ≤ b} = {z | a ≤ z.re ∧ z.im = b ∨ z.re = a ∧ z.im ≤ b}
[PROOFSTEP]
simpa only [closure_Ici, closure_Iic, frontier_Ici, frontier_Iic] using frontier_reProdIm (Ici a) (Iic b)


text:
[GOAL]
a : ℤ
n : ℕ
⊢ succ^[n + 1] a = a + ↑(n + 1)
[PROOFSTEP]
rw [Function.iterate_succ', Int.ofNat_succ, ← add_assoc]
[GOAL]
a : ℤ
n : ℕ
⊢ (succ ∘ succ^[n]) a = a + ↑n + 1
[PROOFSTEP]
exact congr_arg _ (succ_iterate a n)
[GOAL]
a : ℤ
n : ℕ
⊢ pred^[n + 1] a = a - ↑(n + 1)
[PROOFSTEP]
rw [Function.iterate_succ', Int.ofNat_succ, ← sub_sub]
[GOAL]
a : ℤ
n : ℕ
⊢ (pred ∘ pred^[n]) a = a - ↑n - 1
[PROOFSTEP]
exact congr_arg _ (pred_iterate a n)
[GOAL]
a b : ℤ
h : a ≤ b
⊢ Order.succ^[toNat (b - a)] a = b
[PROOFSTEP]
rw [succ_eq_succ, succ_iterate, toNat_sub_of_le h, ← add_sub_assoc, add_sub_cancel']
[GOAL]
a b : ℤ
h : a ≤ b
⊢ Order.pred^[toNat (b - a)] b = a
[PROOFSTEP]
rw [pred_eq_pred, pred_iterate, toNat_sub_of_le h, sub_sub_cancel]
[GOAL]
z : ℤ
⊢ z - 1 ⋖ z
[PROOFSTEP]
rw [Int.covby_iff_succ_eq, sub_add_cancel]
[GOAL]
a b : ℕ
⊢ ↑a ⋖ ↑b ↔ a ⋖ b
[PROOFSTEP]
rw [Nat.covby_iff_succ_eq, Int.covby_iff_succ_eq]
[GOAL]
a b : ℕ
⊢ ↑a + 1 = ↑b ↔ a + 1 = b
[PROOFSTEP]
exact Int.coe_nat_inj'


text:
[GOAL]
α : Type u_1
p✝ : α → Prop
inst✝ : DecidablePred p✝
l : List α
a : α
p : α → Bool
⊢ all l p = true ↔ ∀ (a : α), a ∈ l → p a = true
[PROOFSTEP]
induction' l with a l ih
[GOAL]
case nil
α : Type u_1
p✝ : α → Prop
inst✝ : DecidablePred p✝
l : List α
a : α
p : α → Bool
⊢ all [] p = true ↔ ∀ (a : α), a ∈ [] → p a = true
[PROOFSTEP]
exact iff_of_true rfl (forall_mem_nil _)
[GOAL]
case cons
α : Type u_1
p✝ : α → Prop
inst✝ : DecidablePred p✝
l✝ : List α
a✝ : α
p : α → Bool
a : α
l : List α
ih : all l p = true ↔ ∀ (a : α), a ∈ l → p a = true
⊢ all (a :: l) p = true ↔ ∀ (a_1 : α), a_1 ∈ a :: l → p a_1 = true
[PROOFSTEP]
simp only [all_cons, Bool.and_coe_iff, ih, forall_mem_cons]
[GOAL]
α : Type u_1
p : α → Prop
inst✝ : DecidablePred p
l : List α
a : α
⊢ (all l fun a => decide (p a)) = true ↔ ∀ (a : α), a ∈ l → p a
[PROOFSTEP]
simp only [all_iff_forall, Bool.of_decide_iff]
[GOAL]
α : Type u_1
p✝ : α → Prop
inst✝ : DecidablePred p✝
l : List α
a : α
p : α → Bool
⊢ any l p = true ↔ ∃ a, a ∈ l ∧ p a = true
[PROOFSTEP]
induction' l with a l ih
[GOAL]
case nil
α : Type u_1
p✝ : α → Prop
inst✝ : DecidablePred p✝
l : List α
a : α
p : α → Bool
⊢ any [] p = true ↔ ∃ a, a ∈ [] ∧ p a = true
[PROOFSTEP]
exact iff_of_false Bool.not_false' (not_exists_mem_nil _)
[GOAL]
case cons
α : Type u_1
p✝ : α → Prop
inst✝ : DecidablePred p✝
l✝ : List α
a✝ : α
p : α → Bool
a : α
l : List α
ih : any l p = true ↔ ∃ a, a ∈ l ∧ p a = true
⊢ any (a :: l) p = true ↔ ∃ a_1, a_1 ∈ a :: l ∧ p a_1 = true
[PROOFSTEP]
simp only [any_cons, Bool.or_coe_iff, ih, exists_mem_cons_iff]
[GOAL]
α : Type u_1
p : α → Prop
inst✝ : DecidablePred p
l : List α
a : α
⊢ (any l fun a => decide (p a)) = true ↔ ∃ a, a ∈ l ∧ p a
[PROOFSTEP]
simp [any_iff_exists]