/- Copyright (c) 2025 Lean FRO, LLC. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Joachim Breitner -/ module prelude public import Init.Prelude /-! This module contains theorems to be added to the `@[method_specs_simp]` simpset. When we use the idiom of a heterogeneous class with notation (e.g. `HAppend`) and a homogeneous class that the user typically instantiates, these rewrite the method specifications generated by `@[method_specs]` from the homogeneous form to the desired heterogeneous form. Should modules within `Init` use `@[method_specs]` on such instances, they should import this file. -/ public section @[method_specs_simp] theorem Add.add_eq_hAdd {α : Type u} [inst : Add α] : Eq (@Add.add α inst) (@HAdd.hAdd α α α (@instHAdd α inst)) := rfl @[method_specs_simp] theorem Sub.sub_eq_hSub [Sub α] : Eq (@Sub.sub α _) (@HSub.hSub α α α _) := rfl @[method_specs_simp] theorem Mul.mul_eq_hMul [Mul α] : Eq (@Mul.mul α _) (@HMul.hMul α α α _) := rfl @[method_specs_simp] theorem Div.div_eq_hDiv [Div α] : Eq (@Div.div α _) (@HDiv.hDiv α α α _) := rfl @[method_specs_simp] theorem Mod.mod_eq_hMod [Mod α] : Eq (@Mod.mod α _) (@HMod.hMod α α α _) := rfl @[method_specs_simp] theorem Pow.pow_eq_hPow {α β} [Pow α β] : Eq (@Pow.pow α β _) (@HPow.hPow α β α _) := rfl @[method_specs_simp] theorem SMul.smul_eq_hSMul {α β} [SMul α β] : Eq (@SMul.smul α β _) (@HSMul.hSMul α β β _) := rfl @[method_specs_simp] theorem Mul.mul_eq_smul {α} [Mul α] : Eq (@Mul.mul α _) (@SMul.smul α α _) := rfl @[method_specs_simp] theorem Append.append_eq_hAppend [Append α] : Eq (@Append.append α _) (@HAppend.hAppend α α α _) := rfl @[method_specs_simp] theorem OrElse.orElse_eq_hOrElse [OrElse α] : Eq (@OrElse.orElse α _) (@HOrElse.hOrElse α α α _) := rfl @[method_specs_simp] theorem AndThen.andThen_eq_hAndThen [AndThen α] : Eq (@AndThen.andThen α _) (@HAndThen.hAndThen α α α _) := rfl @[method_specs_simp] theorem AndOp.andOp_hAnd [AndOp α] : Eq (@AndOp.and α _) (@HAnd.hAnd α α α _) := rfl @[method_specs_simp] theorem XorOp.xor_hXor [XorOp α] : Eq (@XorOp.xor α _) (@HXor.hXor α α α _) := rfl @[method_specs_simp] theorem OrOp.or_hOr [OrOp α] : Eq (@OrOp.or α _) (@HOr.hOr α α α _) := rfl @[method_specs_simp] theorem ShiftLeft.shiftLeft_hShiftLeft [ShiftLeft α] : Eq (@ShiftLeft.shiftLeft α _) (@HShiftLeft.hShiftLeft α α α _) := rfl @[method_specs_simp] theorem ShiftRight.shiftRight_hShiftRight [ShiftRight α] : Eq (@ShiftRight.shiftRight α _) (@HShiftRight.hShiftRight α α α _) := rfl end