{α : Type u_2} →
  [inst : CommMonoidWithZero α] →
    [toIsCancelMulZero : IsCancelMulZero α] →
      (gcd lcm : α → α → α) →
        (∀ (a b : α), gcd a b ∣ a) →
          (∀ (a b : α), gcd a b ∣ b) →
            (∀ {a b c : α}, a ∣ c → a ∣ b → a ∣ gcd c b) →
              (∀ (a b : α), Associated (gcd a b * lcm a b) (a * b)) →
                (∀ (a : α), lcm 0 a = 0) → (∀ (a : α), lcm a 0 = 0) → GCDMonoid α