Theorem: RingQuot.preLift_def
File: Mathlib/Algebra/RingQuot.lean

Proof steps:
state_before: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r✝ : R → R → Prop
inst✝ : Semiring T
r : R → R → Prop
f : R →+* T
h : ∀ ⦃x y : R⦄, r x y → f x = f y
x : RingQuot r
⊢ ∀ (a b : R), Rel r a b → f a = f b
state_after: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r✝¹ : R → R → Prop
inst✝ : Semiring T
r✝ : R → R → Prop
f : R →+* T
h : ∀ ⦃x y : R⦄, r✝ x y → f x = f y
x : RingQuot r✝
a✝ b✝ : R
r : Rel r✝ a✝ b✝
⊢ f a✝ = f b✝
tactic: rintro _ _ r
state_before: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r✝¹ : R → R → Prop
inst✝ : Semiring T
r✝ : R → R → Prop
f : R →+* T
h : ∀ ⦃x y : R⦄, r✝ x y → f x = f y
x : RingQuot r✝
a✝ b✝ : R
r : Rel r✝ a✝ b✝
⊢ f a✝ = f b✝
state_after: no goals
tactic: induction r with
          | of r => exact h r
          | add_left _ r' => rw [map_add, map_add, r']
          | mul_left _ r' => rw [map_mul, map_mul, r']
          | mul_right _ r' => rw [map_mul, map_mul, r']
state_before: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r✝ : R → R → Prop
inst✝ : Semiring T
r : R → R → Prop
f : R →+* T
h : ∀ ⦃x y : R⦄, r x y → f x = f y
⊢ (↑{ toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯, map_mul' := ⋯ }).toFun 0 = 0
state_after: no goals
tactic: simp only [← zero_quot, f.map_zero]
state_before: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r✝ : R → R → Prop
inst✝ : Semiring T
r : R → R → Prop
f : R →+* T
h : ∀ ⦃x y : R⦄, r x y → f x = f y
⊢ ∀ (x y : RingQuot r),
    (↑{ toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯, map_mul' := ⋯ }).toFun (x + y) =
      (↑{ toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯, map_mul' := ⋯ }).toFun x +
        (↑{ toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯, map_mul' := ⋯ }).toFun y
state_after: case mk.mk.mk.mk
R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r✝ : R → R → Prop
inst✝ : Semiring T
r : R → R → Prop
f : R →+* T
h : ∀ ⦃x y : R⦄, r x y → f x = f y
toQuot✝¹ : Quot (Rel r)
x : R
toQuot✝ : Quot (Rel r)
y : R
⊢ (↑{ toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯, map_mul' := ⋯ }).toFun
      ({ toQuot := Quot.mk (Rel r) x } + { toQuot := Quot.mk (Rel r) y }) =
    (↑{ toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯, map_mul' := ⋯ }).toFun
        { toQuot := Quot.mk (Rel r) x } +
      (↑{ toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯, map_mul' := ⋯ }).toFun
        { toQuot := Quot.mk (Rel r) y }
tactic: rintro ⟨⟨x⟩⟩ ⟨⟨y⟩⟩
state_before: case mk.mk.mk.mk
R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r✝ : R → R → Prop
inst✝ : Semiring T
r : R → R → Prop
f : R →+* T
h : ∀ ⦃x y : R⦄, r x y → f x = f y
toQuot✝¹ : Quot (Rel r)
x : R
toQuot✝ : Quot (Rel r)
y : R
⊢ (↑{ toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯, map_mul' := ⋯ }).toFun
      ({ toQuot := Quot.mk (Rel r) x } + { toQuot := Quot.mk (Rel r) y }) =
    (↑{ toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯, map_mul' := ⋯ }).toFun
        { toQuot := Quot.mk (Rel r) x } +
      (↑{ toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯, map_mul' := ⋯ }).toFun
        { toQuot := Quot.mk (Rel r) y }
state_after: no goals
tactic: simp only [add_quot, f.map_add x y]
state_before: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r✝ : R → R → Prop
inst✝ : Semiring T
r : R → R → Prop
f : R →+* T
h : ∀ ⦃x y : R⦄, r x y → f x = f y
⊢ (fun x => Quot.lift ⇑f ⋯ x.toQuot) 1 = 1
state_after: no goals
tactic: simp only [← one_quot, f.map_one]
state_before: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r✝ : R → R → Prop
inst✝ : Semiring T
r : R → R → Prop
f : R →+* T
h : ∀ ⦃x y : R⦄, r x y → f x = f y
⊢ ∀ (x y : RingQuot r),
    { toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯ }.toFun (x * y) =
      { toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯ }.toFun x *
        { toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯ }.toFun y
state_after: case mk.mk.mk.mk
R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r✝ : R → R → Prop
inst✝ : Semiring T
r : R → R → Prop
f : R →+* T
h : ∀ ⦃x y : R⦄, r x y → f x = f y
toQuot✝¹ : Quot (Rel r)
x : R
toQuot✝ : Quot (Rel r)
y : R
⊢ { toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯ }.toFun
      ({ toQuot := Quot.mk (Rel r) x } * { toQuot := Quot.mk (Rel r) y }) =
    { toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯ }.toFun { toQuot := Quot.mk (Rel r) x } *
      { toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯ }.toFun { toQuot := Quot.mk (Rel r) y }
tactic: rintro ⟨⟨x⟩⟩ ⟨⟨y⟩⟩
state_before: case mk.mk.mk.mk
R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r✝ : R → R → Prop
inst✝ : Semiring T
r : R → R → Prop
f : R →+* T
h : ∀ ⦃x y : R⦄, r x y → f x = f y
toQuot✝¹ : Quot (Rel r)
x : R
toQuot✝ : Quot (Rel r)
y : R
⊢ { toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯ }.toFun
      ({ toQuot := Quot.mk (Rel r) x } * { toQuot := Quot.mk (Rel r) y }) =
    { toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯ }.toFun { toQuot := Quot.mk (Rel r) x } *
      { toFun := fun x => Quot.lift ⇑f ⋯ x.toQuot, map_one' := ⋯ }.toFun { toQuot := Quot.mk (Rel r) y }
state_after: no goals
tactic: simp only [mul_quot, f.map_mul x y]