/-- Any valuation ring induces a valuation on its fraction field. -/
def valuation : Valuation K (ValueGroup A K) where
  toFun := Quotient.mk''
  map_zero' := rfl
  map_one' := rfl
  map_mul' _ _ := rfl
  map_add_le_max' := by
    intro a b
    obtain ⟨xa, ya, hya, rfl⟩ : ∃ a b : A, _ := IsFractionRing.div_surjective a
    obtain ⟨xb, yb, hyb, rfl⟩ : ∃ a b : A, _ := IsFractionRing.div_surjective b
    have : (algebraMap A K) ya ≠ 0 := IsFractionRing.to_map_ne_zero_of_mem_nonZeroDivisors hya
    have : (algebraMap A K) yb ≠ 0 := IsFractionRing.to_map_ne_zero_of_mem_nonZeroDivisors hyb
    obtain ⟨c, h | h⟩ := ValuationRing.cond (xa * yb) (xb * ya)
    dsimp
    · apply le_trans _ (le_max_left _ _)
      use c + 1
      rw [Algebra.smul_def]
      field_simp
      simp only [← RingHom.map_mul, ← RingHom.map_add, ← (algebraMap A K).map_one, ← h]
      congr 1; ring
    · 

Proof state:
case intro.intro.intro.intro.intro.intro.intro.inr
A : Type u
inst✝⁵ : CommRing A
K : Type v
inst✝⁴ : Field K
inst✝³ : Algebra A K
inst✝² : IsDomain A
inst✝¹ : ValuationRing A
inst✝ : IsFractionRing A K
xa ya : A
hya : ya ∈ nonZeroDivisors A
xb yb : A
hyb : yb ∈ nonZeroDivisors A
this✝ : (algebraMap A K) ya ≠ 0
this : (algebraMap A K) yb ≠ 0
c : A
h : xb * ya * c = xa * yb
⊢ ZeroHom.toFun
      (↑{ toZeroHom := { toFun := Quotient.mk'', map_zero' := (_ : Quotient.mk'' 0 = Quotient.mk'' 0) },
          map_one' :=
            (_ :
              ZeroHom.toFun { toFun := Quotient.mk'', map_zero' := (_ : Quotient.mk'' 0 = Quotient.mk'' 0) } 1 =
                ZeroHom.toFun { toFun := Quotient.mk'', map_zero' := (_ : Quotient.mk'' 0 = Quotient.mk'' 0) } 1),
          map_mul' :=
            (_ :
              ∀ (x x_1 : K),
                ZeroHom.toFun { toFun := Quotient.mk'', map_zero' := (_ : Quotient.mk'' 0 = Quotient.mk'' 0) }
                    (x * x_1) =
                  ZeroHom.toFun { toFun := Quotient.mk'', map_zero' := (_ : Quotient.mk'' 0 = Quotient.mk'' 0) }
                    (x * x_1)) })
      ((algebraMap A K) xa / (algebraMap A K) ya + (algebraMap A K) xb / (algebraMap A K) yb) ≤
    max
      (ZeroHom.toFun
        (↑{ toZeroHom := { toFun := Quotient.mk'', map_zero' := (_ : Quotient.mk'' 0 = Quotient.mk'' 0) },
            map_one' :=
              (_ :
                ZeroHom.toFun { toFun := Quotient.mk'', map_zero' := (_ : Quotient.mk'' 0 = Quotient.mk'' 0) } 1 =
                  ZeroHom.toFun { toFun := Quotient.mk'', map_zero' := (_ : Quotient.mk'' 0 = Quotient.mk'' 0) } 1),
            map_mul' :=
              (_ :
                ∀ (x x_1 : K),
                  ZeroHom.toFun { toFun := Quotient.mk'', map_zero' := (_ : Quotient.mk'' 0 = Quotient.mk'' 0) }
                      (x * x_1) =
                    ZeroHom.toFun { toFun := Quotient.mk'', map_zero' := (_ : Quotient.mk'' 0 = Quotient.mk'' 0) }
                      (x * x_1)) })
        ((algebraMap A K) xa / (algebraMap A K) ya))
      (ZeroHom.toFun
        (↑{ toZeroHom := { toFun := Quotient.mk'', map_zero' := (_ : Quotient.mk'' 0 = Quotient.mk'' 0) },
            map_one' :=
              (_ :
                ZeroHom.toFun { toFun := Quotient.mk'', map_zero' := (_ : Quotient.mk'' 0 = Quotient.mk'' 0) } 1 =
                  ZeroHom.toFun { toFun := Quotient.mk'', map_zero' := (_ : Quotient.mk'' 0 = Quotient.mk'' 0) } 1),
            map_mul' :=
              (_ :
                ∀ (x x_1 : K),
                  ZeroHom.toFun { toFun := Quotient.mk'', map_zero' := (_ : Quotient.mk'' 0 = Quotient.mk'' 0) }
                      (x * x_1) =
                    ZeroHom.toFun { toFun := Quotient.mk'', map_zero' := (_ : Quotient.mk'' 0 = Quotient.mk'' 0) }
                      (x * x_1)) })
        ((algebraMap A K) xb / (algebraMap A K) yb))

Next tactic:
apply le_trans _ (le_max_right _ _)