(* Generated by coq-of-rust *)
Require Import CoqOfRust.CoqOfRust.

Module num.
  Module nonzero.
    Module Impl_core_ops_arith_Neg_for_ref__core_num_nonzero_NonZero_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::nonzero::NonZero") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::nonzero::NonZero") [] [ Ty.path "i8" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_nonzero_NonZero_i8.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_nonzero_NonZero_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::nonzero::NonZero") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::nonzero::NonZero") [] [ Ty.path "i16" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_nonzero_NonZero_i16.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_nonzero_NonZero_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::nonzero::NonZero") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::nonzero::NonZero") [] [ Ty.path "i32" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_nonzero_NonZero_i32.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_nonzero_NonZero_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::nonzero::NonZero") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::nonzero::NonZero") [] [ Ty.path "i64" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_nonzero_NonZero_i64.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_nonzero_NonZero_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::nonzero::NonZero") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::nonzero::NonZero") [] [ Ty.path "i128" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_nonzero_NonZero_i128.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_nonzero_NonZero_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::nonzero::NonZero") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::nonzero::NonZero") [] [ Ty.path "isize" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_nonzero_NonZero_isize.
  End nonzero.
  
  Module saturating.
    Module Impl_core_ops_arith_Add_core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                      [
                        Ty.apply
                          (Ty.path "core::num::saturating::Saturating")
                          []
                          [ Ty.path "usize" ]
                      ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_AddAssign_ref__usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_Sub_core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                      [
                        Ty.apply
                          (Ty.path "core::num::saturating::Saturating")
                          []
                          [ Ty.path "usize" ]
                      ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_SubAssign_ref__usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_Mul_core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                      [
                        Ty.apply
                          (Ty.path "core::num::saturating::Saturating")
                          []
                          [ Ty.path "usize" ]
                      ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_MulAssign_ref__usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_Div_core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                      [
                        Ty.apply
                          (Ty.path "core::num::saturating::Saturating")
                          []
                          [ Ty.path "usize" ]
                      ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_DivAssign_ref__usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_Rem_core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                      [
                        Ty.apply
                          (Ty.path "core::num::saturating::Saturating")
                          []
                          [ Ty.path "usize" ]
                      ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_RemAssign_ref__usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                      [
                        Ty.apply
                          (Ty.path "core::num::saturating::Saturating")
                          []
                          [ Ty.path "usize" ]
                      ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                      [
                        Ty.apply
                          (Ty.path "core::num::saturating::Saturating")
                          []
                          [ Ty.path "usize" ]
                      ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_usize_for_ref__core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                      [
                        Ty.apply
                          (Ty.path "core::num::saturating::Saturating")
                          []
                          [ Ty.path "usize" ]
                      ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__usize_for_core_num_saturating_Saturating_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__usize_for_core_num_saturating_Saturating_usize.
    
    Module Impl_core_ops_arith_Add_core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ]
                      ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_AddAssign_ref__u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                      [ Ty.path "u8" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_Sub_core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ]
                      ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_SubAssign_ref__u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                      [ Ty.path "u8" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_Mul_core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ]
                      ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_MulAssign_ref__u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                      [ Ty.path "u8" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_Div_core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ]
                      ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_DivAssign_ref__u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                      [ Ty.path "u8" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_Rem_core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ]
                      ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_RemAssign_ref__u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                      [ Ty.path "u8" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ]
                      ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                      [ Ty.path "u8" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ]
                      ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                      [ Ty.path "u8" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u8_for_ref__core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ]
                      ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__u8_for_core_num_saturating_Saturating_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u8" ],
                      [ Ty.path "u8" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__u8_for_core_num_saturating_Saturating_u8.
    
    Module Impl_core_ops_arith_Add_core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ]
                      ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_AddAssign_ref__u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                      [ Ty.path "u16" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_Sub_core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ]
                      ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_SubAssign_ref__u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                      [ Ty.path "u16" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_Mul_core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ]
                      ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_MulAssign_ref__u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                      [ Ty.path "u16" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_Div_core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ]
                      ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_DivAssign_ref__u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                      [ Ty.path "u16" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_Rem_core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ]
                      ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_RemAssign_ref__u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                      [ Ty.path "u16" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ]
                      ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                      [ Ty.path "u16" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ]
                      ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                      [ Ty.path "u16" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u16_for_ref__core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ]
                      ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__u16_for_core_num_saturating_Saturating_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u16" ],
                      [ Ty.path "u16" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__u16_for_core_num_saturating_Saturating_u16.
    
    Module Impl_core_ops_arith_Add_core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ]
                      ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_AddAssign_ref__u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                      [ Ty.path "u32" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_Sub_core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ]
                      ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_SubAssign_ref__u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                      [ Ty.path "u32" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_Mul_core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ]
                      ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_MulAssign_ref__u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                      [ Ty.path "u32" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_Div_core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ]
                      ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_DivAssign_ref__u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                      [ Ty.path "u32" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_Rem_core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ]
                      ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_RemAssign_ref__u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                      [ Ty.path "u32" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ]
                      ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                      [ Ty.path "u32" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ]
                      ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                      [ Ty.path "u32" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u32_for_ref__core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ]
                      ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__u32_for_core_num_saturating_Saturating_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u32" ],
                      [ Ty.path "u32" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__u32_for_core_num_saturating_Saturating_u32.
    
    Module Impl_core_ops_arith_Add_core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ]
                      ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_AddAssign_ref__u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                      [ Ty.path "u64" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_Sub_core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ]
                      ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_SubAssign_ref__u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                      [ Ty.path "u64" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_Mul_core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ]
                      ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_MulAssign_ref__u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                      [ Ty.path "u64" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_Div_core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ]
                      ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_DivAssign_ref__u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                      [ Ty.path "u64" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_Rem_core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ]
                      ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_RemAssign_ref__u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                      [ Ty.path "u64" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ]
                      ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                      [ Ty.path "u64" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ]
                      ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                      [ Ty.path "u64" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u64_for_ref__core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ]
                      ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__u64_for_core_num_saturating_Saturating_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u64" ],
                      [ Ty.path "u64" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__u64_for_core_num_saturating_Saturating_u64.
    
    Module Impl_core_ops_arith_Add_core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ]
                      ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_AddAssign_ref__u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                      [ Ty.path "u128" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_Sub_core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ]
                      ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_SubAssign_ref__u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                      [ Ty.path "u128" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_Mul_core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ]
                      ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_MulAssign_ref__u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                      [ Ty.path "u128" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_Div_core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ]
                      ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_DivAssign_ref__u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                      [ Ty.path "u128" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_Rem_core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ]
                      ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_RemAssign_ref__u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                      [ Ty.path "u128" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ]
                      ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                      [ Ty.path "u128" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ]
                      ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                      [ Ty.path "u128" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_u128_for_ref__core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ]
                      ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__u128_for_core_num_saturating_Saturating_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "u128" ],
                      [ Ty.path "u128" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__u128_for_core_num_saturating_Saturating_u128.
    
    Module Impl_core_ops_arith_Add_core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                      [
                        Ty.apply
                          (Ty.path "core::num::saturating::Saturating")
                          []
                          [ Ty.path "isize" ]
                      ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_AddAssign_ref__isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                      [ Ty.path "isize" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_Sub_core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                      [
                        Ty.apply
                          (Ty.path "core::num::saturating::Saturating")
                          []
                          [ Ty.path "isize" ]
                      ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_SubAssign_ref__isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                      [ Ty.path "isize" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_Mul_core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                      [
                        Ty.apply
                          (Ty.path "core::num::saturating::Saturating")
                          []
                          [ Ty.path "isize" ]
                      ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_MulAssign_ref__isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                      [ Ty.path "isize" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_Div_core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                      [
                        Ty.apply
                          (Ty.path "core::num::saturating::Saturating")
                          []
                          [ Ty.path "isize" ]
                      ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_DivAssign_ref__isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                      [ Ty.path "isize" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_Rem_core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                      [
                        Ty.apply
                          (Ty.path "core::num::saturating::Saturating")
                          []
                          [ Ty.path "isize" ]
                      ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_RemAssign_ref__isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                      [ Ty.path "isize" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                      [
                        Ty.apply
                          (Ty.path "core::num::saturating::Saturating")
                          []
                          [ Ty.path "isize" ]
                      ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                      [ Ty.path "isize" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                      [
                        Ty.apply
                          (Ty.path "core::num::saturating::Saturating")
                          []
                          [ Ty.path "isize" ]
                      ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                      [ Ty.path "isize" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_isize_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                      [
                        Ty.apply
                          (Ty.path "core::num::saturating::Saturating")
                          []
                          [ Ty.path "isize" ]
                      ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__isize_for_core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                      [ Ty.path "isize" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__isize_for_core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_Add_core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ]
                      ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_AddAssign_ref__i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                      [ Ty.path "i8" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_Sub_core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ]
                      ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_SubAssign_ref__i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                      [ Ty.path "i8" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_Mul_core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ]
                      ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_MulAssign_ref__i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                      [ Ty.path "i8" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_Div_core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ]
                      ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_DivAssign_ref__i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                      [ Ty.path "i8" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_Rem_core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ]
                      ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_RemAssign_ref__i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                      [ Ty.path "i8" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ]
                      ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                      [ Ty.path "i8" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ]
                      ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                      [ Ty.path "i8" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i8_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ]
                      ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__i8_for_core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                      [ Ty.path "i8" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__i8_for_core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_Add_core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ]
                      ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_AddAssign_ref__i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                      [ Ty.path "i16" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_Sub_core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ]
                      ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_SubAssign_ref__i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                      [ Ty.path "i16" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_Mul_core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ]
                      ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_MulAssign_ref__i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                      [ Ty.path "i16" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_Div_core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ]
                      ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_DivAssign_ref__i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                      [ Ty.path "i16" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_Rem_core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ]
                      ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_RemAssign_ref__i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                      [ Ty.path "i16" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ]
                      ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                      [ Ty.path "i16" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ]
                      ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                      [ Ty.path "i16" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i16_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ]
                      ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__i16_for_core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                      [ Ty.path "i16" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__i16_for_core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_Add_core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ]
                      ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_AddAssign_ref__i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                      [ Ty.path "i32" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_Sub_core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ]
                      ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_SubAssign_ref__i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                      [ Ty.path "i32" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_Mul_core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ]
                      ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_MulAssign_ref__i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                      [ Ty.path "i32" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_Div_core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ]
                      ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_DivAssign_ref__i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                      [ Ty.path "i32" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_Rem_core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ]
                      ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_RemAssign_ref__i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                      [ Ty.path "i32" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ]
                      ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                      [ Ty.path "i32" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ]
                      ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                      [ Ty.path "i32" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i32_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ]
                      ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__i32_for_core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                      [ Ty.path "i32" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__i32_for_core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_Add_core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ]
                      ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_AddAssign_ref__i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                      [ Ty.path "i64" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_Sub_core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ]
                      ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_SubAssign_ref__i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                      [ Ty.path "i64" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_Mul_core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ]
                      ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_MulAssign_ref__i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                      [ Ty.path "i64" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_Div_core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ]
                      ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_DivAssign_ref__i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                      [ Ty.path "i64" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_Rem_core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ]
                      ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_RemAssign_ref__i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                      [ Ty.path "i64" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ]
                      ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                      [ Ty.path "i64" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ]
                      ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                      [ Ty.path "i64" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i64_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ]
                      ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__i64_for_core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                      [ Ty.path "i64" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__i64_for_core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_Add_core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ]
                      ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_AddAssign_ref__i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                      [ Ty.path "i128" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_Sub_core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ]
                      ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_SubAssign_ref__i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                      [ Ty.path "i128" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_Mul_core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ]
                      ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_MulAssign_ref__i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                      [ Ty.path "i128" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_Div_core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ]
                      ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_DivAssign_ref__i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                      [ Ty.path "i128" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_Rem_core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ]
                      ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_RemAssign_ref__i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                      [ Ty.path "i128" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ]
                      ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                      [ Ty.path "i128" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ]
                      ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                      [ Ty.path "i128" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_saturating_Saturating_i128_for_ref__core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                      [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ]
                      ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_saturating_Saturating_i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__i128_for_core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                      [ Ty.path "i128" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__i128_for_core_num_saturating_Saturating_i128.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_saturating_Saturating_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "isize" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_saturating_Saturating_isize.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_saturating_Saturating_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i8" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_saturating_Saturating_i8.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_saturating_Saturating_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i16" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_saturating_Saturating_i16.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_saturating_Saturating_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i32" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_saturating_Saturating_i32.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_saturating_Saturating_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i64" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_saturating_Saturating_i64.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_saturating_Saturating_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::saturating::Saturating") [] [ Ty.path "i128" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_saturating_Saturating_i128.
  End saturating.
  
  Module wrapping.
    Module Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_AddAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_SubAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_MulAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_DivAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_RemAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_usize_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                      [ Ty.path "usize" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__usize_for_core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_usize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "usize" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_usize.
    
    Module Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_AddAssign_ref__u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.path "u8" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_SubAssign_ref__u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.path "u8" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_MulAssign_ref__u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.path "u8" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_DivAssign_ref__u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.path "u8" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_RemAssign_ref__u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.path "u8" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.path "u8" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.path "u8" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u8_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__u8_for_core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                      [ Ty.path "u8" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__u8_for_core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_u8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u8" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_u8.
    
    Module Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_AddAssign_ref__u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.path "u16" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_SubAssign_ref__u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.path "u16" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_MulAssign_ref__u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.path "u16" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_DivAssign_ref__u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.path "u16" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_RemAssign_ref__u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.path "u16" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.path "u16" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.path "u16" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u16_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__u16_for_core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                      [ Ty.path "u16" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__u16_for_core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_u16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u16" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_u16.
    
    Module Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_AddAssign_ref__u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.path "u32" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_SubAssign_ref__u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.path "u32" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_MulAssign_ref__u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.path "u32" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_DivAssign_ref__u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.path "u32" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_RemAssign_ref__u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.path "u32" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.path "u32" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.path "u32" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u32_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__u32_for_core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                      [ Ty.path "u32" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__u32_for_core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_u32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u32" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_u32.
    
    Module Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_AddAssign_ref__u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.path "u64" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_SubAssign_ref__u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.path "u64" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_MulAssign_ref__u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.path "u64" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_DivAssign_ref__u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.path "u64" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_RemAssign_ref__u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.path "u64" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.path "u64" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.path "u64" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u64_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__u64_for_core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                      [ Ty.path "u64" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__u64_for_core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_u64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u64" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_u64.
    
    Module Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_AddAssign_ref__u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.path "u128" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_SubAssign_ref__u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.path "u128" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_MulAssign_ref__u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.path "u128" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_DivAssign_ref__u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.path "u128" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_RemAssign_ref__u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.path "u128" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.path "u128" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.path "u128" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_u128_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__u128_for_core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                      [ Ty.path "u128" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__u128_for_core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_u128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "u128" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_u128.
    
    Module Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_AddAssign_ref__isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.path "isize" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_SubAssign_ref__isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.path "isize" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_MulAssign_ref__isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.path "isize" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_DivAssign_ref__isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.path "isize" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_RemAssign_ref__isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.path "isize" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.path "isize" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.path "isize" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_isize_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__isize_for_core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                      [ Ty.path "isize" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__isize_for_core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_isize.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "isize" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_isize.
    
    Module Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_AddAssign_ref__i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.path "i8" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_SubAssign_ref__i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.path "i8" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_MulAssign_ref__i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.path "i8" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_DivAssign_ref__i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.path "i8" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_RemAssign_ref__i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.path "i8" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.path "i8" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.path "i8" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i8_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__i8_for_core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                      [ Ty.path "i8" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__i8_for_core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_i8.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i8" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_i8.
    
    Module Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_AddAssign_ref__i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.path "i16" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_SubAssign_ref__i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.path "i16" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_MulAssign_ref__i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.path "i16" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_DivAssign_ref__i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.path "i16" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_RemAssign_ref__i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.path "i16" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.path "i16" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.path "i16" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i16_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__i16_for_core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                      [ Ty.path "i16" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__i16_for_core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_i16.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i16" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_i16.
    
    Module Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_AddAssign_ref__i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.path "i32" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_SubAssign_ref__i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.path "i32" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_MulAssign_ref__i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.path "i32" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_DivAssign_ref__i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.path "i32" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_RemAssign_ref__i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.path "i32" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.path "i32" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.path "i32" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i32_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__i32_for_core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                      [ Ty.path "i32" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__i32_for_core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_i32.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i32" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_i32.
    
    Module Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_AddAssign_ref__i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.path "i64" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_SubAssign_ref__i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.path "i64" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_MulAssign_ref__i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.path "i64" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_DivAssign_ref__i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.path "i64" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_RemAssign_ref__i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.path "i64" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.path "i64" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.path "i64" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i64_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__i64_for_core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                      [ Ty.path "i64" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__i64_for_core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_i64.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i64" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_i64.
    
    Module Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_AddAssign_ref__i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.path "i128" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_SubAssign_ref__i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.path "i128" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_MulAssign_ref__i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.path "i128" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_DivAssign_ref__i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.path "i128" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_RemAssign_ref__i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.path "i128" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Not",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [],
                "not",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.path "i128" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.path "i128" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [ (* Rhs *) Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__core_num_wrapping_Wrapping_i128_for_ref__core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *)
          [
            (* Rhs *)
            Ty.apply
              (Ty.path "&")
              []
              [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ]
          ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__core_num_wrapping_Wrapping_i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__i128_for_core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ].
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                      [ Ty.path "i128" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__i128_for_core_num_wrapping_Wrapping_i128.
    
    Module Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_i128.
      Definition Self : Ty.t :=
        Ty.apply
          (Ty.path "&")
          []
          [ Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ] ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Neg",
                Ty.apply (Ty.path "core::num::wrapping::Wrapping") [] [ Ty.path "i128" ],
                [],
                "neg",
                []
              |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__core_num_wrapping_Wrapping_i128.
  End wrapping.
End num.

Module ops.
  Module arith.
    Module Impl_core_ops_arith_Add_usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_usize_for_ref__usize.
    
    Module Impl_core_ops_arith_Add_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__usize_for_usize.
    
    Module Impl_core_ops_arith_Add_ref__usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__usize_for_ref__usize.
    
    Module Impl_core_ops_arith_Add_u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_u8_for_ref__u8.
    
    Module Impl_core_ops_arith_Add_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__u8_for_u8.
    
    Module Impl_core_ops_arith_Add_ref__u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__u8_for_ref__u8.
    
    Module Impl_core_ops_arith_Add_u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_u16_for_ref__u16.
    
    Module Impl_core_ops_arith_Add_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__u16_for_u16.
    
    Module Impl_core_ops_arith_Add_ref__u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__u16_for_ref__u16.
    
    Module Impl_core_ops_arith_Add_u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_u32_for_ref__u32.
    
    Module Impl_core_ops_arith_Add_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__u32_for_u32.
    
    Module Impl_core_ops_arith_Add_ref__u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__u32_for_ref__u32.
    
    Module Impl_core_ops_arith_Add_u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_u64_for_ref__u64.
    
    Module Impl_core_ops_arith_Add_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__u64_for_u64.
    
    Module Impl_core_ops_arith_Add_ref__u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__u64_for_ref__u64.
    
    Module Impl_core_ops_arith_Add_u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_u128_for_ref__u128.
    
    Module Impl_core_ops_arith_Add_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__u128_for_u128.
    
    Module Impl_core_ops_arith_Add_ref__u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__u128_for_ref__u128.
    
    Module Impl_core_ops_arith_Add_isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_isize_for_ref__isize.
    
    Module Impl_core_ops_arith_Add_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__isize_for_isize.
    
    Module Impl_core_ops_arith_Add_ref__isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__isize_for_ref__isize.
    
    Module Impl_core_ops_arith_Add_i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_i8_for_ref__i8.
    
    Module Impl_core_ops_arith_Add_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__i8_for_i8.
    
    Module Impl_core_ops_arith_Add_ref__i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__i8_for_ref__i8.
    
    Module Impl_core_ops_arith_Add_i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_i16_for_ref__i16.
    
    Module Impl_core_ops_arith_Add_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__i16_for_i16.
    
    Module Impl_core_ops_arith_Add_ref__i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__i16_for_ref__i16.
    
    Module Impl_core_ops_arith_Add_i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_i32_for_ref__i32.
    
    Module Impl_core_ops_arith_Add_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__i32_for_i32.
    
    Module Impl_core_ops_arith_Add_ref__i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__i32_for_ref__i32.
    
    Module Impl_core_ops_arith_Add_i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_i64_for_ref__i64.
    
    Module Impl_core_ops_arith_Add_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__i64_for_i64.
    
    Module Impl_core_ops_arith_Add_ref__i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__i64_for_ref__i64.
    
    Module Impl_core_ops_arith_Add_i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_i128_for_ref__i128.
    
    Module Impl_core_ops_arith_Add_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__i128_for_i128.
    
    Module Impl_core_ops_arith_Add_ref__i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__i128_for_ref__i128.
    
    Module Impl_core_ops_arith_Add_f16_for_ref__f16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "f16",
                [ Ty.path "f16" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_f16_for_ref__f16.
    
    Module Impl_core_ops_arith_Add_ref__f16_for_f16.
      Definition Self : Ty.t := Ty.path "f16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "f16",
                [ Ty.path "f16" ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__f16_for_f16.
    
    Module Impl_core_ops_arith_Add_ref__f16_for_ref__f16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "f16",
                [ Ty.path "f16" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__f16_for_ref__f16.
    
    Module Impl_core_ops_arith_Add_f32_for_ref__f32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "f32",
                [ Ty.path "f32" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_f32_for_ref__f32.
    
    Module Impl_core_ops_arith_Add_ref__f32_for_f32.
      Definition Self : Ty.t := Ty.path "f32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "f32",
                [ Ty.path "f32" ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__f32_for_f32.
    
    Module Impl_core_ops_arith_Add_ref__f32_for_ref__f32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "f32",
                [ Ty.path "f32" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__f32_for_ref__f32.
    
    Module Impl_core_ops_arith_Add_f64_for_ref__f64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "f64",
                [ Ty.path "f64" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_f64_for_ref__f64.
    
    Module Impl_core_ops_arith_Add_ref__f64_for_f64.
      Definition Self : Ty.t := Ty.path "f64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "f64",
                [ Ty.path "f64" ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__f64_for_f64.
    
    Module Impl_core_ops_arith_Add_ref__f64_for_ref__f64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "f64",
                [ Ty.path "f64" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__f64_for_ref__f64.
    
    Module Impl_core_ops_arith_Add_f128_for_ref__f128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "f128",
                [ Ty.path "f128" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_f128_for_ref__f128.
    
    Module Impl_core_ops_arith_Add_ref__f128_for_f128.
      Definition Self : Ty.t := Ty.path "f128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "f128",
                [ Ty.path "f128" ],
                "add",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__f128_for_f128.
    
    Module Impl_core_ops_arith_Add_ref__f128_for_ref__f128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition add (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Add",
                Ty.path "f128",
                [ Ty.path "f128" ],
                "add",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Add"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("add", InstanceField.Method add) ].
    End Impl_core_ops_arith_Add_ref__f128_for_ref__f128.
    
    Module Impl_core_ops_arith_Sub_usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_usize_for_ref__usize.
    
    Module Impl_core_ops_arith_Sub_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__usize_for_usize.
    
    Module Impl_core_ops_arith_Sub_ref__usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__usize_for_ref__usize.
    
    Module Impl_core_ops_arith_Sub_u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_u8_for_ref__u8.
    
    Module Impl_core_ops_arith_Sub_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__u8_for_u8.
    
    Module Impl_core_ops_arith_Sub_ref__u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__u8_for_ref__u8.
    
    Module Impl_core_ops_arith_Sub_u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_u16_for_ref__u16.
    
    Module Impl_core_ops_arith_Sub_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__u16_for_u16.
    
    Module Impl_core_ops_arith_Sub_ref__u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__u16_for_ref__u16.
    
    Module Impl_core_ops_arith_Sub_u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_u32_for_ref__u32.
    
    Module Impl_core_ops_arith_Sub_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__u32_for_u32.
    
    Module Impl_core_ops_arith_Sub_ref__u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__u32_for_ref__u32.
    
    Module Impl_core_ops_arith_Sub_u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_u64_for_ref__u64.
    
    Module Impl_core_ops_arith_Sub_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__u64_for_u64.
    
    Module Impl_core_ops_arith_Sub_ref__u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__u64_for_ref__u64.
    
    Module Impl_core_ops_arith_Sub_u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_u128_for_ref__u128.
    
    Module Impl_core_ops_arith_Sub_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__u128_for_u128.
    
    Module Impl_core_ops_arith_Sub_ref__u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__u128_for_ref__u128.
    
    Module Impl_core_ops_arith_Sub_isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_isize_for_ref__isize.
    
    Module Impl_core_ops_arith_Sub_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__isize_for_isize.
    
    Module Impl_core_ops_arith_Sub_ref__isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__isize_for_ref__isize.
    
    Module Impl_core_ops_arith_Sub_i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_i8_for_ref__i8.
    
    Module Impl_core_ops_arith_Sub_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__i8_for_i8.
    
    Module Impl_core_ops_arith_Sub_ref__i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__i8_for_ref__i8.
    
    Module Impl_core_ops_arith_Sub_i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_i16_for_ref__i16.
    
    Module Impl_core_ops_arith_Sub_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__i16_for_i16.
    
    Module Impl_core_ops_arith_Sub_ref__i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__i16_for_ref__i16.
    
    Module Impl_core_ops_arith_Sub_i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_i32_for_ref__i32.
    
    Module Impl_core_ops_arith_Sub_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__i32_for_i32.
    
    Module Impl_core_ops_arith_Sub_ref__i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__i32_for_ref__i32.
    
    Module Impl_core_ops_arith_Sub_i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_i64_for_ref__i64.
    
    Module Impl_core_ops_arith_Sub_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__i64_for_i64.
    
    Module Impl_core_ops_arith_Sub_ref__i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__i64_for_ref__i64.
    
    Module Impl_core_ops_arith_Sub_i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_i128_for_ref__i128.
    
    Module Impl_core_ops_arith_Sub_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__i128_for_i128.
    
    Module Impl_core_ops_arith_Sub_ref__i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__i128_for_ref__i128.
    
    Module Impl_core_ops_arith_Sub_f16_for_ref__f16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "f16",
                [ Ty.path "f16" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_f16_for_ref__f16.
    
    Module Impl_core_ops_arith_Sub_ref__f16_for_f16.
      Definition Self : Ty.t := Ty.path "f16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "f16",
                [ Ty.path "f16" ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__f16_for_f16.
    
    Module Impl_core_ops_arith_Sub_ref__f16_for_ref__f16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "f16",
                [ Ty.path "f16" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__f16_for_ref__f16.
    
    Module Impl_core_ops_arith_Sub_f32_for_ref__f32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "f32",
                [ Ty.path "f32" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_f32_for_ref__f32.
    
    Module Impl_core_ops_arith_Sub_ref__f32_for_f32.
      Definition Self : Ty.t := Ty.path "f32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "f32",
                [ Ty.path "f32" ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__f32_for_f32.
    
    Module Impl_core_ops_arith_Sub_ref__f32_for_ref__f32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "f32",
                [ Ty.path "f32" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__f32_for_ref__f32.
    
    Module Impl_core_ops_arith_Sub_f64_for_ref__f64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "f64",
                [ Ty.path "f64" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_f64_for_ref__f64.
    
    Module Impl_core_ops_arith_Sub_ref__f64_for_f64.
      Definition Self : Ty.t := Ty.path "f64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "f64",
                [ Ty.path "f64" ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__f64_for_f64.
    
    Module Impl_core_ops_arith_Sub_ref__f64_for_ref__f64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "f64",
                [ Ty.path "f64" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__f64_for_ref__f64.
    
    Module Impl_core_ops_arith_Sub_f128_for_ref__f128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "f128",
                [ Ty.path "f128" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_f128_for_ref__f128.
    
    Module Impl_core_ops_arith_Sub_ref__f128_for_f128.
      Definition Self : Ty.t := Ty.path "f128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "f128",
                [ Ty.path "f128" ],
                "sub",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__f128_for_f128.
    
    Module Impl_core_ops_arith_Sub_ref__f128_for_ref__f128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition sub (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Sub",
                Ty.path "f128",
                [ Ty.path "f128" ],
                "sub",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Sub"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("sub", InstanceField.Method sub) ].
    End Impl_core_ops_arith_Sub_ref__f128_for_ref__f128.
    
    Module Impl_core_ops_arith_Mul_usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_usize_for_ref__usize.
    
    Module Impl_core_ops_arith_Mul_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__usize_for_usize.
    
    Module Impl_core_ops_arith_Mul_ref__usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__usize_for_ref__usize.
    
    Module Impl_core_ops_arith_Mul_u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_u8_for_ref__u8.
    
    Module Impl_core_ops_arith_Mul_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__u8_for_u8.
    
    Module Impl_core_ops_arith_Mul_ref__u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__u8_for_ref__u8.
    
    Module Impl_core_ops_arith_Mul_u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_u16_for_ref__u16.
    
    Module Impl_core_ops_arith_Mul_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__u16_for_u16.
    
    Module Impl_core_ops_arith_Mul_ref__u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__u16_for_ref__u16.
    
    Module Impl_core_ops_arith_Mul_u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_u32_for_ref__u32.
    
    Module Impl_core_ops_arith_Mul_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__u32_for_u32.
    
    Module Impl_core_ops_arith_Mul_ref__u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__u32_for_ref__u32.
    
    Module Impl_core_ops_arith_Mul_u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_u64_for_ref__u64.
    
    Module Impl_core_ops_arith_Mul_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__u64_for_u64.
    
    Module Impl_core_ops_arith_Mul_ref__u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__u64_for_ref__u64.
    
    Module Impl_core_ops_arith_Mul_u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_u128_for_ref__u128.
    
    Module Impl_core_ops_arith_Mul_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__u128_for_u128.
    
    Module Impl_core_ops_arith_Mul_ref__u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__u128_for_ref__u128.
    
    Module Impl_core_ops_arith_Mul_isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_isize_for_ref__isize.
    
    Module Impl_core_ops_arith_Mul_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__isize_for_isize.
    
    Module Impl_core_ops_arith_Mul_ref__isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__isize_for_ref__isize.
    
    Module Impl_core_ops_arith_Mul_i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_i8_for_ref__i8.
    
    Module Impl_core_ops_arith_Mul_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__i8_for_i8.
    
    Module Impl_core_ops_arith_Mul_ref__i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__i8_for_ref__i8.
    
    Module Impl_core_ops_arith_Mul_i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_i16_for_ref__i16.
    
    Module Impl_core_ops_arith_Mul_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__i16_for_i16.
    
    Module Impl_core_ops_arith_Mul_ref__i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__i16_for_ref__i16.
    
    Module Impl_core_ops_arith_Mul_i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_i32_for_ref__i32.
    
    Module Impl_core_ops_arith_Mul_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__i32_for_i32.
    
    Module Impl_core_ops_arith_Mul_ref__i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__i32_for_ref__i32.
    
    Module Impl_core_ops_arith_Mul_i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_i64_for_ref__i64.
    
    Module Impl_core_ops_arith_Mul_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__i64_for_i64.
    
    Module Impl_core_ops_arith_Mul_ref__i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__i64_for_ref__i64.
    
    Module Impl_core_ops_arith_Mul_i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_i128_for_ref__i128.
    
    Module Impl_core_ops_arith_Mul_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__i128_for_i128.
    
    Module Impl_core_ops_arith_Mul_ref__i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__i128_for_ref__i128.
    
    Module Impl_core_ops_arith_Mul_f16_for_ref__f16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "f16",
                [ Ty.path "f16" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_f16_for_ref__f16.
    
    Module Impl_core_ops_arith_Mul_ref__f16_for_f16.
      Definition Self : Ty.t := Ty.path "f16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "f16",
                [ Ty.path "f16" ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__f16_for_f16.
    
    Module Impl_core_ops_arith_Mul_ref__f16_for_ref__f16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "f16",
                [ Ty.path "f16" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__f16_for_ref__f16.
    
    Module Impl_core_ops_arith_Mul_f32_for_ref__f32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "f32",
                [ Ty.path "f32" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_f32_for_ref__f32.
    
    Module Impl_core_ops_arith_Mul_ref__f32_for_f32.
      Definition Self : Ty.t := Ty.path "f32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "f32",
                [ Ty.path "f32" ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__f32_for_f32.
    
    Module Impl_core_ops_arith_Mul_ref__f32_for_ref__f32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "f32",
                [ Ty.path "f32" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__f32_for_ref__f32.
    
    Module Impl_core_ops_arith_Mul_f64_for_ref__f64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "f64",
                [ Ty.path "f64" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_f64_for_ref__f64.
    
    Module Impl_core_ops_arith_Mul_ref__f64_for_f64.
      Definition Self : Ty.t := Ty.path "f64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "f64",
                [ Ty.path "f64" ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__f64_for_f64.
    
    Module Impl_core_ops_arith_Mul_ref__f64_for_ref__f64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "f64",
                [ Ty.path "f64" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__f64_for_ref__f64.
    
    Module Impl_core_ops_arith_Mul_f128_for_ref__f128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "f128",
                [ Ty.path "f128" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_f128_for_ref__f128.
    
    Module Impl_core_ops_arith_Mul_ref__f128_for_f128.
      Definition Self : Ty.t := Ty.path "f128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "f128",
                [ Ty.path "f128" ],
                "mul",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__f128_for_f128.
    
    Module Impl_core_ops_arith_Mul_ref__f128_for_ref__f128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition mul (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Mul",
                Ty.path "f128",
                [ Ty.path "f128" ],
                "mul",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Mul"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("mul", InstanceField.Method mul) ].
    End Impl_core_ops_arith_Mul_ref__f128_for_ref__f128.
    
    Module Impl_core_ops_arith_Div_usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_usize_for_ref__usize.
    
    Module Impl_core_ops_arith_Div_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__usize_for_usize.
    
    Module Impl_core_ops_arith_Div_ref__usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__usize_for_ref__usize.
    
    Module Impl_core_ops_arith_Div_u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_u8_for_ref__u8.
    
    Module Impl_core_ops_arith_Div_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__u8_for_u8.
    
    Module Impl_core_ops_arith_Div_ref__u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__u8_for_ref__u8.
    
    Module Impl_core_ops_arith_Div_u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_u16_for_ref__u16.
    
    Module Impl_core_ops_arith_Div_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__u16_for_u16.
    
    Module Impl_core_ops_arith_Div_ref__u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__u16_for_ref__u16.
    
    Module Impl_core_ops_arith_Div_u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_u32_for_ref__u32.
    
    Module Impl_core_ops_arith_Div_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__u32_for_u32.
    
    Module Impl_core_ops_arith_Div_ref__u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__u32_for_ref__u32.
    
    Module Impl_core_ops_arith_Div_u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_u64_for_ref__u64.
    
    Module Impl_core_ops_arith_Div_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__u64_for_u64.
    
    Module Impl_core_ops_arith_Div_ref__u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__u64_for_ref__u64.
    
    Module Impl_core_ops_arith_Div_u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_u128_for_ref__u128.
    
    Module Impl_core_ops_arith_Div_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__u128_for_u128.
    
    Module Impl_core_ops_arith_Div_ref__u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__u128_for_ref__u128.
    
    Module Impl_core_ops_arith_Div_isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_isize_for_ref__isize.
    
    Module Impl_core_ops_arith_Div_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__isize_for_isize.
    
    Module Impl_core_ops_arith_Div_ref__isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__isize_for_ref__isize.
    
    Module Impl_core_ops_arith_Div_i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_i8_for_ref__i8.
    
    Module Impl_core_ops_arith_Div_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__i8_for_i8.
    
    Module Impl_core_ops_arith_Div_ref__i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__i8_for_ref__i8.
    
    Module Impl_core_ops_arith_Div_i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_i16_for_ref__i16.
    
    Module Impl_core_ops_arith_Div_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__i16_for_i16.
    
    Module Impl_core_ops_arith_Div_ref__i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__i16_for_ref__i16.
    
    Module Impl_core_ops_arith_Div_i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_i32_for_ref__i32.
    
    Module Impl_core_ops_arith_Div_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__i32_for_i32.
    
    Module Impl_core_ops_arith_Div_ref__i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__i32_for_ref__i32.
    
    Module Impl_core_ops_arith_Div_i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_i64_for_ref__i64.
    
    Module Impl_core_ops_arith_Div_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__i64_for_i64.
    
    Module Impl_core_ops_arith_Div_ref__i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__i64_for_ref__i64.
    
    Module Impl_core_ops_arith_Div_i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_i128_for_ref__i128.
    
    Module Impl_core_ops_arith_Div_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__i128_for_i128.
    
    Module Impl_core_ops_arith_Div_ref__i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__i128_for_ref__i128.
    
    Module Impl_core_ops_arith_Div_f16_for_ref__f16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "f16",
                [ Ty.path "f16" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_f16_for_ref__f16.
    
    Module Impl_core_ops_arith_Div_ref__f16_for_f16.
      Definition Self : Ty.t := Ty.path "f16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "f16",
                [ Ty.path "f16" ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__f16_for_f16.
    
    Module Impl_core_ops_arith_Div_ref__f16_for_ref__f16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "f16",
                [ Ty.path "f16" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__f16_for_ref__f16.
    
    Module Impl_core_ops_arith_Div_f32_for_ref__f32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "f32",
                [ Ty.path "f32" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_f32_for_ref__f32.
    
    Module Impl_core_ops_arith_Div_ref__f32_for_f32.
      Definition Self : Ty.t := Ty.path "f32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "f32",
                [ Ty.path "f32" ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__f32_for_f32.
    
    Module Impl_core_ops_arith_Div_ref__f32_for_ref__f32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "f32",
                [ Ty.path "f32" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__f32_for_ref__f32.
    
    Module Impl_core_ops_arith_Div_f64_for_ref__f64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "f64",
                [ Ty.path "f64" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_f64_for_ref__f64.
    
    Module Impl_core_ops_arith_Div_ref__f64_for_f64.
      Definition Self : Ty.t := Ty.path "f64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "f64",
                [ Ty.path "f64" ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__f64_for_f64.
    
    Module Impl_core_ops_arith_Div_ref__f64_for_ref__f64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "f64",
                [ Ty.path "f64" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__f64_for_ref__f64.
    
    Module Impl_core_ops_arith_Div_f128_for_ref__f128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "f128",
                [ Ty.path "f128" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_f128_for_ref__f128.
    
    Module Impl_core_ops_arith_Div_ref__f128_for_f128.
      Definition Self : Ty.t := Ty.path "f128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "f128",
                [ Ty.path "f128" ],
                "div",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__f128_for_f128.
    
    Module Impl_core_ops_arith_Div_ref__f128_for_ref__f128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition div (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Div",
                Ty.path "f128",
                [ Ty.path "f128" ],
                "div",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Div"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("div", InstanceField.Method div) ].
    End Impl_core_ops_arith_Div_ref__f128_for_ref__f128.
    
    Module Impl_core_ops_arith_Rem_usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_usize_for_ref__usize.
    
    Module Impl_core_ops_arith_Rem_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__usize_for_usize.
    
    Module Impl_core_ops_arith_Rem_ref__usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__usize_for_ref__usize.
    
    Module Impl_core_ops_arith_Rem_u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_u8_for_ref__u8.
    
    Module Impl_core_ops_arith_Rem_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__u8_for_u8.
    
    Module Impl_core_ops_arith_Rem_ref__u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__u8_for_ref__u8.
    
    Module Impl_core_ops_arith_Rem_u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_u16_for_ref__u16.
    
    Module Impl_core_ops_arith_Rem_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__u16_for_u16.
    
    Module Impl_core_ops_arith_Rem_ref__u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__u16_for_ref__u16.
    
    Module Impl_core_ops_arith_Rem_u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_u32_for_ref__u32.
    
    Module Impl_core_ops_arith_Rem_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__u32_for_u32.
    
    Module Impl_core_ops_arith_Rem_ref__u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__u32_for_ref__u32.
    
    Module Impl_core_ops_arith_Rem_u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_u64_for_ref__u64.
    
    Module Impl_core_ops_arith_Rem_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__u64_for_u64.
    
    Module Impl_core_ops_arith_Rem_ref__u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__u64_for_ref__u64.
    
    Module Impl_core_ops_arith_Rem_u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_u128_for_ref__u128.
    
    Module Impl_core_ops_arith_Rem_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__u128_for_u128.
    
    Module Impl_core_ops_arith_Rem_ref__u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__u128_for_ref__u128.
    
    Module Impl_core_ops_arith_Rem_isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_isize_for_ref__isize.
    
    Module Impl_core_ops_arith_Rem_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__isize_for_isize.
    
    Module Impl_core_ops_arith_Rem_ref__isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__isize_for_ref__isize.
    
    Module Impl_core_ops_arith_Rem_i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_i8_for_ref__i8.
    
    Module Impl_core_ops_arith_Rem_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__i8_for_i8.
    
    Module Impl_core_ops_arith_Rem_ref__i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__i8_for_ref__i8.
    
    Module Impl_core_ops_arith_Rem_i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_i16_for_ref__i16.
    
    Module Impl_core_ops_arith_Rem_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__i16_for_i16.
    
    Module Impl_core_ops_arith_Rem_ref__i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__i16_for_ref__i16.
    
    Module Impl_core_ops_arith_Rem_i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_i32_for_ref__i32.
    
    Module Impl_core_ops_arith_Rem_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__i32_for_i32.
    
    Module Impl_core_ops_arith_Rem_ref__i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__i32_for_ref__i32.
    
    Module Impl_core_ops_arith_Rem_i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_i64_for_ref__i64.
    
    Module Impl_core_ops_arith_Rem_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__i64_for_i64.
    
    Module Impl_core_ops_arith_Rem_ref__i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__i64_for_ref__i64.
    
    Module Impl_core_ops_arith_Rem_i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_i128_for_ref__i128.
    
    Module Impl_core_ops_arith_Rem_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__i128_for_i128.
    
    Module Impl_core_ops_arith_Rem_ref__i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__i128_for_ref__i128.
    
    Module Impl_core_ops_arith_Rem_f16_for_ref__f16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "f16",
                [ Ty.path "f16" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_f16_for_ref__f16.
    
    Module Impl_core_ops_arith_Rem_ref__f16_for_f16.
      Definition Self : Ty.t := Ty.path "f16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "f16",
                [ Ty.path "f16" ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__f16_for_f16.
    
    Module Impl_core_ops_arith_Rem_ref__f16_for_ref__f16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "f16",
                [ Ty.path "f16" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__f16_for_ref__f16.
    
    Module Impl_core_ops_arith_Rem_f32_for_ref__f32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "f32",
                [ Ty.path "f32" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_f32_for_ref__f32.
    
    Module Impl_core_ops_arith_Rem_ref__f32_for_f32.
      Definition Self : Ty.t := Ty.path "f32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "f32",
                [ Ty.path "f32" ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__f32_for_f32.
    
    Module Impl_core_ops_arith_Rem_ref__f32_for_ref__f32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "f32",
                [ Ty.path "f32" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__f32_for_ref__f32.
    
    Module Impl_core_ops_arith_Rem_f64_for_ref__f64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "f64",
                [ Ty.path "f64" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_f64_for_ref__f64.
    
    Module Impl_core_ops_arith_Rem_ref__f64_for_f64.
      Definition Self : Ty.t := Ty.path "f64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "f64",
                [ Ty.path "f64" ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__f64_for_f64.
    
    Module Impl_core_ops_arith_Rem_ref__f64_for_ref__f64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "f64",
                [ Ty.path "f64" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__f64_for_ref__f64.
    
    Module Impl_core_ops_arith_Rem_f128_for_ref__f128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "f128",
                [ Ty.path "f128" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "f128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_f128_for_ref__f128.
    
    Module Impl_core_ops_arith_Rem_ref__f128_for_f128.
      Definition Self : Ty.t := Ty.path "f128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "f128",
                [ Ty.path "f128" ],
                "rem",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__f128_for_f128.
    
    Module Impl_core_ops_arith_Rem_ref__f128_for_ref__f128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition rem (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::arith::Rem",
                Ty.path "f128",
                [ Ty.path "f128" ],
                "rem",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Rem"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("rem", InstanceField.Method rem) ].
    End Impl_core_ops_arith_Rem_ref__f128_for_ref__f128.
    
    Module Impl_core_ops_arith_Neg_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::arith::Neg", Ty.path "isize", [], "neg", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__isize.
    
    Module Impl_core_ops_arith_Neg_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::arith::Neg", Ty.path "i8", [], "neg", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__i8.
    
    Module Impl_core_ops_arith_Neg_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::arith::Neg", Ty.path "i16", [], "neg", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__i16.
    
    Module Impl_core_ops_arith_Neg_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::arith::Neg", Ty.path "i32", [], "neg", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__i32.
    
    Module Impl_core_ops_arith_Neg_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::arith::Neg", Ty.path "i64", [], "neg", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__i64.
    
    Module Impl_core_ops_arith_Neg_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::arith::Neg", Ty.path "i128", [], "neg", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__i128.
    
    Module Impl_core_ops_arith_Neg_for_ref__f16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f16" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::arith::Neg", Ty.path "f16", [], "neg", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__f16.
    
    Module Impl_core_ops_arith_Neg_for_ref__f32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f32" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::arith::Neg", Ty.path "f32", [], "neg", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__f32.
    
    Module Impl_core_ops_arith_Neg_for_ref__f64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f64" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::arith::Neg", Ty.path "f64", [], "neg", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__f64.
    
    Module Impl_core_ops_arith_Neg_for_ref__f128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "f128" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition neg (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::arith::Neg", Ty.path "f128", [], "neg", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::Neg"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("neg", InstanceField.Method neg) ].
    End Impl_core_ops_arith_Neg_for_ref__f128.
    
    Module Impl_core_ops_arith_AddAssign_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.path "usize",
                      [ Ty.path "usize" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__usize_for_usize.
    
    Module Impl_core_ops_arith_AddAssign_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.path "u8",
                      [ Ty.path "u8" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__u8_for_u8.
    
    Module Impl_core_ops_arith_AddAssign_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.path "u16",
                      [ Ty.path "u16" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__u16_for_u16.
    
    Module Impl_core_ops_arith_AddAssign_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.path "u32",
                      [ Ty.path "u32" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__u32_for_u32.
    
    Module Impl_core_ops_arith_AddAssign_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.path "u64",
                      [ Ty.path "u64" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__u64_for_u64.
    
    Module Impl_core_ops_arith_AddAssign_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.path "u128",
                      [ Ty.path "u128" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__u128_for_u128.
    
    Module Impl_core_ops_arith_AddAssign_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.path "isize",
                      [ Ty.path "isize" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__isize_for_isize.
    
    Module Impl_core_ops_arith_AddAssign_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.path "i8",
                      [ Ty.path "i8" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__i8_for_i8.
    
    Module Impl_core_ops_arith_AddAssign_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.path "i16",
                      [ Ty.path "i16" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__i16_for_i16.
    
    Module Impl_core_ops_arith_AddAssign_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.path "i32",
                      [ Ty.path "i32" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__i32_for_i32.
    
    Module Impl_core_ops_arith_AddAssign_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.path "i64",
                      [ Ty.path "i64" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__i64_for_i64.
    
    Module Impl_core_ops_arith_AddAssign_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.path "i128",
                      [ Ty.path "i128" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__i128_for_i128.
    
    Module Impl_core_ops_arith_AddAssign_ref__f16_for_f16.
      Definition Self : Ty.t := Ty.path "f16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.path "f16",
                      [ Ty.path "f16" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f16" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__f16_for_f16.
    
    Module Impl_core_ops_arith_AddAssign_ref__f32_for_f32.
      Definition Self : Ty.t := Ty.path "f32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.path "f32",
                      [ Ty.path "f32" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f32" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__f32_for_f32.
    
    Module Impl_core_ops_arith_AddAssign_ref__f64_for_f64.
      Definition Self : Ty.t := Ty.path "f64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.path "f64",
                      [ Ty.path "f64" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f64" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__f64_for_f64.
    
    Module Impl_core_ops_arith_AddAssign_ref__f128_for_f128.
      Definition Self : Ty.t := Ty.path "f128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition add_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::AddAssign",
                      Ty.path "f128",
                      [ Ty.path "f128" ],
                      "add_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::AddAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f128" ] ]
          (* Instance *) [ ("add_assign", InstanceField.Method add_assign) ].
    End Impl_core_ops_arith_AddAssign_ref__f128_for_f128.
    
    Module Impl_core_ops_arith_SubAssign_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.path "usize",
                      [ Ty.path "usize" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__usize_for_usize.
    
    Module Impl_core_ops_arith_SubAssign_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.path "u8",
                      [ Ty.path "u8" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__u8_for_u8.
    
    Module Impl_core_ops_arith_SubAssign_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.path "u16",
                      [ Ty.path "u16" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__u16_for_u16.
    
    Module Impl_core_ops_arith_SubAssign_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.path "u32",
                      [ Ty.path "u32" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__u32_for_u32.
    
    Module Impl_core_ops_arith_SubAssign_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.path "u64",
                      [ Ty.path "u64" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__u64_for_u64.
    
    Module Impl_core_ops_arith_SubAssign_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.path "u128",
                      [ Ty.path "u128" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__u128_for_u128.
    
    Module Impl_core_ops_arith_SubAssign_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.path "isize",
                      [ Ty.path "isize" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__isize_for_isize.
    
    Module Impl_core_ops_arith_SubAssign_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.path "i8",
                      [ Ty.path "i8" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__i8_for_i8.
    
    Module Impl_core_ops_arith_SubAssign_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.path "i16",
                      [ Ty.path "i16" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__i16_for_i16.
    
    Module Impl_core_ops_arith_SubAssign_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.path "i32",
                      [ Ty.path "i32" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__i32_for_i32.
    
    Module Impl_core_ops_arith_SubAssign_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.path "i64",
                      [ Ty.path "i64" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__i64_for_i64.
    
    Module Impl_core_ops_arith_SubAssign_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.path "i128",
                      [ Ty.path "i128" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__i128_for_i128.
    
    Module Impl_core_ops_arith_SubAssign_ref__f16_for_f16.
      Definition Self : Ty.t := Ty.path "f16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.path "f16",
                      [ Ty.path "f16" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f16" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__f16_for_f16.
    
    Module Impl_core_ops_arith_SubAssign_ref__f32_for_f32.
      Definition Self : Ty.t := Ty.path "f32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.path "f32",
                      [ Ty.path "f32" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f32" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__f32_for_f32.
    
    Module Impl_core_ops_arith_SubAssign_ref__f64_for_f64.
      Definition Self : Ty.t := Ty.path "f64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.path "f64",
                      [ Ty.path "f64" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f64" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__f64_for_f64.
    
    Module Impl_core_ops_arith_SubAssign_ref__f128_for_f128.
      Definition Self : Ty.t := Ty.path "f128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition sub_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::SubAssign",
                      Ty.path "f128",
                      [ Ty.path "f128" ],
                      "sub_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::SubAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f128" ] ]
          (* Instance *) [ ("sub_assign", InstanceField.Method sub_assign) ].
    End Impl_core_ops_arith_SubAssign_ref__f128_for_f128.
    
    Module Impl_core_ops_arith_MulAssign_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.path "usize",
                      [ Ty.path "usize" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__usize_for_usize.
    
    Module Impl_core_ops_arith_MulAssign_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.path "u8",
                      [ Ty.path "u8" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__u8_for_u8.
    
    Module Impl_core_ops_arith_MulAssign_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.path "u16",
                      [ Ty.path "u16" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__u16_for_u16.
    
    Module Impl_core_ops_arith_MulAssign_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.path "u32",
                      [ Ty.path "u32" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__u32_for_u32.
    
    Module Impl_core_ops_arith_MulAssign_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.path "u64",
                      [ Ty.path "u64" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__u64_for_u64.
    
    Module Impl_core_ops_arith_MulAssign_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.path "u128",
                      [ Ty.path "u128" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__u128_for_u128.
    
    Module Impl_core_ops_arith_MulAssign_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.path "isize",
                      [ Ty.path "isize" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__isize_for_isize.
    
    Module Impl_core_ops_arith_MulAssign_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.path "i8",
                      [ Ty.path "i8" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__i8_for_i8.
    
    Module Impl_core_ops_arith_MulAssign_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.path "i16",
                      [ Ty.path "i16" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__i16_for_i16.
    
    Module Impl_core_ops_arith_MulAssign_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.path "i32",
                      [ Ty.path "i32" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__i32_for_i32.
    
    Module Impl_core_ops_arith_MulAssign_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.path "i64",
                      [ Ty.path "i64" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__i64_for_i64.
    
    Module Impl_core_ops_arith_MulAssign_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.path "i128",
                      [ Ty.path "i128" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__i128_for_i128.
    
    Module Impl_core_ops_arith_MulAssign_ref__f16_for_f16.
      Definition Self : Ty.t := Ty.path "f16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.path "f16",
                      [ Ty.path "f16" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f16" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__f16_for_f16.
    
    Module Impl_core_ops_arith_MulAssign_ref__f32_for_f32.
      Definition Self : Ty.t := Ty.path "f32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.path "f32",
                      [ Ty.path "f32" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f32" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__f32_for_f32.
    
    Module Impl_core_ops_arith_MulAssign_ref__f64_for_f64.
      Definition Self : Ty.t := Ty.path "f64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.path "f64",
                      [ Ty.path "f64" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f64" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__f64_for_f64.
    
    Module Impl_core_ops_arith_MulAssign_ref__f128_for_f128.
      Definition Self : Ty.t := Ty.path "f128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition mul_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::MulAssign",
                      Ty.path "f128",
                      [ Ty.path "f128" ],
                      "mul_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::MulAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f128" ] ]
          (* Instance *) [ ("mul_assign", InstanceField.Method mul_assign) ].
    End Impl_core_ops_arith_MulAssign_ref__f128_for_f128.
    
    Module Impl_core_ops_arith_DivAssign_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.path "usize",
                      [ Ty.path "usize" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__usize_for_usize.
    
    Module Impl_core_ops_arith_DivAssign_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.path "u8",
                      [ Ty.path "u8" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__u8_for_u8.
    
    Module Impl_core_ops_arith_DivAssign_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.path "u16",
                      [ Ty.path "u16" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__u16_for_u16.
    
    Module Impl_core_ops_arith_DivAssign_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.path "u32",
                      [ Ty.path "u32" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__u32_for_u32.
    
    Module Impl_core_ops_arith_DivAssign_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.path "u64",
                      [ Ty.path "u64" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__u64_for_u64.
    
    Module Impl_core_ops_arith_DivAssign_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.path "u128",
                      [ Ty.path "u128" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__u128_for_u128.
    
    Module Impl_core_ops_arith_DivAssign_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.path "isize",
                      [ Ty.path "isize" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__isize_for_isize.
    
    Module Impl_core_ops_arith_DivAssign_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.path "i8",
                      [ Ty.path "i8" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__i8_for_i8.
    
    Module Impl_core_ops_arith_DivAssign_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.path "i16",
                      [ Ty.path "i16" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__i16_for_i16.
    
    Module Impl_core_ops_arith_DivAssign_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.path "i32",
                      [ Ty.path "i32" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__i32_for_i32.
    
    Module Impl_core_ops_arith_DivAssign_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.path "i64",
                      [ Ty.path "i64" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__i64_for_i64.
    
    Module Impl_core_ops_arith_DivAssign_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.path "i128",
                      [ Ty.path "i128" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__i128_for_i128.
    
    Module Impl_core_ops_arith_DivAssign_ref__f16_for_f16.
      Definition Self : Ty.t := Ty.path "f16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.path "f16",
                      [ Ty.path "f16" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f16" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__f16_for_f16.
    
    Module Impl_core_ops_arith_DivAssign_ref__f32_for_f32.
      Definition Self : Ty.t := Ty.path "f32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.path "f32",
                      [ Ty.path "f32" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f32" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__f32_for_f32.
    
    Module Impl_core_ops_arith_DivAssign_ref__f64_for_f64.
      Definition Self : Ty.t := Ty.path "f64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.path "f64",
                      [ Ty.path "f64" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f64" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__f64_for_f64.
    
    Module Impl_core_ops_arith_DivAssign_ref__f128_for_f128.
      Definition Self : Ty.t := Ty.path "f128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition div_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::DivAssign",
                      Ty.path "f128",
                      [ Ty.path "f128" ],
                      "div_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::DivAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f128" ] ]
          (* Instance *) [ ("div_assign", InstanceField.Method div_assign) ].
    End Impl_core_ops_arith_DivAssign_ref__f128_for_f128.
    
    Module Impl_core_ops_arith_RemAssign_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.path "usize",
                      [ Ty.path "usize" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__usize_for_usize.
    
    Module Impl_core_ops_arith_RemAssign_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.path "u8",
                      [ Ty.path "u8" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__u8_for_u8.
    
    Module Impl_core_ops_arith_RemAssign_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.path "u16",
                      [ Ty.path "u16" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__u16_for_u16.
    
    Module Impl_core_ops_arith_RemAssign_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.path "u32",
                      [ Ty.path "u32" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__u32_for_u32.
    
    Module Impl_core_ops_arith_RemAssign_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.path "u64",
                      [ Ty.path "u64" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__u64_for_u64.
    
    Module Impl_core_ops_arith_RemAssign_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.path "u128",
                      [ Ty.path "u128" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__u128_for_u128.
    
    Module Impl_core_ops_arith_RemAssign_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.path "isize",
                      [ Ty.path "isize" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__isize_for_isize.
    
    Module Impl_core_ops_arith_RemAssign_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.path "i8",
                      [ Ty.path "i8" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__i8_for_i8.
    
    Module Impl_core_ops_arith_RemAssign_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.path "i16",
                      [ Ty.path "i16" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__i16_for_i16.
    
    Module Impl_core_ops_arith_RemAssign_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.path "i32",
                      [ Ty.path "i32" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__i32_for_i32.
    
    Module Impl_core_ops_arith_RemAssign_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.path "i64",
                      [ Ty.path "i64" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__i64_for_i64.
    
    Module Impl_core_ops_arith_RemAssign_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.path "i128",
                      [ Ty.path "i128" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__i128_for_i128.
    
    Module Impl_core_ops_arith_RemAssign_ref__f16_for_f16.
      Definition Self : Ty.t := Ty.path "f16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.path "f16",
                      [ Ty.path "f16" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f16" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__f16_for_f16.
    
    Module Impl_core_ops_arith_RemAssign_ref__f32_for_f32.
      Definition Self : Ty.t := Ty.path "f32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.path "f32",
                      [ Ty.path "f32" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f32" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__f32_for_f32.
    
    Module Impl_core_ops_arith_RemAssign_ref__f64_for_f64.
      Definition Self : Ty.t := Ty.path "f64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.path "f64",
                      [ Ty.path "f64" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f64" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__f64_for_f64.
    
    Module Impl_core_ops_arith_RemAssign_ref__f128_for_f128.
      Definition Self : Ty.t := Ty.path "f128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition rem_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::arith::RemAssign",
                      Ty.path "f128",
                      [ Ty.path "f128" ],
                      "rem_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::arith::RemAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "f128" ] ]
          (* Instance *) [ ("rem_assign", InstanceField.Method rem_assign) ].
    End Impl_core_ops_arith_RemAssign_ref__f128_for_f128.
  End arith.
  
  Module bit.
    Module Impl_core_ops_bit_Not_for_ref__bool.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "bool" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::bit::Not", Ty.path "bool", [], "not", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__bool.
    
    Module Impl_core_ops_bit_Not_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::bit::Not", Ty.path "usize", [], "not", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__usize.
    
    Module Impl_core_ops_bit_Not_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::bit::Not", Ty.path "u8", [], "not", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__u8.
    
    Module Impl_core_ops_bit_Not_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::bit::Not", Ty.path "u16", [], "not", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__u16.
    
    Module Impl_core_ops_bit_Not_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::bit::Not", Ty.path "u32", [], "not", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__u32.
    
    Module Impl_core_ops_bit_Not_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::bit::Not", Ty.path "u64", [], "not", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__u64.
    
    Module Impl_core_ops_bit_Not_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::bit::Not", Ty.path "u128", [], "not", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__u128.
    
    Module Impl_core_ops_bit_Not_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::bit::Not", Ty.path "isize", [], "not", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__isize.
    
    Module Impl_core_ops_bit_Not_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::bit::Not", Ty.path "i8", [], "not", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__i8.
    
    Module Impl_core_ops_bit_Not_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::bit::Not", Ty.path "i16", [], "not", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__i16.
    
    Module Impl_core_ops_bit_Not_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::bit::Not", Ty.path "i32", [], "not", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__i32.
    
    Module Impl_core_ops_bit_Not_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::bit::Not", Ty.path "i64", [], "not", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__i64.
    
    Module Impl_core_ops_bit_Not_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self) -> <$t as $imp>::Output {
                      $imp::$method( *self)
                  }
      *)
      Definition not (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            M.call_closure (|
              M.get_trait_method (| "core::ops::bit::Not", Ty.path "i128", [], "not", [] |),
              [ M.read (| M.read (| self |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Not"
          Self
          (* Trait polymorphic types *) []
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("not", InstanceField.Method not) ].
    End Impl_core_ops_bit_Not_for_ref__i128.
    
    Module Impl_core_ops_bit_BitAnd_bool_for_ref__bool.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "bool" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "bool",
                [ Ty.path "bool" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "bool" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_bool_for_ref__bool.
    
    Module Impl_core_ops_bit_BitAnd_ref__bool_for_bool.
      Definition Self : Ty.t := Ty.path "bool".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "bool",
                [ Ty.path "bool" ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "bool" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__bool_for_bool.
    
    Module Impl_core_ops_bit_BitAnd_ref__bool_for_ref__bool.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "bool" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "bool",
                [ Ty.path "bool" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "bool" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__bool_for_ref__bool.
    
    Module Impl_core_ops_bit_BitAnd_usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_usize_for_ref__usize.
    
    Module Impl_core_ops_bit_BitAnd_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__usize_for_usize.
    
    Module Impl_core_ops_bit_BitAnd_ref__usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__usize_for_ref__usize.
    
    Module Impl_core_ops_bit_BitAnd_u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_u8_for_ref__u8.
    
    Module Impl_core_ops_bit_BitAnd_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__u8_for_u8.
    
    Module Impl_core_ops_bit_BitAnd_ref__u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__u8_for_ref__u8.
    
    Module Impl_core_ops_bit_BitAnd_u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_u16_for_ref__u16.
    
    Module Impl_core_ops_bit_BitAnd_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__u16_for_u16.
    
    Module Impl_core_ops_bit_BitAnd_ref__u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__u16_for_ref__u16.
    
    Module Impl_core_ops_bit_BitAnd_u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_u32_for_ref__u32.
    
    Module Impl_core_ops_bit_BitAnd_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__u32_for_u32.
    
    Module Impl_core_ops_bit_BitAnd_ref__u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__u32_for_ref__u32.
    
    Module Impl_core_ops_bit_BitAnd_u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_u64_for_ref__u64.
    
    Module Impl_core_ops_bit_BitAnd_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__u64_for_u64.
    
    Module Impl_core_ops_bit_BitAnd_ref__u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__u64_for_ref__u64.
    
    Module Impl_core_ops_bit_BitAnd_u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_u128_for_ref__u128.
    
    Module Impl_core_ops_bit_BitAnd_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__u128_for_u128.
    
    Module Impl_core_ops_bit_BitAnd_ref__u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__u128_for_ref__u128.
    
    Module Impl_core_ops_bit_BitAnd_isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_isize_for_ref__isize.
    
    Module Impl_core_ops_bit_BitAnd_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__isize_for_isize.
    
    Module Impl_core_ops_bit_BitAnd_ref__isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__isize_for_ref__isize.
    
    Module Impl_core_ops_bit_BitAnd_i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_i8_for_ref__i8.
    
    Module Impl_core_ops_bit_BitAnd_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__i8_for_i8.
    
    Module Impl_core_ops_bit_BitAnd_ref__i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__i8_for_ref__i8.
    
    Module Impl_core_ops_bit_BitAnd_i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_i16_for_ref__i16.
    
    Module Impl_core_ops_bit_BitAnd_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__i16_for_i16.
    
    Module Impl_core_ops_bit_BitAnd_ref__i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__i16_for_ref__i16.
    
    Module Impl_core_ops_bit_BitAnd_i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_i32_for_ref__i32.
    
    Module Impl_core_ops_bit_BitAnd_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__i32_for_i32.
    
    Module Impl_core_ops_bit_BitAnd_ref__i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__i32_for_ref__i32.
    
    Module Impl_core_ops_bit_BitAnd_i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_i64_for_ref__i64.
    
    Module Impl_core_ops_bit_BitAnd_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__i64_for_i64.
    
    Module Impl_core_ops_bit_BitAnd_ref__i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__i64_for_ref__i64.
    
    Module Impl_core_ops_bit_BitAnd_i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_i128_for_ref__i128.
    
    Module Impl_core_ops_bit_BitAnd_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "bitand",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__i128_for_i128.
    
    Module Impl_core_ops_bit_BitAnd_ref__i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitand (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitAnd",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "bitand",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAnd"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitand", InstanceField.Method bitand) ].
    End Impl_core_ops_bit_BitAnd_ref__i128_for_ref__i128.
    
    Module Impl_core_ops_bit_BitOr_bool_for_ref__bool.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "bool" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "bool",
                [ Ty.path "bool" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "bool" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_bool_for_ref__bool.
    
    Module Impl_core_ops_bit_BitOr_ref__bool_for_bool.
      Definition Self : Ty.t := Ty.path "bool".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "bool",
                [ Ty.path "bool" ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "bool" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__bool_for_bool.
    
    Module Impl_core_ops_bit_BitOr_ref__bool_for_ref__bool.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "bool" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "bool",
                [ Ty.path "bool" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "bool" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__bool_for_ref__bool.
    
    Module Impl_core_ops_bit_BitOr_usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_usize_for_ref__usize.
    
    Module Impl_core_ops_bit_BitOr_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__usize_for_usize.
    
    Module Impl_core_ops_bit_BitOr_ref__usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__usize_for_ref__usize.
    
    Module Impl_core_ops_bit_BitOr_u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_u8_for_ref__u8.
    
    Module Impl_core_ops_bit_BitOr_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__u8_for_u8.
    
    Module Impl_core_ops_bit_BitOr_ref__u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__u8_for_ref__u8.
    
    Module Impl_core_ops_bit_BitOr_u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_u16_for_ref__u16.
    
    Module Impl_core_ops_bit_BitOr_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__u16_for_u16.
    
    Module Impl_core_ops_bit_BitOr_ref__u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__u16_for_ref__u16.
    
    Module Impl_core_ops_bit_BitOr_u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_u32_for_ref__u32.
    
    Module Impl_core_ops_bit_BitOr_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__u32_for_u32.
    
    Module Impl_core_ops_bit_BitOr_ref__u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__u32_for_ref__u32.
    
    Module Impl_core_ops_bit_BitOr_u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_u64_for_ref__u64.
    
    Module Impl_core_ops_bit_BitOr_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__u64_for_u64.
    
    Module Impl_core_ops_bit_BitOr_ref__u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__u64_for_ref__u64.
    
    Module Impl_core_ops_bit_BitOr_u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_u128_for_ref__u128.
    
    Module Impl_core_ops_bit_BitOr_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__u128_for_u128.
    
    Module Impl_core_ops_bit_BitOr_ref__u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__u128_for_ref__u128.
    
    Module Impl_core_ops_bit_BitOr_isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_isize_for_ref__isize.
    
    Module Impl_core_ops_bit_BitOr_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__isize_for_isize.
    
    Module Impl_core_ops_bit_BitOr_ref__isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__isize_for_ref__isize.
    
    Module Impl_core_ops_bit_BitOr_i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_i8_for_ref__i8.
    
    Module Impl_core_ops_bit_BitOr_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__i8_for_i8.
    
    Module Impl_core_ops_bit_BitOr_ref__i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__i8_for_ref__i8.
    
    Module Impl_core_ops_bit_BitOr_i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_i16_for_ref__i16.
    
    Module Impl_core_ops_bit_BitOr_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__i16_for_i16.
    
    Module Impl_core_ops_bit_BitOr_ref__i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__i16_for_ref__i16.
    
    Module Impl_core_ops_bit_BitOr_i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_i32_for_ref__i32.
    
    Module Impl_core_ops_bit_BitOr_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__i32_for_i32.
    
    Module Impl_core_ops_bit_BitOr_ref__i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__i32_for_ref__i32.
    
    Module Impl_core_ops_bit_BitOr_i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_i64_for_ref__i64.
    
    Module Impl_core_ops_bit_BitOr_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__i64_for_i64.
    
    Module Impl_core_ops_bit_BitOr_ref__i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__i64_for_ref__i64.
    
    Module Impl_core_ops_bit_BitOr_i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_i128_for_ref__i128.
    
    Module Impl_core_ops_bit_BitOr_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "bitor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__i128_for_i128.
    
    Module Impl_core_ops_bit_BitOr_ref__i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitOr",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "bitor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitor", InstanceField.Method bitor) ].
    End Impl_core_ops_bit_BitOr_ref__i128_for_ref__i128.
    
    Module Impl_core_ops_bit_BitXor_bool_for_ref__bool.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "bool" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "bool",
                [ Ty.path "bool" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "bool" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_bool_for_ref__bool.
    
    Module Impl_core_ops_bit_BitXor_ref__bool_for_bool.
      Definition Self : Ty.t := Ty.path "bool".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "bool",
                [ Ty.path "bool" ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "bool" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__bool_for_bool.
    
    Module Impl_core_ops_bit_BitXor_ref__bool_for_ref__bool.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "bool" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "bool",
                [ Ty.path "bool" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "bool" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__bool_for_ref__bool.
    
    Module Impl_core_ops_bit_BitXor_usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_usize_for_ref__usize.
    
    Module Impl_core_ops_bit_BitXor_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__usize_for_usize.
    
    Module Impl_core_ops_bit_BitXor_ref__usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__usize_for_ref__usize.
    
    Module Impl_core_ops_bit_BitXor_u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_u8_for_ref__u8.
    
    Module Impl_core_ops_bit_BitXor_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__u8_for_u8.
    
    Module Impl_core_ops_bit_BitXor_ref__u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__u8_for_ref__u8.
    
    Module Impl_core_ops_bit_BitXor_u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_u16_for_ref__u16.
    
    Module Impl_core_ops_bit_BitXor_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__u16_for_u16.
    
    Module Impl_core_ops_bit_BitXor_ref__u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__u16_for_ref__u16.
    
    Module Impl_core_ops_bit_BitXor_u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_u32_for_ref__u32.
    
    Module Impl_core_ops_bit_BitXor_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__u32_for_u32.
    
    Module Impl_core_ops_bit_BitXor_ref__u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__u32_for_ref__u32.
    
    Module Impl_core_ops_bit_BitXor_u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_u64_for_ref__u64.
    
    Module Impl_core_ops_bit_BitXor_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__u64_for_u64.
    
    Module Impl_core_ops_bit_BitXor_ref__u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__u64_for_ref__u64.
    
    Module Impl_core_ops_bit_BitXor_u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_u128_for_ref__u128.
    
    Module Impl_core_ops_bit_BitXor_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__u128_for_u128.
    
    Module Impl_core_ops_bit_BitXor_ref__u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__u128_for_ref__u128.
    
    Module Impl_core_ops_bit_BitXor_isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_isize_for_ref__isize.
    
    Module Impl_core_ops_bit_BitXor_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__isize_for_isize.
    
    Module Impl_core_ops_bit_BitXor_ref__isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__isize_for_ref__isize.
    
    Module Impl_core_ops_bit_BitXor_i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_i8_for_ref__i8.
    
    Module Impl_core_ops_bit_BitXor_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__i8_for_i8.
    
    Module Impl_core_ops_bit_BitXor_ref__i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__i8_for_ref__i8.
    
    Module Impl_core_ops_bit_BitXor_i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_i16_for_ref__i16.
    
    Module Impl_core_ops_bit_BitXor_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__i16_for_i16.
    
    Module Impl_core_ops_bit_BitXor_ref__i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__i16_for_ref__i16.
    
    Module Impl_core_ops_bit_BitXor_i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_i32_for_ref__i32.
    
    Module Impl_core_ops_bit_BitXor_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__i32_for_i32.
    
    Module Impl_core_ops_bit_BitXor_ref__i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__i32_for_ref__i32.
    
    Module Impl_core_ops_bit_BitXor_i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_i64_for_ref__i64.
    
    Module Impl_core_ops_bit_BitXor_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__i64_for_i64.
    
    Module Impl_core_ops_bit_BitXor_ref__i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__i64_for_ref__i64.
    
    Module Impl_core_ops_bit_BitXor_i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_i128_for_ref__i128.
    
    Module Impl_core_ops_bit_BitXor_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "bitxor",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__i128_for_i128.
    
    Module Impl_core_ops_bit_BitXor_ref__i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition bitxor (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::BitXor",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "bitxor",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXor"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("bitxor", InstanceField.Method bitxor) ].
    End Impl_core_ops_bit_BitXor_ref__i128_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u8_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_u8.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_u16_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u16_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_u8.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_u32_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u32_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_u8.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_u64_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u64_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_u8.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_u128_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u128_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_u8.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_u8.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_i8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i8_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_u8.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_i16_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i16_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_u8.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_i32_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i32_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_u8.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_i64_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i64_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_u8.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_i128_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i128_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_u8.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_isize_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_isize_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_u8.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u8",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_ref__u8.
    
    Module Impl_core_ops_bit_Shl_u8_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u8_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_u16.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u16_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_u16.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_u32_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u32_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_u16.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_u64_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u64_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_u16.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_u128_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u128_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_u16.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_u16.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_i8_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i8_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_u16.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_i16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i16_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_u16.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_i32_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i32_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_u16.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_i64_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i64_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_u16.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_i128_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i128_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_u16.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_isize_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_isize_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_u16.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u16",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_ref__u16.
    
    Module Impl_core_ops_bit_Shl_u8_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u8_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_u32.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_u16_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u16_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_u32.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u32_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_u32.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_u64_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u64_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_u32.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_u128_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u128_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_u32.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_u32.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_i8_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i8_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_u32.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_i16_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i16_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_u32.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_i32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i32_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_u32.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_i64_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i64_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_u32.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_i128_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i128_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_u32.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_isize_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_isize_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_u32.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u32",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_ref__u32.
    
    Module Impl_core_ops_bit_Shl_u8_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u8_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_u64.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_u16_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u16_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_u64.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_u32_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u32_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_u64.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u64_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_u64.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_u128_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u128_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_u64.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_u64.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_i8_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i8_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_u64.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_i16_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i16_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_u64.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_i32_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i32_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_u64.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_i64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i64_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_u64.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_i128_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i128_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_u64.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_isize_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_isize_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_u64.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u64",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_ref__u64.
    
    Module Impl_core_ops_bit_Shl_u8_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u8_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_u128.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_u16_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u16_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_u128.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_u32_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u32_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_u128.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_u64_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u64_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_u128.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u128_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_u128.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_u128.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_i8_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i8_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_u128.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_i16_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i16_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_u128.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_i32_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i32_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_u128.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_i64_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i64_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_u128.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_i128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i128_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_u128.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_isize_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_isize_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_u128.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "u128",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_ref__u128.
    
    Module Impl_core_ops_bit_Shl_u8_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u8_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_usize.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_u16_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u16_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_usize.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_u32_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u32_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_usize.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_u64_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u64_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_usize.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_u128_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u128_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_usize.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_usize.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_i8_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i8_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_usize.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_i16_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i16_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_usize.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_i32_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i32_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_usize.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_i64_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i64_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_usize.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_i128_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i128_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_usize.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_isize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_isize_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_usize.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "usize",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_ref__usize.
    
    Module Impl_core_ops_bit_Shl_u8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u8_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_i8.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_u16_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u16_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_i8.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_u32_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u32_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_i8.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_u64_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u64_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_i8.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_u128_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u128_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_i8.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_i8.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i8_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_i8.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_i16_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i16_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_i8.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_i32_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i32_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_i8.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_i64_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i64_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_i8.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_i128_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i128_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_i8.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_isize_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_isize_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_i8.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i8",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_ref__i8.
    
    Module Impl_core_ops_bit_Shl_u8_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u8_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_i16.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_u16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u16_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_i16.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_u32_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u32_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_i16.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_u64_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u64_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_i16.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_u128_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u128_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_i16.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_i16.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_i8_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i8_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_i16.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i16_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_i16.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_i32_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i32_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_i16.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_i64_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i64_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_i16.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_i128_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i128_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_i16.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_isize_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_isize_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_i16.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i16",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_ref__i16.
    
    Module Impl_core_ops_bit_Shl_u8_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u8_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_i32.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_u16_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u16_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_i32.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_u32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u32_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_i32.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_u64_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u64_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_i32.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_u128_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u128_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_i32.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_i32.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_i8_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i8_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_i32.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_i16_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i16_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_i32.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i32_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_i32.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_i64_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i64_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_i32.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_i128_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i128_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_i32.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_isize_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_isize_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_i32.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i32",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_ref__i32.
    
    Module Impl_core_ops_bit_Shl_u8_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u8_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_i64.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_u16_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u16_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_i64.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_u32_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u32_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_i64.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_u64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u64_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_i64.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_u128_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u128_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_i64.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_i64.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_i8_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i8_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_i64.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_i16_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i16_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_i64.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_i32_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i32_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_i64.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i64_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_i64.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_i128_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i128_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_i64.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_isize_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_isize_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_i64.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i64",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_ref__i64.
    
    Module Impl_core_ops_bit_Shl_u8_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u8_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_isize.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_u16_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u16_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_isize.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_u32_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u32_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_isize.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_u64_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u64_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_isize.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_u128_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u128_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_isize.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_isize.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_i8_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i8_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_isize.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_i16_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i16_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_isize.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_i32_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i32_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_isize.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_i64_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i64_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_isize.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_i128_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i128_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_isize.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_isize_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_isize.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_ref__isize.
    
    Module Impl_core_ops_bit_Shl_u8_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u8_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_i128.
    
    Module Impl_core_ops_bit_Shl_ref__u8_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "u8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u8_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_u16_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u16_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_i128.
    
    Module Impl_core_ops_bit_Shl_ref__u16_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "u16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u16_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_u32_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u32_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_i128.
    
    Module Impl_core_ops_bit_Shl_ref__u32_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "u32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u32_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_u64_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u64_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_i128.
    
    Module Impl_core_ops_bit_Shl_ref__u64_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "u64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u64_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_u128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_u128_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_i128.
    
    Module Impl_core_ops_bit_Shl_ref__u128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "u128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__u128_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_usize_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_usize_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_i128.
    
    Module Impl_core_ops_bit_Shl_ref__usize_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "usize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__usize_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_i8_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i8_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_i128.
    
    Module Impl_core_ops_bit_Shl_ref__i8_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "i8" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i8_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_i16_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i16_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_i128.
    
    Module Impl_core_ops_bit_Shl_ref__i16_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "i16" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i16_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_i32_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i32_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_i128.
    
    Module Impl_core_ops_bit_Shl_ref__i32_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "i32" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i32_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_i64_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i64_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_i128.
    
    Module Impl_core_ops_bit_Shl_ref__i64_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "i64" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i64_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_i128_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_i128.
    
    Module Impl_core_ops_bit_Shl_ref__i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__i128_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_isize_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_isize_for_ref__i128.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_i128.
    
    Module Impl_core_ops_bit_Shl_ref__isize_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shl (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shl",
                Ty.path "i128",
                [ Ty.path "isize" ],
                "shl",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shl"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shl", InstanceField.Method shl) ].
    End Impl_core_ops_bit_Shl_ref__isize_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u8_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_u8.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_u16_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u16_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_u8.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_u32_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u32_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_u8.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_u64_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u64_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_u8.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_u128_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u128_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_u8.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_u8.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_i8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i8_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_u8.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_i16_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i16_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_u8.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_i32_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i32_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_u8.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_i64_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i64_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_u8.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_i128_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i128_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_u8.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_isize_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_isize_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_u8.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_ref__u8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u8",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_ref__u8.
    
    Module Impl_core_ops_bit_Shr_u8_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u8_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_u16.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u16_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_u16.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_u32_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u32_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_u16.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_u64_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u64_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_u16.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_u128_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u128_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_u16.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_u16.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_i8_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i8_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_u16.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_i16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i16_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_u16.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_i32_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i32_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_u16.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_i64_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i64_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_u16.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_i128_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i128_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_u16.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_isize_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_isize_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_u16.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_ref__u16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u16",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_ref__u16.
    
    Module Impl_core_ops_bit_Shr_u8_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u8_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_u32.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_u16_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u16_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_u32.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u32_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_u32.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_u64_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u64_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_u32.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_u128_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u128_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_u32.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_u32.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_i8_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i8_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_u32.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_i16_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i16_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_u32.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_i32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i32_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_u32.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_i64_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i64_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_u32.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_i128_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i128_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_u32.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_isize_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_isize_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_u32.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_ref__u32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u32",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_ref__u32.
    
    Module Impl_core_ops_bit_Shr_u8_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u8_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_u64.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_u16_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u16_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_u64.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_u32_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u32_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_u64.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u64_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_u64.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_u128_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u128_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_u64.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_u64.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_i8_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i8_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_u64.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_i16_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i16_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_u64.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_i32_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i32_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_u64.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_i64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i64_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_u64.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_i128_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i128_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_u64.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_isize_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_isize_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_u64.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_ref__u64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u64",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_ref__u64.
    
    Module Impl_core_ops_bit_Shr_u8_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u8_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_u128.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_u16_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u16_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_u128.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_u32_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u32_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_u128.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_u64_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u64_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_u128.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u128_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_u128.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_u128.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_i8_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i8_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_u128.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_i16_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i16_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_u128.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_i32_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i32_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_u128.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_i64_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i64_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_u128.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_i128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i128_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_u128.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_isize_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_isize_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_u128.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_ref__u128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "u128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "u128",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_ref__u128.
    
    Module Impl_core_ops_bit_Shr_u8_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u8_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_usize.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_u16_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u16_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_usize.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_u32_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u32_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_usize.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_u64_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u64_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_usize.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_u128_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u128_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_usize.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_usize.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_i8_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i8_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_usize.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_i16_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i16_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_usize.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_i32_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i32_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_usize.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_i64_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i64_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_usize.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_i128_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i128_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_usize.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_isize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_isize_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_usize.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_ref__usize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "usize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "usize",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_ref__usize.
    
    Module Impl_core_ops_bit_Shr_u8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u8_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_i8.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_u16_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u16_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_i8.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_u32_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u32_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_i8.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_u64_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u64_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_i8.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_u128_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u128_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_i8.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_i8.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i8_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_i8.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_i16_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i16_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_i8.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_i32_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i32_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_i8.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_i64_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i64_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_i8.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_i128_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i128_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_i8.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_isize_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_isize_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_i8.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_ref__i8.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i8" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i8",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_ref__i8.
    
    Module Impl_core_ops_bit_Shr_u8_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u8_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_i16.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_u16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u16_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_i16.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_u32_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u32_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_i16.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_u64_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u64_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_i16.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_u128_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u128_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_i16.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_i16.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_i8_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i8_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_i16.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i16_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_i16.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_i32_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i32_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_i16.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_i64_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i64_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_i16.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_i128_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i128_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_i16.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_isize_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_isize_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_i16.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_ref__i16.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i16" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i16",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_ref__i16.
    
    Module Impl_core_ops_bit_Shr_u8_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u8_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_i32.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_u16_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u16_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_i32.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_u32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u32_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_i32.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_u64_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u64_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_i32.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_u128_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u128_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_i32.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_i32.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_i8_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i8_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_i32.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_i16_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i16_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_i32.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i32_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_i32.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_i64_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i64_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_i32.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_i128_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i128_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_i32.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_isize_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_isize_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_i32.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_ref__i32.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i32" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i32",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_ref__i32.
    
    Module Impl_core_ops_bit_Shr_u8_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u8_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_i64.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_u16_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u16_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_i64.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_u32_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u32_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_i64.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_u64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u64_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_i64.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_u128_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u128_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_i64.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_i64.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_i8_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i8_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_i64.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_i16_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i16_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_i64.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_i32_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i32_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_i64.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i64_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_i64.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_i128_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i128_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_i64.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_isize_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_isize_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_i64.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_ref__i64.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i64" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i64",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_ref__i64.
    
    Module Impl_core_ops_bit_Shr_u8_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u8_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_i128.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_u16_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u16_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_i128.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_u32_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u32_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_i128.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_u64_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u64_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_i128.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_u128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u128_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_i128.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_i128.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_i8_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i8_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_i128.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_i16_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i16_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_i128.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_i32_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i32_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_i128.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_i64_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i64_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_i128.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i128_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_i128.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_isize_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_isize_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_i128.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_ref__i128.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "i128" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "i128",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_ref__i128.
    
    Module Impl_core_ops_bit_Shr_u8_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u8_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_isize.
    
    Module Impl_core_ops_bit_Shr_ref__u8_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "u8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u8_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_u16_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u16_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_isize.
    
    Module Impl_core_ops_bit_Shr_ref__u16_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "u16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u16_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_u32_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u32_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_isize.
    
    Module Impl_core_ops_bit_Shr_ref__u32_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "u32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u32_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_u64_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u64_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_isize.
    
    Module Impl_core_ops_bit_Shr_ref__u64_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "u64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u64_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_u128_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "u128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_u128_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_isize.
    
    Module Impl_core_ops_bit_Shr_ref__u128_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "u128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__u128_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_usize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "usize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_usize_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_isize.
    
    Module Impl_core_ops_bit_Shr_ref__usize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "usize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__usize_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_i8_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i8" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i8_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_isize.
    
    Module Impl_core_ops_bit_Shr_ref__i8_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "i8" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i8_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_i16_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i16" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i16_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_isize.
    
    Module Impl_core_ops_bit_Shr_ref__i16_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "i16" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i16_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_i32_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i32" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i32_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_isize.
    
    Module Impl_core_ops_bit_Shr_ref__i32_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "i32" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i32_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_i64_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i64" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i64_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_isize.
    
    Module Impl_core_ops_bit_Shr_ref__i64_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "i64" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i64_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_i128_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "i128" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_i128_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_isize.
    
    Module Impl_core_ops_bit_Shr_ref__i128_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "i128" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__i128_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| other |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.path "isize" ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_isize_for_ref__isize.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method(self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| self |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_isize.
    
    Module Impl_core_ops_bit_Shr_ref__isize_for_ref__isize.
      Definition Self : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "isize" ].
      
      (*             type Output = <$t as $imp<$u>>::Output; *)
      Definition _Output : Ty.t := Ty.associated.
      
      (*
                  fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
                      $imp::$method( *self, *other)
                  }
      *)
      Definition shr (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.call_closure (|
              M.get_trait_method (|
                "core::ops::bit::Shr",
                Ty.path "isize",
                [ Ty.path "isize" ],
                "shr",
                []
              |),
              [ M.read (| M.read (| self |) |); M.read (| M.read (| other |) |) ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::Shr"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("shr", InstanceField.Method shr) ].
    End Impl_core_ops_bit_Shr_ref__isize_for_ref__isize.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__bool_for_bool.
      Definition Self : Ty.t := Ty.path "bool".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.path "bool",
                      [ Ty.path "bool" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "bool" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__bool_for_bool.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.path "usize",
                      [ Ty.path "usize" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__usize_for_usize.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.path "u8",
                      [ Ty.path "u8" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__u8_for_u8.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.path "u16",
                      [ Ty.path "u16" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__u16_for_u16.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.path "u32",
                      [ Ty.path "u32" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__u32_for_u32.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.path "u64",
                      [ Ty.path "u64" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__u64_for_u64.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.path "u128",
                      [ Ty.path "u128" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__u128_for_u128.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.path "isize",
                      [ Ty.path "isize" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__isize_for_isize.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.path "i8",
                      [ Ty.path "i8" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__i8_for_i8.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.path "i16",
                      [ Ty.path "i16" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__i16_for_i16.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.path "i32",
                      [ Ty.path "i32" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__i32_for_i32.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.path "i64",
                      [ Ty.path "i64" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__i64_for_i64.
    
    Module Impl_core_ops_bit_BitAndAssign_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitand_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitAndAssign",
                      Ty.path "i128",
                      [ Ty.path "i128" ],
                      "bitand_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitAndAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("bitand_assign", InstanceField.Method bitand_assign) ].
    End Impl_core_ops_bit_BitAndAssign_ref__i128_for_i128.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__bool_for_bool.
      Definition Self : Ty.t := Ty.path "bool".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.path "bool",
                      [ Ty.path "bool" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "bool" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__bool_for_bool.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.path "usize",
                      [ Ty.path "usize" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__usize_for_usize.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.path "u8",
                      [ Ty.path "u8" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__u8_for_u8.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.path "u16",
                      [ Ty.path "u16" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__u16_for_u16.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.path "u32",
                      [ Ty.path "u32" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__u32_for_u32.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.path "u64",
                      [ Ty.path "u64" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__u64_for_u64.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.path "u128",
                      [ Ty.path "u128" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__u128_for_u128.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.path "isize",
                      [ Ty.path "isize" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__isize_for_isize.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.path "i8",
                      [ Ty.path "i8" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__i8_for_i8.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.path "i16",
                      [ Ty.path "i16" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__i16_for_i16.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.path "i32",
                      [ Ty.path "i32" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__i32_for_i32.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.path "i64",
                      [ Ty.path "i64" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__i64_for_i64.
    
    Module Impl_core_ops_bit_BitOrAssign_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitOrAssign",
                      Ty.path "i128",
                      [ Ty.path "i128" ],
                      "bitor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitOrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("bitor_assign", InstanceField.Method bitor_assign) ].
    End Impl_core_ops_bit_BitOrAssign_ref__i128_for_i128.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__bool_for_bool.
      Definition Self : Ty.t := Ty.path "bool".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.path "bool",
                      [ Ty.path "bool" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "bool" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__bool_for_bool.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.path "usize",
                      [ Ty.path "usize" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__usize_for_usize.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.path "u8",
                      [ Ty.path "u8" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__u8_for_u8.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.path "u16",
                      [ Ty.path "u16" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__u16_for_u16.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.path "u32",
                      [ Ty.path "u32" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__u32_for_u32.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.path "u64",
                      [ Ty.path "u64" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__u64_for_u64.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.path "u128",
                      [ Ty.path "u128" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__u128_for_u128.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.path "isize",
                      [ Ty.path "isize" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__isize_for_isize.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.path "i8",
                      [ Ty.path "i8" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__i8_for_i8.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.path "i16",
                      [ Ty.path "i16" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__i16_for_i16.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.path "i32",
                      [ Ty.path "i32" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__i32_for_i32.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.path "i64",
                      [ Ty.path "i64" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__i64_for_i64.
    
    Module Impl_core_ops_bit_BitXorAssign_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition bitxor_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::BitXorAssign",
                      Ty.path "i128",
                      [ Ty.path "i128" ],
                      "bitxor_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::BitXorAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("bitxor_assign", InstanceField.Method bitxor_assign) ].
    End Impl_core_ops_bit_BitXorAssign_ref__i128_for_i128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u8",
                      [ Ty.path "u8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u8_for_u8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u16_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u8",
                      [ Ty.path "u16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u16_for_u8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u32_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u8",
                      [ Ty.path "u32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u32_for_u8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u64_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u8",
                      [ Ty.path "u64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u64_for_u8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u128_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u8",
                      [ Ty.path "u128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u128_for_u8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u8",
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_u8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u8",
                      [ Ty.path "i8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i8_for_u8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i16_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u8",
                      [ Ty.path "i16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i16_for_u8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i32_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u8",
                      [ Ty.path "i32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i32_for_u8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i64_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u8",
                      [ Ty.path "i64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i64_for_u8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i128_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u8",
                      [ Ty.path "i128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i128_for_u8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__isize_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u8",
                      [ Ty.path "isize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__isize_for_u8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u8_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u16",
                      [ Ty.path "u8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u8_for_u16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u16",
                      [ Ty.path "u16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u16_for_u16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u32_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u16",
                      [ Ty.path "u32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u32_for_u16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u64_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u16",
                      [ Ty.path "u64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u64_for_u16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u128_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u16",
                      [ Ty.path "u128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u128_for_u16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u16",
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_u16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i8_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u16",
                      [ Ty.path "i8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i8_for_u16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u16",
                      [ Ty.path "i16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i16_for_u16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i32_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u16",
                      [ Ty.path "i32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i32_for_u16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i64_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u16",
                      [ Ty.path "i64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i64_for_u16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i128_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u16",
                      [ Ty.path "i128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i128_for_u16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__isize_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u16",
                      [ Ty.path "isize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__isize_for_u16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u8_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u32",
                      [ Ty.path "u8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u8_for_u32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u16_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u32",
                      [ Ty.path "u16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u16_for_u32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u32",
                      [ Ty.path "u32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u32_for_u32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u64_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u32",
                      [ Ty.path "u64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u64_for_u32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u128_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u32",
                      [ Ty.path "u128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u128_for_u32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u32",
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_u32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i8_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u32",
                      [ Ty.path "i8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i8_for_u32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i16_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u32",
                      [ Ty.path "i16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i16_for_u32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u32",
                      [ Ty.path "i32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i32_for_u32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i64_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u32",
                      [ Ty.path "i64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i64_for_u32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i128_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u32",
                      [ Ty.path "i128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i128_for_u32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__isize_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u32",
                      [ Ty.path "isize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__isize_for_u32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u8_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u64",
                      [ Ty.path "u8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u8_for_u64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u16_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u64",
                      [ Ty.path "u16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u16_for_u64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u32_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u64",
                      [ Ty.path "u32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u32_for_u64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u64",
                      [ Ty.path "u64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u64_for_u64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u128_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u64",
                      [ Ty.path "u128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u128_for_u64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u64",
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_u64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i8_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u64",
                      [ Ty.path "i8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i8_for_u64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i16_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u64",
                      [ Ty.path "i16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i16_for_u64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i32_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u64",
                      [ Ty.path "i32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i32_for_u64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u64",
                      [ Ty.path "i64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i64_for_u64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i128_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u64",
                      [ Ty.path "i128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i128_for_u64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__isize_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u64",
                      [ Ty.path "isize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__isize_for_u64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u8_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u128",
                      [ Ty.path "u8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u8_for_u128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u16_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u128",
                      [ Ty.path "u16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u16_for_u128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u32_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u128",
                      [ Ty.path "u32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u32_for_u128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u64_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u128",
                      [ Ty.path "u64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u64_for_u128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u128",
                      [ Ty.path "u128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u128_for_u128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u128",
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_u128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i8_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u128",
                      [ Ty.path "i8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i8_for_u128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i16_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u128",
                      [ Ty.path "i16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i16_for_u128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i32_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u128",
                      [ Ty.path "i32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i32_for_u128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i64_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u128",
                      [ Ty.path "i64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i64_for_u128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u128",
                      [ Ty.path "i128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i128_for_u128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__isize_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "u128",
                      [ Ty.path "isize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__isize_for_u128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u8_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "usize",
                      [ Ty.path "u8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u8_for_usize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u16_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "usize",
                      [ Ty.path "u16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u16_for_usize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u32_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "usize",
                      [ Ty.path "u32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u32_for_usize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u64_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "usize",
                      [ Ty.path "u64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u64_for_usize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u128_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "usize",
                      [ Ty.path "u128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u128_for_usize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "usize",
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_usize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i8_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "usize",
                      [ Ty.path "i8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i8_for_usize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i16_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "usize",
                      [ Ty.path "i16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i16_for_usize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i32_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "usize",
                      [ Ty.path "i32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i32_for_usize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i64_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "usize",
                      [ Ty.path "i64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i64_for_usize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i128_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "usize",
                      [ Ty.path "i128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i128_for_usize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__isize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "usize",
                      [ Ty.path "isize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__isize_for_usize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i8",
                      [ Ty.path "u8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u8_for_i8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u16_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i8",
                      [ Ty.path "u16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u16_for_i8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u32_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i8",
                      [ Ty.path "u32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u32_for_i8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u64_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i8",
                      [ Ty.path "u64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u64_for_i8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u128_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i8",
                      [ Ty.path "u128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u128_for_i8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i8",
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_i8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i8",
                      [ Ty.path "i8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i8_for_i8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i16_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i8",
                      [ Ty.path "i16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i16_for_i8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i32_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i8",
                      [ Ty.path "i32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i32_for_i8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i64_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i8",
                      [ Ty.path "i64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i64_for_i8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i128_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i8",
                      [ Ty.path "i128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i128_for_i8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__isize_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i8",
                      [ Ty.path "isize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__isize_for_i8.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u8_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i16",
                      [ Ty.path "u8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u8_for_i16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i16",
                      [ Ty.path "u16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u16_for_i16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u32_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i16",
                      [ Ty.path "u32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u32_for_i16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u64_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i16",
                      [ Ty.path "u64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u64_for_i16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u128_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i16",
                      [ Ty.path "u128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u128_for_i16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i16",
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_i16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i8_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i16",
                      [ Ty.path "i8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i8_for_i16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i16",
                      [ Ty.path "i16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i16_for_i16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i32_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i16",
                      [ Ty.path "i32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i32_for_i16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i64_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i16",
                      [ Ty.path "i64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i64_for_i16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i128_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i16",
                      [ Ty.path "i128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i128_for_i16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__isize_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i16",
                      [ Ty.path "isize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__isize_for_i16.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u8_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i32",
                      [ Ty.path "u8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u8_for_i32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u16_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i32",
                      [ Ty.path "u16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u16_for_i32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i32",
                      [ Ty.path "u32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u32_for_i32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u64_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i32",
                      [ Ty.path "u64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u64_for_i32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u128_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i32",
                      [ Ty.path "u128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u128_for_i32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i32",
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_i32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i8_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i32",
                      [ Ty.path "i8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i8_for_i32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i16_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i32",
                      [ Ty.path "i16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i16_for_i32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i32",
                      [ Ty.path "i32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i32_for_i32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i64_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i32",
                      [ Ty.path "i64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i64_for_i32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i128_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i32",
                      [ Ty.path "i128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i128_for_i32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__isize_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i32",
                      [ Ty.path "isize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__isize_for_i32.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u8_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i64",
                      [ Ty.path "u8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u8_for_i64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u16_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i64",
                      [ Ty.path "u16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u16_for_i64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u32_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i64",
                      [ Ty.path "u32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u32_for_i64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i64",
                      [ Ty.path "u64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u64_for_i64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u128_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i64",
                      [ Ty.path "u128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u128_for_i64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i64",
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_i64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i8_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i64",
                      [ Ty.path "i8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i8_for_i64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i16_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i64",
                      [ Ty.path "i16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i16_for_i64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i32_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i64",
                      [ Ty.path "i32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i32_for_i64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i64",
                      [ Ty.path "i64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i64_for_i64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i128_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i64",
                      [ Ty.path "i128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i128_for_i64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__isize_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i64",
                      [ Ty.path "isize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__isize_for_i64.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u8_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i128",
                      [ Ty.path "u8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u8_for_i128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u16_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i128",
                      [ Ty.path "u16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u16_for_i128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u32_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i128",
                      [ Ty.path "u32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u32_for_i128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u64_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i128",
                      [ Ty.path "u64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u64_for_i128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i128",
                      [ Ty.path "u128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u128_for_i128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i128",
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_i128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i8_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i128",
                      [ Ty.path "i8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i8_for_i128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i16_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i128",
                      [ Ty.path "i16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i16_for_i128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i32_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i128",
                      [ Ty.path "i32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i32_for_i128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i64_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i128",
                      [ Ty.path "i64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i64_for_i128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i128",
                      [ Ty.path "i128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i128_for_i128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__isize_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "i128",
                      [ Ty.path "isize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__isize_for_i128.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u8_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "isize",
                      [ Ty.path "u8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u8_for_isize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u16_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "isize",
                      [ Ty.path "u16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u16_for_isize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u32_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "isize",
                      [ Ty.path "u32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u32_for_isize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u64_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "isize",
                      [ Ty.path "u64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u64_for_isize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__u128_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "isize",
                      [ Ty.path "u128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__u128_for_isize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__usize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "isize",
                      [ Ty.path "usize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__usize_for_isize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i8_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "isize",
                      [ Ty.path "i8" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i8_for_isize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i16_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "isize",
                      [ Ty.path "i16" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i16_for_isize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i32_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "isize",
                      [ Ty.path "i32" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i32_for_isize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i64_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "isize",
                      [ Ty.path "i64" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i64_for_isize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__i128_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "isize",
                      [ Ty.path "i128" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__i128_for_isize.
    
    Module Impl_core_ops_bit_ShlAssign_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shl_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShlAssign",
                      Ty.path "isize",
                      [ Ty.path "isize" ],
                      "shl_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShlAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shl_assign", InstanceField.Method shl_assign) ].
    End Impl_core_ops_bit_ShlAssign_ref__isize_for_isize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u8",
                      [ Ty.path "u8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u8_for_u8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u16_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u8",
                      [ Ty.path "u16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u16_for_u8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u32_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u8",
                      [ Ty.path "u32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u32_for_u8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u64_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u8",
                      [ Ty.path "u64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u64_for_u8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u128_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u8",
                      [ Ty.path "u128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u128_for_u8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u8",
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_u8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i8_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u8",
                      [ Ty.path "i8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i8_for_u8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i16_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u8",
                      [ Ty.path "i16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i16_for_u8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i32_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u8",
                      [ Ty.path "i32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i32_for_u8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i64_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u8",
                      [ Ty.path "i64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i64_for_u8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i128_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u8",
                      [ Ty.path "i128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i128_for_u8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__isize_for_u8.
      Definition Self : Ty.t := Ty.path "u8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u8",
                      [ Ty.path "isize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__isize_for_u8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u8_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u16",
                      [ Ty.path "u8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u8_for_u16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u16",
                      [ Ty.path "u16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u16_for_u16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u32_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u16",
                      [ Ty.path "u32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u32_for_u16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u64_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u16",
                      [ Ty.path "u64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u64_for_u16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u128_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u16",
                      [ Ty.path "u128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u128_for_u16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u16",
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_u16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i8_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u16",
                      [ Ty.path "i8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i8_for_u16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i16_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u16",
                      [ Ty.path "i16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i16_for_u16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i32_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u16",
                      [ Ty.path "i32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i32_for_u16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i64_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u16",
                      [ Ty.path "i64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i64_for_u16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i128_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u16",
                      [ Ty.path "i128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i128_for_u16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__isize_for_u16.
      Definition Self : Ty.t := Ty.path "u16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u16",
                      [ Ty.path "isize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__isize_for_u16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u8_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u32",
                      [ Ty.path "u8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u8_for_u32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u16_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u32",
                      [ Ty.path "u16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u16_for_u32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u32",
                      [ Ty.path "u32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u32_for_u32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u64_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u32",
                      [ Ty.path "u64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u64_for_u32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u128_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u32",
                      [ Ty.path "u128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u128_for_u32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u32",
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_u32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i8_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u32",
                      [ Ty.path "i8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i8_for_u32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i16_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u32",
                      [ Ty.path "i16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i16_for_u32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i32_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u32",
                      [ Ty.path "i32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i32_for_u32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i64_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u32",
                      [ Ty.path "i64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i64_for_u32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i128_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u32",
                      [ Ty.path "i128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i128_for_u32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__isize_for_u32.
      Definition Self : Ty.t := Ty.path "u32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u32",
                      [ Ty.path "isize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__isize_for_u32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u8_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u64",
                      [ Ty.path "u8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u8_for_u64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u16_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u64",
                      [ Ty.path "u16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u16_for_u64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u32_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u64",
                      [ Ty.path "u32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u32_for_u64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u64",
                      [ Ty.path "u64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u64_for_u64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u128_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u64",
                      [ Ty.path "u128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u128_for_u64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u64",
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_u64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i8_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u64",
                      [ Ty.path "i8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i8_for_u64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i16_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u64",
                      [ Ty.path "i16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i16_for_u64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i32_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u64",
                      [ Ty.path "i32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i32_for_u64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i64_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u64",
                      [ Ty.path "i64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i64_for_u64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i128_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u64",
                      [ Ty.path "i128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i128_for_u64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__isize_for_u64.
      Definition Self : Ty.t := Ty.path "u64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u64",
                      [ Ty.path "isize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__isize_for_u64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u8_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u128",
                      [ Ty.path "u8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u8_for_u128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u16_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u128",
                      [ Ty.path "u16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u16_for_u128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u32_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u128",
                      [ Ty.path "u32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u32_for_u128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u64_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u128",
                      [ Ty.path "u64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u64_for_u128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u128",
                      [ Ty.path "u128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u128_for_u128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u128",
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_u128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i8_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u128",
                      [ Ty.path "i8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i8_for_u128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i16_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u128",
                      [ Ty.path "i16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i16_for_u128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i32_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u128",
                      [ Ty.path "i32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i32_for_u128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i64_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u128",
                      [ Ty.path "i64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i64_for_u128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i128_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u128",
                      [ Ty.path "i128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i128_for_u128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__isize_for_u128.
      Definition Self : Ty.t := Ty.path "u128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "u128",
                      [ Ty.path "isize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__isize_for_u128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u8_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "usize",
                      [ Ty.path "u8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u8_for_usize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u16_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "usize",
                      [ Ty.path "u16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u16_for_usize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u32_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "usize",
                      [ Ty.path "u32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u32_for_usize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u64_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "usize",
                      [ Ty.path "u64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u64_for_usize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u128_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "usize",
                      [ Ty.path "u128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u128_for_usize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "usize",
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_usize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i8_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "usize",
                      [ Ty.path "i8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i8_for_usize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i16_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "usize",
                      [ Ty.path "i16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i16_for_usize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i32_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "usize",
                      [ Ty.path "i32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i32_for_usize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i64_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "usize",
                      [ Ty.path "i64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i64_for_usize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i128_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "usize",
                      [ Ty.path "i128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i128_for_usize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__isize_for_usize.
      Definition Self : Ty.t := Ty.path "usize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "usize",
                      [ Ty.path "isize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__isize_for_usize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i8",
                      [ Ty.path "u8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u8_for_i8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u16_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i8",
                      [ Ty.path "u16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u16_for_i8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u32_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i8",
                      [ Ty.path "u32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u32_for_i8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u64_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i8",
                      [ Ty.path "u64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u64_for_i8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u128_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i8",
                      [ Ty.path "u128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u128_for_i8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i8",
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_i8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i8_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i8",
                      [ Ty.path "i8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i8_for_i8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i16_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i8",
                      [ Ty.path "i16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i16_for_i8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i32_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i8",
                      [ Ty.path "i32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i32_for_i8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i64_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i8",
                      [ Ty.path "i64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i64_for_i8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i128_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i8",
                      [ Ty.path "i128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i128_for_i8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__isize_for_i8.
      Definition Self : Ty.t := Ty.path "i8".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i8",
                      [ Ty.path "isize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__isize_for_i8.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u8_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i16",
                      [ Ty.path "u8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u8_for_i16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i16",
                      [ Ty.path "u16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u16_for_i16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u32_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i16",
                      [ Ty.path "u32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u32_for_i16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u64_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i16",
                      [ Ty.path "u64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u64_for_i16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u128_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i16",
                      [ Ty.path "u128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u128_for_i16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i16",
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_i16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i8_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i16",
                      [ Ty.path "i8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i8_for_i16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i16_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i16",
                      [ Ty.path "i16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i16_for_i16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i32_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i16",
                      [ Ty.path "i32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i32_for_i16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i64_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i16",
                      [ Ty.path "i64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i64_for_i16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i128_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i16",
                      [ Ty.path "i128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i128_for_i16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__isize_for_i16.
      Definition Self : Ty.t := Ty.path "i16".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i16",
                      [ Ty.path "isize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__isize_for_i16.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u8_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i32",
                      [ Ty.path "u8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u8_for_i32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u16_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i32",
                      [ Ty.path "u16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u16_for_i32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i32",
                      [ Ty.path "u32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u32_for_i32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u64_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i32",
                      [ Ty.path "u64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u64_for_i32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u128_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i32",
                      [ Ty.path "u128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u128_for_i32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i32",
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_i32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i8_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i32",
                      [ Ty.path "i8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i8_for_i32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i16_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i32",
                      [ Ty.path "i16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i16_for_i32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i32_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i32",
                      [ Ty.path "i32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i32_for_i32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i64_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i32",
                      [ Ty.path "i64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i64_for_i32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i128_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i32",
                      [ Ty.path "i128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i128_for_i32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__isize_for_i32.
      Definition Self : Ty.t := Ty.path "i32".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i32",
                      [ Ty.path "isize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__isize_for_i32.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u8_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i64",
                      [ Ty.path "u8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u8_for_i64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u16_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i64",
                      [ Ty.path "u16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u16_for_i64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u32_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i64",
                      [ Ty.path "u32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u32_for_i64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i64",
                      [ Ty.path "u64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u64_for_i64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u128_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i64",
                      [ Ty.path "u128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u128_for_i64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i64",
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_i64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i8_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i64",
                      [ Ty.path "i8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i8_for_i64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i16_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i64",
                      [ Ty.path "i16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i16_for_i64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i32_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i64",
                      [ Ty.path "i32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i32_for_i64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i64_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i64",
                      [ Ty.path "i64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i64_for_i64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i128_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i64",
                      [ Ty.path "i128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i128_for_i64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__isize_for_i64.
      Definition Self : Ty.t := Ty.path "i64".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i64",
                      [ Ty.path "isize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__isize_for_i64.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u8_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i128",
                      [ Ty.path "u8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u8_for_i128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u16_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i128",
                      [ Ty.path "u16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u16_for_i128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u32_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i128",
                      [ Ty.path "u32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u32_for_i128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u64_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i128",
                      [ Ty.path "u64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u64_for_i128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i128",
                      [ Ty.path "u128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u128_for_i128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i128",
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_i128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i8_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i128",
                      [ Ty.path "i8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i8_for_i128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i16_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i128",
                      [ Ty.path "i16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i16_for_i128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i32_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i128",
                      [ Ty.path "i32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i32_for_i128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i64_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i128",
                      [ Ty.path "i64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i64_for_i128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i128_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i128",
                      [ Ty.path "i128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i128_for_i128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__isize_for_i128.
      Definition Self : Ty.t := Ty.path "i128".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "i128",
                      [ Ty.path "isize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__isize_for_i128.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u8_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "isize",
                      [ Ty.path "u8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u8_for_isize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u16_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "isize",
                      [ Ty.path "u16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u16_for_isize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u32_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "isize",
                      [ Ty.path "u32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u32_for_isize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u64_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "isize",
                      [ Ty.path "u64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u64_for_isize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__u128_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "isize",
                      [ Ty.path "u128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "u128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__u128_for_isize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__usize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "isize",
                      [ Ty.path "usize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "usize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__usize_for_isize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i8_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "isize",
                      [ Ty.path "i8" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i8" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i8_for_isize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i16_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "isize",
                      [ Ty.path "i16" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i16" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i16_for_isize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i32_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "isize",
                      [ Ty.path "i32" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i32" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i32_for_isize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i64_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "isize",
                      [ Ty.path "i64" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i64" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i64_for_isize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__i128_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "isize",
                      [ Ty.path "i128" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "i128" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__i128_for_isize.
    
    Module Impl_core_ops_bit_ShrAssign_ref__isize_for_isize.
      Definition Self : Ty.t := Ty.path "isize".
      
      (*
                  fn $method(&mut self, other: &$u) {
                      $imp::$method(self, *other);
                  }
      *)
      Definition shr_assign (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; other ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let other := M.alloc (| other |) in
            M.read (|
              let~ _ :=
                M.alloc (|
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::bit::ShrAssign",
                      Ty.path "isize",
                      [ Ty.path "isize" ],
                      "shr_assign",
                      []
                    |),
                    [ M.read (| self |); M.read (| M.read (| other |) |) ]
                  |)
                |) in
              M.alloc (| Value.Tuple [] |)
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::bit::ShrAssign"
          Self
          (* Trait polymorphic types *) [ (* Rhs *) Ty.apply (Ty.path "&") [] [ Ty.path "isize" ] ]
          (* Instance *) [ ("shr_assign", InstanceField.Method shr_assign) ].
    End Impl_core_ops_bit_ShrAssign_ref__isize_for_isize.
  End bit.
End ops.

Module slice.
  Module ascii.
    (* StructTuple
      {
        name := "EscapeByte";
        const_params := [];
        ty_params := [];
        fields := [];
      } *)
    
    Module Impl_core_ops_function_Fn_Tuple_ref__u8__for_core_slice_ascii_EscapeByte.
      Definition Self : Ty.t := Ty.path "core::slice::ascii::EscapeByte".
      
      (*
                      extern "rust-call" fn call(&self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                          $body
                      }
      *)
      Definition call (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; β1 ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let β1 := M.alloc (| β1 |) in
            M.match_operator (|
              β1,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                    let byte := M.copy (| γ0_0 |) in
                    M.call_closure (|
                      M.get_function (| "core::ascii::escape_default", [] |),
                      [ M.read (| M.read (| byte |) |) ]
                    |)))
              ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::function::Fn"
          Self
          (* Trait polymorphic types *)
          [ (* Args *) Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ] ]
          (* Instance *) [ ("call", InstanceField.Method call) ].
    End Impl_core_ops_function_Fn_Tuple_ref__u8__for_core_slice_ascii_EscapeByte.
    
    Module Impl_core_ops_function_FnMut_Tuple_ref__u8__for_core_slice_ascii_EscapeByte.
      Definition Self : Ty.t := Ty.path "core::slice::ascii::EscapeByte".
      
      (*
                      extern "rust-call" fn call_mut(
                          &mut self,
                          ($( $arg, )* ): ($( $ArgTy, )* )
                      ) -> $ReturnTy {
                          Fn::call(&*self, ($( $arg, )* ))
                      }
      *)
      Definition call_mut (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; β1 ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let β1 := M.alloc (| β1 |) in
            M.match_operator (|
              β1,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                    let byte := M.copy (| γ0_0 |) in
                    M.call_closure (|
                      M.get_trait_method (|
                        "core::ops::function::Fn",
                        Ty.path "core::slice::ascii::EscapeByte",
                        [ Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ] ],
                        "call",
                        []
                      |),
                      [ M.read (| self |); Value.Tuple [ M.read (| byte |) ] ]
                    |)))
              ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::function::FnMut"
          Self
          (* Trait polymorphic types *)
          [ (* Args *) Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ] ]
          (* Instance *) [ ("call_mut", InstanceField.Method call_mut) ].
    End Impl_core_ops_function_FnMut_Tuple_ref__u8__for_core_slice_ascii_EscapeByte.
    
    Module Impl_core_ops_function_FnOnce_Tuple_ref__u8__for_core_slice_ascii_EscapeByte.
      Definition Self : Ty.t := Ty.path "core::slice::ascii::EscapeByte".
      
      (*                 type Output = $ReturnTy; *)
      Definition _Output : Ty.t := Ty.path "core::ascii::EscapeDefault".
      
      (*
                      extern "rust-call" fn call_once(self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                          Fn::call(&self, ($( $arg, )* ))
                      }
      *)
      Definition call_once (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
        match ε, τ, α with
        | [], [], [ self; β1 ] =>
          ltac:(M.monadic
            (let self := M.alloc (| self |) in
            let β1 := M.alloc (| β1 |) in
            M.match_operator (|
              β1,
              [
                fun γ =>
                  ltac:(M.monadic
                    (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                    let byte := M.copy (| γ0_0 |) in
                    M.call_closure (|
                      M.get_trait_method (|
                        "core::ops::function::Fn",
                        Ty.path "core::slice::ascii::EscapeByte",
                        [ Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ] ],
                        "call",
                        []
                      |),
                      [ self; Value.Tuple [ M.read (| byte |) ] ]
                    |)))
              ]
            |)))
        | _, _, _ => M.impossible "wrong number of arguments"
        end.
      
      Axiom Implements :
        M.IsTraitInstance
          "core::ops::function::FnOnce"
          Self
          (* Trait polymorphic types *)
          [ (* Args *) Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ] ]
          (* Instance *)
          [ ("Output", InstanceField.Ty _Output); ("call_once", InstanceField.Method call_once) ].
    End Impl_core_ops_function_FnOnce_Tuple_ref__u8__for_core_slice_ascii_EscapeByte.
  End ascii.
End slice.

Module str.
  (* StructTuple
    {
      name := "LinesMap";
      const_params := [];
      ty_params := [];
      fields := [];
    } *)
  
  Module Impl_core_ops_function_Fn_Tuple_ref__str__for_core_str_LinesMap.
    Definition Self : Ty.t := Ty.path "core::str::LinesMap".
    
    (*
                    extern "rust-call" fn call(&self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        $body
                    }
    *)
    Definition call (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let line := M.copy (| γ0_0 |) in
                  M.read (|
                    M.match_operator (|
                      M.alloc (|
                        M.call_closure (|
                          M.get_associated_function (|
                            Ty.path "str",
                            "strip_suffix",
                            [ Ty.path "char" ]
                          |),
                          [ M.read (| line |); Value.UnicodeChar 10 ]
                        |)
                      |),
                      [
                        fun γ =>
                          ltac:(M.monadic
                            (let γ0_0 :=
                              M.SubPointer.get_struct_tuple_field (|
                                γ,
                                "core::option::Option::Some",
                                0
                              |) in
                            let line := M.copy (| γ0_0 |) in
                            M.match_operator (|
                              M.alloc (|
                                M.call_closure (|
                                  M.get_associated_function (|
                                    Ty.path "str",
                                    "strip_suffix",
                                    [ Ty.path "char" ]
                                  |),
                                  [ M.read (| line |); Value.UnicodeChar 13 ]
                                |)
                              |),
                              [
                                fun γ =>
                                  ltac:(M.monadic
                                    (let γ0_0 :=
                                      M.SubPointer.get_struct_tuple_field (|
                                        γ,
                                        "core::option::Option::Some",
                                        0
                                      |) in
                                    let line := M.copy (| γ0_0 |) in
                                    M.alloc (| M.read (| line |) |)))
                              ]
                            |)))
                      ]
                    |)
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::Fn"
        Self
        (* Trait polymorphic types *)
        [ (* Args *) Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.path "str" ] ] ]
        (* Instance *) [ ("call", InstanceField.Method call) ].
  End Impl_core_ops_function_Fn_Tuple_ref__str__for_core_str_LinesMap.
  
  Module Impl_core_ops_function_FnMut_Tuple_ref__str__for_core_str_LinesMap.
    Definition Self : Ty.t := Ty.path "core::str::LinesMap".
    
    (*
                    extern "rust-call" fn call_mut(
                        &mut self,
                        ($( $arg, )* ): ($( $ArgTy, )* )
                    ) -> $ReturnTy {
                        Fn::call(&*self, ($( $arg, )* ))
                    }
    *)
    Definition call_mut (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let line := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::LinesMap",
                      [ Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.path "str" ] ] ],
                      "call",
                      []
                    |),
                    [ M.read (| self |); Value.Tuple [ M.read (| line |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnMut"
        Self
        (* Trait polymorphic types *)
        [ (* Args *) Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.path "str" ] ] ]
        (* Instance *) [ ("call_mut", InstanceField.Method call_mut) ].
  End Impl_core_ops_function_FnMut_Tuple_ref__str__for_core_str_LinesMap.
  
  Module Impl_core_ops_function_FnOnce_Tuple_ref__str__for_core_str_LinesMap.
    Definition Self : Ty.t := Ty.path "core::str::LinesMap".
    
    (*                 type Output = $ReturnTy; *)
    Definition _Output : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "str" ].
    
    (*
                    extern "rust-call" fn call_once(self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        Fn::call(&self, ($( $arg, )* ))
                    }
    *)
    Definition call_once (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let line := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::LinesMap",
                      [ Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.path "str" ] ] ],
                      "call",
                      []
                    |),
                    [ self; Value.Tuple [ M.read (| line |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnOnce"
        Self
        (* Trait polymorphic types *)
        [ (* Args *) Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.path "str" ] ] ]
        (* Instance *)
        [ ("Output", InstanceField.Ty _Output); ("call_once", InstanceField.Method call_once) ].
  End Impl_core_ops_function_FnOnce_Tuple_ref__str__for_core_str_LinesMap.
  
  (* StructTuple
    {
      name := "CharEscapeDebugContinue";
      const_params := [];
      ty_params := [];
      fields := [];
    } *)
  
  Module Impl_core_ops_function_Fn_Tuple_char__for_core_str_CharEscapeDebugContinue.
    Definition Self : Ty.t := Ty.path "core::str::CharEscapeDebugContinue".
    
    (*
                    extern "rust-call" fn call(&self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        $body
                    }
    *)
    Definition call (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let c := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_associated_function (| Ty.path "char", "escape_debug_ext", [] |),
                    [
                      M.read (| c |);
                      Value.StructRecord
                        "core::char::methods::EscapeDebugExtArgs"
                        [
                          ("escape_grapheme_extended", Value.Bool false);
                          ("escape_single_quote", Value.Bool true);
                          ("escape_double_quote", Value.Bool true)
                        ]
                    ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::Fn"
        Self
        (* Trait polymorphic types *) [ (* Args *) Ty.tuple [ Ty.path "char" ] ]
        (* Instance *) [ ("call", InstanceField.Method call) ].
  End Impl_core_ops_function_Fn_Tuple_char__for_core_str_CharEscapeDebugContinue.
  
  Module Impl_core_ops_function_FnMut_Tuple_char__for_core_str_CharEscapeDebugContinue.
    Definition Self : Ty.t := Ty.path "core::str::CharEscapeDebugContinue".
    
    (*
                    extern "rust-call" fn call_mut(
                        &mut self,
                        ($( $arg, )* ): ($( $ArgTy, )* )
                    ) -> $ReturnTy {
                        Fn::call(&*self, ($( $arg, )* ))
                    }
    *)
    Definition call_mut (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let c := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::CharEscapeDebugContinue",
                      [ Ty.tuple [ Ty.path "char" ] ],
                      "call",
                      []
                    |),
                    [ M.read (| self |); Value.Tuple [ M.read (| c |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnMut"
        Self
        (* Trait polymorphic types *) [ (* Args *) Ty.tuple [ Ty.path "char" ] ]
        (* Instance *) [ ("call_mut", InstanceField.Method call_mut) ].
  End Impl_core_ops_function_FnMut_Tuple_char__for_core_str_CharEscapeDebugContinue.
  
  Module Impl_core_ops_function_FnOnce_Tuple_char__for_core_str_CharEscapeDebugContinue.
    Definition Self : Ty.t := Ty.path "core::str::CharEscapeDebugContinue".
    
    (*                 type Output = $ReturnTy; *)
    Definition _Output : Ty.t := Ty.path "core::char::EscapeDebug".
    
    (*
                    extern "rust-call" fn call_once(self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        Fn::call(&self, ($( $arg, )* ))
                    }
    *)
    Definition call_once (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let c := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::CharEscapeDebugContinue",
                      [ Ty.tuple [ Ty.path "char" ] ],
                      "call",
                      []
                    |),
                    [ self; Value.Tuple [ M.read (| c |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnOnce"
        Self
        (* Trait polymorphic types *) [ (* Args *) Ty.tuple [ Ty.path "char" ] ]
        (* Instance *)
        [ ("Output", InstanceField.Ty _Output); ("call_once", InstanceField.Method call_once) ].
  End Impl_core_ops_function_FnOnce_Tuple_char__for_core_str_CharEscapeDebugContinue.
  
  (* StructTuple
    {
      name := "CharEscapeUnicode";
      const_params := [];
      ty_params := [];
      fields := [];
    } *)
  
  Module Impl_core_ops_function_Fn_Tuple_char__for_core_str_CharEscapeUnicode.
    Definition Self : Ty.t := Ty.path "core::str::CharEscapeUnicode".
    
    (*
                    extern "rust-call" fn call(&self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        $body
                    }
    *)
    Definition call (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let c := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_associated_function (| Ty.path "char", "escape_unicode", [] |),
                    [ M.read (| c |) ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::Fn"
        Self
        (* Trait polymorphic types *) [ (* Args *) Ty.tuple [ Ty.path "char" ] ]
        (* Instance *) [ ("call", InstanceField.Method call) ].
  End Impl_core_ops_function_Fn_Tuple_char__for_core_str_CharEscapeUnicode.
  
  Module Impl_core_ops_function_FnMut_Tuple_char__for_core_str_CharEscapeUnicode.
    Definition Self : Ty.t := Ty.path "core::str::CharEscapeUnicode".
    
    (*
                    extern "rust-call" fn call_mut(
                        &mut self,
                        ($( $arg, )* ): ($( $ArgTy, )* )
                    ) -> $ReturnTy {
                        Fn::call(&*self, ($( $arg, )* ))
                    }
    *)
    Definition call_mut (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let c := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::CharEscapeUnicode",
                      [ Ty.tuple [ Ty.path "char" ] ],
                      "call",
                      []
                    |),
                    [ M.read (| self |); Value.Tuple [ M.read (| c |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnMut"
        Self
        (* Trait polymorphic types *) [ (* Args *) Ty.tuple [ Ty.path "char" ] ]
        (* Instance *) [ ("call_mut", InstanceField.Method call_mut) ].
  End Impl_core_ops_function_FnMut_Tuple_char__for_core_str_CharEscapeUnicode.
  
  Module Impl_core_ops_function_FnOnce_Tuple_char__for_core_str_CharEscapeUnicode.
    Definition Self : Ty.t := Ty.path "core::str::CharEscapeUnicode".
    
    (*                 type Output = $ReturnTy; *)
    Definition _Output : Ty.t := Ty.path "core::char::EscapeUnicode".
    
    (*
                    extern "rust-call" fn call_once(self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        Fn::call(&self, ($( $arg, )* ))
                    }
    *)
    Definition call_once (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let c := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::CharEscapeUnicode",
                      [ Ty.tuple [ Ty.path "char" ] ],
                      "call",
                      []
                    |),
                    [ self; Value.Tuple [ M.read (| c |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnOnce"
        Self
        (* Trait polymorphic types *) [ (* Args *) Ty.tuple [ Ty.path "char" ] ]
        (* Instance *)
        [ ("Output", InstanceField.Ty _Output); ("call_once", InstanceField.Method call_once) ].
  End Impl_core_ops_function_FnOnce_Tuple_char__for_core_str_CharEscapeUnicode.
  
  (* StructTuple
    {
      name := "CharEscapeDefault";
      const_params := [];
      ty_params := [];
      fields := [];
    } *)
  
  Module Impl_core_ops_function_Fn_Tuple_char__for_core_str_CharEscapeDefault.
    Definition Self : Ty.t := Ty.path "core::str::CharEscapeDefault".
    
    (*
                    extern "rust-call" fn call(&self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        $body
                    }
    *)
    Definition call (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let c := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_associated_function (| Ty.path "char", "escape_default", [] |),
                    [ M.read (| c |) ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::Fn"
        Self
        (* Trait polymorphic types *) [ (* Args *) Ty.tuple [ Ty.path "char" ] ]
        (* Instance *) [ ("call", InstanceField.Method call) ].
  End Impl_core_ops_function_Fn_Tuple_char__for_core_str_CharEscapeDefault.
  
  Module Impl_core_ops_function_FnMut_Tuple_char__for_core_str_CharEscapeDefault.
    Definition Self : Ty.t := Ty.path "core::str::CharEscapeDefault".
    
    (*
                    extern "rust-call" fn call_mut(
                        &mut self,
                        ($( $arg, )* ): ($( $ArgTy, )* )
                    ) -> $ReturnTy {
                        Fn::call(&*self, ($( $arg, )* ))
                    }
    *)
    Definition call_mut (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let c := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::CharEscapeDefault",
                      [ Ty.tuple [ Ty.path "char" ] ],
                      "call",
                      []
                    |),
                    [ M.read (| self |); Value.Tuple [ M.read (| c |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnMut"
        Self
        (* Trait polymorphic types *) [ (* Args *) Ty.tuple [ Ty.path "char" ] ]
        (* Instance *) [ ("call_mut", InstanceField.Method call_mut) ].
  End Impl_core_ops_function_FnMut_Tuple_char__for_core_str_CharEscapeDefault.
  
  Module Impl_core_ops_function_FnOnce_Tuple_char__for_core_str_CharEscapeDefault.
    Definition Self : Ty.t := Ty.path "core::str::CharEscapeDefault".
    
    (*                 type Output = $ReturnTy; *)
    Definition _Output : Ty.t := Ty.path "core::char::EscapeDefault".
    
    (*
                    extern "rust-call" fn call_once(self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        Fn::call(&self, ($( $arg, )* ))
                    }
    *)
    Definition call_once (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let c := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::CharEscapeDefault",
                      [ Ty.tuple [ Ty.path "char" ] ],
                      "call",
                      []
                    |),
                    [ self; Value.Tuple [ M.read (| c |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnOnce"
        Self
        (* Trait polymorphic types *) [ (* Args *) Ty.tuple [ Ty.path "char" ] ]
        (* Instance *)
        [ ("Output", InstanceField.Ty _Output); ("call_once", InstanceField.Method call_once) ].
  End Impl_core_ops_function_FnOnce_Tuple_char__for_core_str_CharEscapeDefault.
  
  (* StructTuple
    {
      name := "IsWhitespace";
      const_params := [];
      ty_params := [];
      fields := [];
    } *)
  
  Module Impl_core_ops_function_Fn_Tuple_char__for_core_str_IsWhitespace.
    Definition Self : Ty.t := Ty.path "core::str::IsWhitespace".
    
    (*
                    extern "rust-call" fn call(&self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        $body
                    }
    *)
    Definition call (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let c := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_associated_function (| Ty.path "char", "is_whitespace", [] |),
                    [ M.read (| c |) ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::Fn"
        Self
        (* Trait polymorphic types *) [ (* Args *) Ty.tuple [ Ty.path "char" ] ]
        (* Instance *) [ ("call", InstanceField.Method call) ].
  End Impl_core_ops_function_Fn_Tuple_char__for_core_str_IsWhitespace.
  
  Module Impl_core_ops_function_FnMut_Tuple_char__for_core_str_IsWhitespace.
    Definition Self : Ty.t := Ty.path "core::str::IsWhitespace".
    
    (*
                    extern "rust-call" fn call_mut(
                        &mut self,
                        ($( $arg, )* ): ($( $ArgTy, )* )
                    ) -> $ReturnTy {
                        Fn::call(&*self, ($( $arg, )* ))
                    }
    *)
    Definition call_mut (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let c := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::IsWhitespace",
                      [ Ty.tuple [ Ty.path "char" ] ],
                      "call",
                      []
                    |),
                    [ M.read (| self |); Value.Tuple [ M.read (| c |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnMut"
        Self
        (* Trait polymorphic types *) [ (* Args *) Ty.tuple [ Ty.path "char" ] ]
        (* Instance *) [ ("call_mut", InstanceField.Method call_mut) ].
  End Impl_core_ops_function_FnMut_Tuple_char__for_core_str_IsWhitespace.
  
  Module Impl_core_ops_function_FnOnce_Tuple_char__for_core_str_IsWhitespace.
    Definition Self : Ty.t := Ty.path "core::str::IsWhitespace".
    
    (*                 type Output = $ReturnTy; *)
    Definition _Output : Ty.t := Ty.path "bool".
    
    (*
                    extern "rust-call" fn call_once(self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        Fn::call(&self, ($( $arg, )* ))
                    }
    *)
    Definition call_once (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let c := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::IsWhitespace",
                      [ Ty.tuple [ Ty.path "char" ] ],
                      "call",
                      []
                    |),
                    [ self; Value.Tuple [ M.read (| c |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnOnce"
        Self
        (* Trait polymorphic types *) [ (* Args *) Ty.tuple [ Ty.path "char" ] ]
        (* Instance *)
        [ ("Output", InstanceField.Ty _Output); ("call_once", InstanceField.Method call_once) ].
  End Impl_core_ops_function_FnOnce_Tuple_char__for_core_str_IsWhitespace.
  
  (* StructTuple
    {
      name := "IsAsciiWhitespace";
      const_params := [];
      ty_params := [];
      fields := [];
    } *)
  
  Module Impl_core_ops_function_Fn_Tuple_ref__u8__for_core_str_IsAsciiWhitespace.
    Definition Self : Ty.t := Ty.path "core::str::IsAsciiWhitespace".
    
    (*
                    extern "rust-call" fn call(&self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        $body
                    }
    *)
    Definition call (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let byte := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_associated_function (| Ty.path "u8", "is_ascii_whitespace", [] |),
                    [ M.read (| byte |) ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::Fn"
        Self
        (* Trait polymorphic types *)
        [ (* Args *) Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ] ]
        (* Instance *) [ ("call", InstanceField.Method call) ].
  End Impl_core_ops_function_Fn_Tuple_ref__u8__for_core_str_IsAsciiWhitespace.
  
  Module Impl_core_ops_function_FnMut_Tuple_ref__u8__for_core_str_IsAsciiWhitespace.
    Definition Self : Ty.t := Ty.path "core::str::IsAsciiWhitespace".
    
    (*
                    extern "rust-call" fn call_mut(
                        &mut self,
                        ($( $arg, )* ): ($( $ArgTy, )* )
                    ) -> $ReturnTy {
                        Fn::call(&*self, ($( $arg, )* ))
                    }
    *)
    Definition call_mut (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let byte := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::IsAsciiWhitespace",
                      [ Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ] ],
                      "call",
                      []
                    |),
                    [ M.read (| self |); Value.Tuple [ M.read (| byte |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnMut"
        Self
        (* Trait polymorphic types *)
        [ (* Args *) Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ] ]
        (* Instance *) [ ("call_mut", InstanceField.Method call_mut) ].
  End Impl_core_ops_function_FnMut_Tuple_ref__u8__for_core_str_IsAsciiWhitespace.
  
  Module Impl_core_ops_function_FnOnce_Tuple_ref__u8__for_core_str_IsAsciiWhitespace.
    Definition Self : Ty.t := Ty.path "core::str::IsAsciiWhitespace".
    
    (*                 type Output = $ReturnTy; *)
    Definition _Output : Ty.t := Ty.path "bool".
    
    (*
                    extern "rust-call" fn call_once(self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        Fn::call(&self, ($( $arg, )* ))
                    }
    *)
    Definition call_once (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let byte := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::IsAsciiWhitespace",
                      [ Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ] ],
                      "call",
                      []
                    |),
                    [ self; Value.Tuple [ M.read (| byte |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnOnce"
        Self
        (* Trait polymorphic types *)
        [ (* Args *) Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.path "u8" ] ] ]
        (* Instance *)
        [ ("Output", InstanceField.Ty _Output); ("call_once", InstanceField.Method call_once) ].
  End Impl_core_ops_function_FnOnce_Tuple_ref__u8__for_core_str_IsAsciiWhitespace.
  
  (* StructTuple
    {
      name := "IsNotEmpty";
      const_params := [];
      ty_params := [];
      fields := [];
    } *)
  
  Module Impl_core_ops_function_Fn_Tuple_ref__ref__str__for_core_str_IsNotEmpty.
    Definition Self : Ty.t := Ty.path "core::str::IsNotEmpty".
    
    (*
                    extern "rust-call" fn call(&self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        $body
                    }
    *)
    Definition call (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let s := M.copy (| γ0_0 |) in
                  UnOp.not (|
                    M.call_closure (|
                      M.get_associated_function (| Ty.path "str", "is_empty", [] |),
                      [ M.read (| M.read (| s |) |) ]
                    |)
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::Fn"
        Self
        (* Trait polymorphic types *)
        [
          (* Args *)
          Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.apply (Ty.path "&") [] [ Ty.path "str" ] ] ]
        ]
        (* Instance *) [ ("call", InstanceField.Method call) ].
  End Impl_core_ops_function_Fn_Tuple_ref__ref__str__for_core_str_IsNotEmpty.
  
  Module Impl_core_ops_function_FnMut_Tuple_ref__ref__str__for_core_str_IsNotEmpty.
    Definition Self : Ty.t := Ty.path "core::str::IsNotEmpty".
    
    (*
                    extern "rust-call" fn call_mut(
                        &mut self,
                        ($( $arg, )* ): ($( $ArgTy, )* )
                    ) -> $ReturnTy {
                        Fn::call(&*self, ($( $arg, )* ))
                    }
    *)
    Definition call_mut (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let s := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::IsNotEmpty",
                      [
                        Ty.tuple
                          [
                            Ty.apply
                              (Ty.path "&")
                              []
                              [ Ty.apply (Ty.path "&") [] [ Ty.path "str" ] ]
                          ]
                      ],
                      "call",
                      []
                    |),
                    [ M.read (| self |); Value.Tuple [ M.read (| s |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnMut"
        Self
        (* Trait polymorphic types *)
        [
          (* Args *)
          Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.apply (Ty.path "&") [] [ Ty.path "str" ] ] ]
        ]
        (* Instance *) [ ("call_mut", InstanceField.Method call_mut) ].
  End Impl_core_ops_function_FnMut_Tuple_ref__ref__str__for_core_str_IsNotEmpty.
  
  Module Impl_core_ops_function_FnOnce_Tuple_ref__ref__str__for_core_str_IsNotEmpty.
    Definition Self : Ty.t := Ty.path "core::str::IsNotEmpty".
    
    (*                 type Output = $ReturnTy; *)
    Definition _Output : Ty.t := Ty.path "bool".
    
    (*
                    extern "rust-call" fn call_once(self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        Fn::call(&self, ($( $arg, )* ))
                    }
    *)
    Definition call_once (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let s := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::IsNotEmpty",
                      [
                        Ty.tuple
                          [
                            Ty.apply
                              (Ty.path "&")
                              []
                              [ Ty.apply (Ty.path "&") [] [ Ty.path "str" ] ]
                          ]
                      ],
                      "call",
                      []
                    |),
                    [ self; Value.Tuple [ M.read (| s |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnOnce"
        Self
        (* Trait polymorphic types *)
        [
          (* Args *)
          Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.apply (Ty.path "&") [] [ Ty.path "str" ] ] ]
        ]
        (* Instance *)
        [ ("Output", InstanceField.Ty _Output); ("call_once", InstanceField.Method call_once) ].
  End Impl_core_ops_function_FnOnce_Tuple_ref__ref__str__for_core_str_IsNotEmpty.
  
  (* StructTuple
    {
      name := "BytesIsNotEmpty";
      const_params := [];
      ty_params := [];
      fields := [];
    } *)
  
  Module Impl_core_ops_function_Fn_Tuple_ref__ref__slice_u8__for_core_str_BytesIsNotEmpty.
    Definition Self : Ty.t := Ty.path "core::str::BytesIsNotEmpty".
    
    (*
                    extern "rust-call" fn call(&self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        $body
                    }
    *)
    Definition call (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let s := M.copy (| γ0_0 |) in
                  UnOp.not (|
                    M.call_closure (|
                      M.get_associated_function (|
                        Ty.apply (Ty.path "slice") [] [ Ty.path "u8" ],
                        "is_empty",
                        []
                      |),
                      [ M.read (| M.read (| s |) |) ]
                    |)
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::Fn"
        Self
        (* Trait polymorphic types *)
        [
          (* Args *)
          Ty.tuple
            [
              Ty.apply
                (Ty.path "&")
                []
                [ Ty.apply (Ty.path "&") [] [ Ty.apply (Ty.path "slice") [] [ Ty.path "u8" ] ] ]
            ]
        ]
        (* Instance *) [ ("call", InstanceField.Method call) ].
  End Impl_core_ops_function_Fn_Tuple_ref__ref__slice_u8__for_core_str_BytesIsNotEmpty.
  
  Module Impl_core_ops_function_FnMut_Tuple_ref__ref__slice_u8__for_core_str_BytesIsNotEmpty.
    Definition Self : Ty.t := Ty.path "core::str::BytesIsNotEmpty".
    
    (*
                    extern "rust-call" fn call_mut(
                        &mut self,
                        ($( $arg, )* ): ($( $ArgTy, )* )
                    ) -> $ReturnTy {
                        Fn::call(&*self, ($( $arg, )* ))
                    }
    *)
    Definition call_mut (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let s := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::BytesIsNotEmpty",
                      [
                        Ty.tuple
                          [
                            Ty.apply
                              (Ty.path "&")
                              []
                              [
                                Ty.apply
                                  (Ty.path "&")
                                  []
                                  [ Ty.apply (Ty.path "slice") [] [ Ty.path "u8" ] ]
                              ]
                          ]
                      ],
                      "call",
                      []
                    |),
                    [ M.read (| self |); Value.Tuple [ M.read (| s |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnMut"
        Self
        (* Trait polymorphic types *)
        [
          (* Args *)
          Ty.tuple
            [
              Ty.apply
                (Ty.path "&")
                []
                [ Ty.apply (Ty.path "&") [] [ Ty.apply (Ty.path "slice") [] [ Ty.path "u8" ] ] ]
            ]
        ]
        (* Instance *) [ ("call_mut", InstanceField.Method call_mut) ].
  End Impl_core_ops_function_FnMut_Tuple_ref__ref__slice_u8__for_core_str_BytesIsNotEmpty.
  
  Module Impl_core_ops_function_FnOnce_Tuple_ref__ref__slice_u8__for_core_str_BytesIsNotEmpty.
    Definition Self : Ty.t := Ty.path "core::str::BytesIsNotEmpty".
    
    (*                 type Output = $ReturnTy; *)
    Definition _Output : Ty.t := Ty.path "bool".
    
    (*
                    extern "rust-call" fn call_once(self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        Fn::call(&self, ($( $arg, )* ))
                    }
    *)
    Definition call_once (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let s := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::BytesIsNotEmpty",
                      [
                        Ty.tuple
                          [
                            Ty.apply
                              (Ty.path "&")
                              []
                              [
                                Ty.apply
                                  (Ty.path "&")
                                  []
                                  [ Ty.apply (Ty.path "slice") [] [ Ty.path "u8" ] ]
                              ]
                          ]
                      ],
                      "call",
                      []
                    |),
                    [ self; Value.Tuple [ M.read (| s |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnOnce"
        Self
        (* Trait polymorphic types *)
        [
          (* Args *)
          Ty.tuple
            [
              Ty.apply
                (Ty.path "&")
                []
                [ Ty.apply (Ty.path "&") [] [ Ty.apply (Ty.path "slice") [] [ Ty.path "u8" ] ] ]
            ]
        ]
        (* Instance *)
        [ ("Output", InstanceField.Ty _Output); ("call_once", InstanceField.Method call_once) ].
  End Impl_core_ops_function_FnOnce_Tuple_ref__ref__slice_u8__for_core_str_BytesIsNotEmpty.
  
  (* StructTuple
    {
      name := "UnsafeBytesToStr";
      const_params := [];
      ty_params := [];
      fields := [];
    } *)
  
  Module Impl_core_ops_function_Fn_Tuple_ref__slice_u8__for_core_str_UnsafeBytesToStr.
    Definition Self : Ty.t := Ty.path "core::str::UnsafeBytesToStr".
    
    (*
                    extern "rust-call" fn call(&self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        $body
                    }
    *)
    Definition call (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let bytes := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_function (| "core::str::converts::from_utf8_unchecked", [] |),
                    [ M.read (| bytes |) ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::Fn"
        Self
        (* Trait polymorphic types *)
        [
          (* Args *)
          Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.apply (Ty.path "slice") [] [ Ty.path "u8" ] ] ]
        ]
        (* Instance *) [ ("call", InstanceField.Method call) ].
  End Impl_core_ops_function_Fn_Tuple_ref__slice_u8__for_core_str_UnsafeBytesToStr.
  
  Module Impl_core_ops_function_FnMut_Tuple_ref__slice_u8__for_core_str_UnsafeBytesToStr.
    Definition Self : Ty.t := Ty.path "core::str::UnsafeBytesToStr".
    
    (*
                    extern "rust-call" fn call_mut(
                        &mut self,
                        ($( $arg, )* ): ($( $ArgTy, )* )
                    ) -> $ReturnTy {
                        Fn::call(&*self, ($( $arg, )* ))
                    }
    *)
    Definition call_mut (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let bytes := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::UnsafeBytesToStr",
                      [
                        Ty.tuple
                          [
                            Ty.apply
                              (Ty.path "&")
                              []
                              [ Ty.apply (Ty.path "slice") [] [ Ty.path "u8" ] ]
                          ]
                      ],
                      "call",
                      []
                    |),
                    [ M.read (| self |); Value.Tuple [ M.read (| bytes |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnMut"
        Self
        (* Trait polymorphic types *)
        [
          (* Args *)
          Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.apply (Ty.path "slice") [] [ Ty.path "u8" ] ] ]
        ]
        (* Instance *) [ ("call_mut", InstanceField.Method call_mut) ].
  End Impl_core_ops_function_FnMut_Tuple_ref__slice_u8__for_core_str_UnsafeBytesToStr.
  
  Module Impl_core_ops_function_FnOnce_Tuple_ref__slice_u8__for_core_str_UnsafeBytesToStr.
    Definition Self : Ty.t := Ty.path "core::str::UnsafeBytesToStr".
    
    (*                 type Output = $ReturnTy; *)
    Definition _Output : Ty.t := Ty.apply (Ty.path "&") [] [ Ty.path "str" ].
    
    (*
                    extern "rust-call" fn call_once(self, ($( $arg, )* ): ($( $ArgTy, )* )) -> $ReturnTy {
                        Fn::call(&self, ($( $arg, )* ))
                    }
    *)
    Definition call_once (ε : list Value.t) (τ : list Ty.t) (α : list Value.t) : M :=
      match ε, τ, α with
      | [], [], [ self; β1 ] =>
        ltac:(M.monadic
          (let self := M.alloc (| self |) in
          let β1 := M.alloc (| β1 |) in
          M.match_operator (|
            β1,
            [
              fun γ =>
                ltac:(M.monadic
                  (let γ0_0 := M.SubPointer.get_tuple_field (| γ, 0 |) in
                  let bytes := M.copy (| γ0_0 |) in
                  M.call_closure (|
                    M.get_trait_method (|
                      "core::ops::function::Fn",
                      Ty.path "core::str::UnsafeBytesToStr",
                      [
                        Ty.tuple
                          [
                            Ty.apply
                              (Ty.path "&")
                              []
                              [ Ty.apply (Ty.path "slice") [] [ Ty.path "u8" ] ]
                          ]
                      ],
                      "call",
                      []
                    |),
                    [ self; Value.Tuple [ M.read (| bytes |) ] ]
                  |)))
            ]
          |)))
      | _, _, _ => M.impossible "wrong number of arguments"
      end.
    
    Axiom Implements :
      M.IsTraitInstance
        "core::ops::function::FnOnce"
        Self
        (* Trait polymorphic types *)
        [
          (* Args *)
          Ty.tuple [ Ty.apply (Ty.path "&") [] [ Ty.apply (Ty.path "slice") [] [ Ty.path "u8" ] ] ]
        ]
        (* Instance *)
        [ ("Output", InstanceField.Ty _Output); ("call_once", InstanceField.Method call_once) ].
  End Impl_core_ops_function_FnOnce_Tuple_ref__slice_u8__for_core_str_UnsafeBytesToStr.
End str.
